pax_global_header00006660000000000000000000000064134764624000014520gustar00rootroot0000000000000052 comment=7634eb1a3f2effa199f70c264adf2aece399ad0b linbox-1.6.3/000077500000000000000000000000001347646240000130225ustar00rootroot00000000000000linbox-1.6.3/.gitignore000066400000000000000000000011121347646240000150050ustar00rootroot00000000000000# Ignore all and unignore all with extensions, # so that no-extensions files are ignored by default. * !/**/ !*.* # Ignore generated files and folders **/Makefile.in **/*.log **/*.trs **/*.o **/*.exe **/*~ **/*.la **/*.lo **/.libs **/.deps/ # Ignore specific folders .vscode/ autom4te.cache/ build-aux/ # Ignore specific files _configs.sed aclocal.m4 autogen.status config.h config.h.in config.status linbox.pc macros/libtool.m4 macros/ltoptions.m4 macros/ltsugar.m4 macros/ltversion.m4 macros/lt~obsolete.m4 # @todo Don't know why that is here tests/.tmp-tests tests/checker.dSYM/ linbox-1.6.3/AUTHORS000066400000000000000000000037021347646240000140740ustar00rootroot00000000000000The Linbox group is composed of the following authors: Alexis Breust https://github.com/Breush Brice Boyer Jean-Guillaume Dumas Ahmet Duran Thierry Gautier Pascal Giorgi Bradford Hovinen Gavin Harrison Erich Kaltofen Romain Lebreton Austin Lobo Clement Pernet https://github.com/ClementPernet Daniel Roche B. David Saunders Rich Seagraves Alex Stashnik William J. Turner > Anna Urbanska Gilles Villard Zhendong Wan Brian Youse George Yuhasz and contributors: Frank Bellamy François Bissey https://github.com/kiwifb Nicolas Bordes https://github.com/NicsTr Brad Botting Cyril Bouvier https://github.com/cyrilbouvier Erik Bray https://github.com/embray Bob Caviness Li Chen Matthew Comer Abderhaman Cheniour Carl Devore Wayne Eberly Matthew Fendt Mark Giesbrecht Bruno Grenet Brian Gold Max Horn Jeremy Johnson Ben Karel Pierre Karpman George Labahn Matthew Lambert Wen-shin Lee Ashley Lesdalon David Lucas John May Dmitriy Morozov Vincent Neiger https://github.com/vneiger David Pritchard Sven Reichard Jean-Louis Roch Arne Storjohann Doug Torrance https://github.com/d-torrance Bastien Vialla https://github.com/BastienVialla linbox-1.6.3/CHANGED-INTERFACES000066400000000000000000000047501347646240000154250ustar00rootroot00000000000000Author: Hovinen (early 2002), edits by Saunders (2003Jan) Class names: In general: Most class names now follow the Java/Smalltalk MyClass style. Abbreviations have been removed in most cases. Field::randIter -> Field::RandIter sparsemat* -> SparseMatrix* diagonal -> Diagonal hilbert -> Hilbert etc. There are two notable exceptions: The wrapper of GMP long integers is "integer", and field elements are represented by "element". ParamGivaro::Modular was first renamed LargeModular, since it works over a modulus of arbitrary size. Corresponding SmallGivaro::Modular (word size modulus) and TinyGivaro::Modular (half-word size modulus) were planned. All of this has become Givaro::Modular, for basic element types of the various sizes, including unsigned and floating types. For example Givaro::Modular. Class methods: In general: I have standardized everything on the Java studlycaps style, e.g. MyClass::myMethod The names Blackbox_archetype::applyin and Blackbox_archetype::applyTransposein have been changed to BlackboxArchetype::applyIn and BlackboxArchetype::applyTransposeIn, respectively. Header files: All header files that previously used '_' to separate words use '-' now as '-' is easier to type. More generally the header file named first-second-third.h can be expected to contain a declaration of class FirstSecondThird. The archetype header files have been moved into directories containing objects of those archetypes and are all now named "archetype.h", "abstract.h", and "envelope.h". Header files are now installed into a tree matching that of the source code as opposed to a single, flat directory. So, for example, one now includes LinBox/blackbox/archetype.h as opposed to LinBox/blackbox-archetype.h Miscellanae: In the random iterator interface, the operator () has been replaced by a function random accepting a single argument -- an element type into which the random element should be placed. This eliminates the potential for memory leaks. The blackbox container class now requires that a field be passed, as it no longer retrieves the field from the black box. Some terms composed of more than one word are considered to be compound words and do not have internal capitalization, e.g. Blackbox (vs. BlackBox) and minpoly (vs. minPoly). Frozen design: These files are frozen and require team consensus for changes. field-archetype.h blackbox-archetype.h element-archetype.h randiter-archetype.h linbox-1.6.3/COPYING000066400000000000000000000432541347646240000140650ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. linbox-1.6.3/COPYING.LESSER000066400000000000000000000636421347646240000150640ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! linbox-1.6.3/ChangeLog000066400000000000000000006637241347646240000146160ustar00rootroot000000000000002019-06-07 v1.6.3 Minor update: * fix test-suite failures when compiling in builddir!=srcdir * improve jenkins builder script * add README.md and other missing files in distribution 2019-05-10 v1.6.0 Major code refactorization: * solve solution * echelon form code * prime generators * Smith form via Valence * MPI serialization and communicators Improvements: * many bug fixes * new hadamard bound solutions * removal of the obsolete sage-interface * update and new polynomial matrix classes and API with Givaro * MPI based chinese remaindering applied to solve * broader testsuite 2017-12-08 v1.5.2 Improvements: * minor bug fixes (missing config.h file, and SIMD macros) * documentation build fixes 2017-11-22 v1.5.1 Improvements: * minor bug fixes in the build system and autoinstall 2017-11-17 v1.5.0 Improvements: * improved build system (instruction set detection, C++11 and clang compatibility, ...) * many bug fixes * increased test-suite coverage Changes in API: * new PolynomialRing and DensePolynomial classes, and update interraction with Givaro and FFLAS 2016-07-30 cpernet v1.4.2 * cleanup and new features on polynomial matrices * many bug fixes ensuring support of gcc-4.8, 5.3, 6.1 clang-3.4 and icpc on i386, x86_64, ubuntu osx, fedora and ppcle 2016-02-24 cpernet v1.4.1 * update the build system (add pkgconfig file, and a more consistent way of dealing with dependencies) * fix all remaining issues for the integration in SageMath 2016-02-24 cpernet * move almost all finite fields to givaro * cleanup dead code * many bug fixes * change in some parts of the API * improved order basis computations 2011-03-10 briceboyer * Implement DublinBox Mother model for dense matrices (BlasM* own, BlasS* share) * Change BlasSubmatrix private members (and add one to make Iterators faster) * Change <> includes to "" so I have no surprise when the compiler looks them in a non expected place * add a const in Field Categories for a weird bug... * RawIterators are renamed to Iterators (impossible to pronounce, easy to misspell) * add functions to blas-domain and blas-matrix 2011-24-09 briceboyer * replace DenseMatrix(Base) by Blas(Matrix/Blackbox) * put these classes (and DenseSubmatrix) in a Protected namespace (users will be warned...) * update Blas(Mat/Bb) interface * clean DenseMatrix(Base) from LinBox * Delete BlasTag (use LinBoxTag class instead, avoids branching) * Update to Givaro gcd new clean intefarce * Update to one/zero in (some) Fflas-Ffpack fields * Rename Flaflas to more serious FFLAS-FFPACK * Minor updates in some classes. * martin albretch patch to update linbox-sage.h * M4RI checks * Ekopath (pathscale) checks 2011-05-11 briceboyer linbox-1.2.0 released: * Many many bug fixes, many memleaks, much code beautify. * Licence/copyright added to (hopefully) every file. * Vi/emacs magic lines for auto-indentation. * Some documentation added + improved Doxygen framework (dev/user documentation, more *.doxy items, bug/todo list, bibliography list) * Upgrade to givaro 3.4.0 series ( new namespace, new API for integer operations, a few new functions (naturallog...) ) * Upgrade to fflas-ffpack 1.4.0 (new namespace, new includes) * Some initial work introduced here and there (matrix permutation representations, symbolic/numeric solver, sparse matrix representation...) * CRA algorithms reworked and tested, some added. * Timer moved to Givaro * Some debug/util moved to FflasFfpack * Better configure.ac/Makefiles (more options, icc/gcc customisation,...) * More m4 rules * Possibility to use IML functions as a shared library (and some examples given) * 'make fullcheck' checks all possible tests given and reports * Auto-installer from sources/svn with plenty of options * Some new field functions like characteristic() * Work on synchronising field member functions signatures for better compatibility between all fields (in progress) 2010-11-03 cpernet linbox-1.1.7 released: * bug fixes and minor enhancements * New interface to sage (supporting native floating point representation) * new rebind interface * incorporate the code for computations over the rationals (by A Ubranska), still waiting to be cleaned-up (it is not used yet by default) 2008-09-22 cpernet linbox-1.1.6 released: * compilation pb, and bug fixes, for cygwin support and debianization 2008-06-10 cpernet * Upgrade fflas-ffpack to v1.3.3 (safer and tighter bounds, bug fixes,...) * Design changes for balanced finite field implementations * Improve efficiency of Chinese Remainder Algorithm * Add new interface to Sage * bugs and documentation fixes * remove gmp++ from LinBox, and thus make Givaro a necessary package 2008_03-02 cpernet linbox-1.1.5 released: * drivers are back to the source code, * shared libraries are enabled by default. * new code in fflas-ffpack for rank profiles * new double-determinant algorithm * changed the rawIndexedIterator interface, fixing the broken previous one. * many minor fixes, mostly memleaks. 2007-10-27 cpernet linbox-1.1.4 has been released including the following most important changes: * lots of memory leaks fixed * better compliance with BLAS * increased system solver functionalities (rectangular, rank deficient matrices) * support for g++/gcc v4.2 2007-09-28 cpernet * Add support for more general dense system solving: The system can be rectangular (over/underdetermined), singular. 2007-09-07 bds * This changelog is being widely ignored. Today buildbot test is on. 2007-01-31 bds * This entry is just to record that version 1.1.0 has been released by Jean-Guillaume Dumas and the current svn version is just a couple of steps from the release version. 2006-08-08 bds * examples/det.C, solutions/det.h, methods.h modified in preparation for * mpi based paralle cra loop in algorithms/cra-domain.h (by Bryan Youse). * also a stub of util/mpicpp.h added (will become the mpi interface). 2006-07-27 Hui Wang and bds * Add blackbox/quad-matrix.h which defines the ZOQuad matrix, * which is a cache efficient {0,1}-matrix rep. * Add it's tests, modify also blackbox/zo.h, * and accumulate-special in field/modular.h to better support sums of field elements efficiently. 2006-06-01 bds * rank.h adjusted to work around faulty PIVOT_LINEAR code in sparse elim. * test-rank.C now tests blackbox, elimination, hybrid methods as well as... 2006-04-18 bds and Hui Wang * examples/smith.C minor changes * linbox/blackbox/apply.h - don't recall what we did to wreck this. * linbox/blackbox/archetype.h linbox/blackbox/scalar-matrix.h linbox/blackbox/zero-one.h linbox/randiter/modular.h linbox/vector/stream.h tests/Makefile.am tests/Matio.h - minor touches * cvs thinks we changed just about everything in tests, but diff shows no change. We're checking in anyway * Where are our added files blackbox/zo.h zo.inl quad-matrix.h ? - which are a new version of zero-one and a block decomposed sparse matrix, resp. 2006-01-20 bds and Hui Wang * linbox/algorithms/gauss.inl - we think we made it better but it still isn't working :-) 2005-12-13 Pascal Giorgi * linbox/algorithms/Makefile.am: add new files * linbox/algorithms/lifting-container.h: minor change * linbox/algorithms/matpoly-mult.h: adding FFT and Karatsuba based polynomial matrix multiplication and middle product * linbox/algorithms/rational-reconstruction.h: use macro to enable timing * linbox/algorithms/rational-solver.h: minor change * linbox/algorithms/rational-solver.inl: minor chane * linbox/algorithms/short-vector.h: work in progress for ternary lattice reduction * linbox/algorithms/sigma-basis.h: add muti sigma basis computation and special Pade solver. * linbox/blackbox/block-hankel-inverse.h: enable use of new special Pade solver * linbox/blackbox/block-hankel.h: use macro to enable timing * linbox/randiter/{Makefile.am,random-fftprime.h}: add fftprime generator 2005-12-8 bds * minor cleanups 2005-11-17 Pascal Giorgi: * macros/blas-check.m4: adding new support for blas libraries * macros/linbox-opt.m4: adding new support for blas libraries * macros/linbox-misc.m4: adding new support for blas libraries * linbox/config-blas.h: linbox headers for BLAS * linbox/Makefile.am: add new BLAS support * linbox/fflas/Makefile.am: remove dependencies to ATLAS * linbox/fflas/fflas.h: add new BLAS support * linbox/ffpack.Makefile.am: remove dependencies to ATLAS * configure.in: remove ATLAS checking and replace with BLAS checking * linbox-config.in: remove ATLAS libs and replace with BLAS libs * tests/Makefile.am: remove ATLAS dependencies 2005-10-26 Pascal Giorgi: * linbox/algorithms/Makefile.am: add sigma-basis.h file * linbox/algorithms/sigma-basis.h: make sigma basis algorithm available * linbox/algorithms/blackbox-block-container.h: add support for special structured block * linbox/algorithms/blas-domain.h: fix bug * linbox/algorithms/lifting-container.h: add support for sparse solver using a Block Hankel inverse * linbox/algorithms/rational-solver.h(.inl): add new algorithm for solving sparse system * linbox/blackbox/Makefile.am: add block-hankel.h. block-toeplitz.h and block-hankel-inverse.h * linbox/blackbox/apply.h: fix optimization compatibility * linbox/blackbox/block-hankel.h : add a blackbox for block Hankel matrices * linbox/blackbox/block-hankel-inverse.h: add blackbox to compute the inverse of a block Hankel blackbox * linbox/blackbox/block-toeplitz.h: add a blackbox for block Toeplitz matrices * linbox/element/gmp-rational.h: fix this stupid bug using signed long integer to convert rational !!! * linbox/field/hom.h: add support for PID_integer homomorphism * linbox/ring/givaro-polynomial.h: fix bug * linbox/solutions/det.h: add handler for rational domain * linbox/solutions/charpoly.h: add handler for rational domain * linbox/solutions/minpoly.h: add handler for rational domain and hybrid method for blas blackbox * linbox/solutions/rank.h: add handler for rational domain * linbox/solutions/solve.h: add handler for rational domain and fix indentation * linbox/solutions/methods.h: fix indentation and add block hankel method 2005-09-01 Dan Roche * linbox/algorithms/toeplitz-det.h: Forgot to add this before. 2005-08-31 Pascal Giorgi: * linbox/algorithms/blas-domain.inl: add inverse specialization for multimod double domain * linbox/algorithms/cia.h: call domain specialized minpoly instead of calling API and make code generic according to integer ring * linbox/algorithms/lifting-container.h: support for multimod double domain * linbox/algorithms/matrix-hom.h: support for multimod double domain * linbox/algorithms/matrix-inverse.h: support for multimod double domain * linbox/algorithms/rational-solver.inl: support for multimod double domain * linbox/blackbox/apply.h: support for multimod double domain and new optimization * linbox/blackbox/blas-blackbox.h: support for multimod double domain, add construction from MatrixReader and finalize apply function * linbox/blackbox/submatrix.h: fixed indent style problem * linbox/ffpack/ffpack.h: fix memory leak problem * linbox/field/modular-double.h: add support for multimod double domain * linbox/field/ntl-ZZ.h: fix indent style problem * linbox/field/ntl-ZZ_p.h: set FieldTraits categoryTag * linbox/matrix/blas-matrix.h: add constructor from MatrixStream * linbox/matrix/dense-submatrix.h: add constructor from non const MatrixDenseBase * linbox/matrix/dense-submatrix.inl: add constructor from non const MatrixDenseBase, fix bug in ConstRawIterator operator++(int) * linbox/matrix/transpose.h: make the reference to the matrix to be non const * linbox/ring/givaro-polynomial.h: add support for PID-integer and NTL-ZZ domain * linbox/solutions/charpoly.h: throw an exception if matrix are not square * linbox/solutions/det.h: fix indentation and throw an exception if matrix are not square * linbox/solutions/minpoly.h: fix indentation, throw an exception if matrix are not square and make minpoly over the integer generic * linbox/solutions/rank.h: fix indentation * linbox/solutions/smith-form.h" fix indentation * linbox/util/debug.h: allow the PreconditionFailed to be a real LinBox exception 2005-08-19 Z. Wan * linbox/element/gmp-rational.h Fixed the error which occurs duing conversion between gmp integer and gmp rational 2005-08-18 Dan Roche * Added functionality for computing the determinant of a toeplitz matrix * Added field/ntl-ZZ_pX.h and field/ntl-lzz_pX.h, rings over the respective NTL polynomial types * Added functions pow and powin to field/ntl-ZZ_p.h and field/ntl-lzz_p.h (could be added to all fields) * Added blackbox/toeplitz.h and blackbox/toeplitz.inl, very similar to the existing Toeplitz blackbox class, but generalized to use any polynomial ring. Didn't delete the old blackbox/ntl-toeplitz.h, inl so old code doesn't break * Added tests/test-toeplitz-det.C to test all this * Modified tests/test-ntl-toeplitz.C to use the new Toeplitz class 2005-08-1 bds * numerous doc tweaks 2005-07-15 bds and zw * Now modular-balance-int.h and modular-int32.h define different classes. * Modular-int had been replaced by modular-int32. * Modular-int is now deprecated. * Added randiter/modular-balance.h 2005-07-13 bds and zw * solutions/solve.h call block-lanczos in bbsolve when cardinality small * algorithms/bbsolve.h call mg-block-lanczos * algorithms/mg-block-lanczos commentating number of trials. 2005-07-13 Bradford Hovinen * linbox/solutions/solve.h: Cast A.coldim () to double before calling log (solve): Initialize status * linbox/algorithms/rational-solver.inl: Use std::max * linbox/blackbox/apply.h: Move #include ntl-ZZ.h into #ifdef __LINBOX_HAVE_NTL * examples/solve.C: Add using namespace std 2005-07-13 bds and zw * tests/Makefile.am move test-la-block-lanczos to failing tests list * test-la-block-lanczos use case n = 10 to show problem * test-mg-block-lanczos restore maxtries to default, comment out nullspace test which has memory probs. * test-solve change default blocking factor to 16 2005-07-13 Bradford Hovinen * tests/Makefile.am (NTL_TESTS): Moved test-rational-solver, test-rational-solver-adaptive, test-smith-form-binary, test-last-invariant-factor here because they depend on NTL (GIVARO_TESTS): Moved test-ffpack, test-blas-domain, test-givaro-zpz here because they depend on Givaro * tests/Makefile.am (NTL_TESTS): Fix definition so that automake does not complain 2005-07-13 Pascal Giorgi fix and remove NTL dependencies - remove NTL dependecies: use of PID_integer * tests/test-last-invariant-factor.C * tests/test-rational-solver.C * tests/test-rational-solver-adaptive.C * tests/test-smith-form-binary.C - fix NTL dependencies: by use of __LINBOX_HAVE_NTL preprocessing * tests/test-smith-form.C * tests/test-smith-form-iliopoulos.C * tests/test-smith-form-local.C * tests/test-smith-form-adaptive.C * linbox/field/hom.h: specialization for NTL * linbox/algorithms/smith-form-adaptative.h - linbox/ring/givaro-polynomial.h: to be done by Jean-Guillaume and Clement 2005-07-12 Pascal Giorgi * linbox/matrix/factorized.inl: add support for singular system solving (inconsistent system is defined by the zero solution) fix also bug in nonsingular solving 2005-07-11 Pascal Giorgi (authorized by dictator Dumas)) * linbox/solutions/solve.h: change the interface for integer systems Make the solver interface working with Wiedemann method, Lanczos method * linbox/algorithms/solve.h: add support for Lanczos method * linbox/algorithms/bbsolve.h: fix compilation error * linbox/algorithms/wiedemann.h: fix compilation error * linbox/algorithmd/wiedemann.inl: fix compilation error * linbox/algorithms/lanczos.h: fix compilation error * linbox/algorithmd/lanczos.inl: fix compilation error 2005-07-07 Dan Roche * linbox/blackbox/sparse.h * linbox/blackbox/dense.h * linbox/matrix/sparse.h: Changed the RawIndexedIterator code so that dereferencing returns a reference to the value (same as RawIterator) * linbox/blackbox/lambda-sparse.h * tests/test-matrix-stream.C * linbox/algorithms/matrix-hom.h: Updated the code here to reflect change above 2005-07-07 Dan Roche * linbox/matrix/sparse.h: Went through and fixed more iterator problems that could be causing segfaults. 2005-07-06 bds and zw * linbox/solutions/is-positive-definite.h, is-positive-semidefinite.h, added functions isPositiveDefinite and isPositiveSemiDefinite. * linbox/tests/test-isposdef.C, test-ispossemidef.C, Makefile.am, added tests for them. * linbox/field/hom.h, linbox/algorithms/signature.h, minor tweaks. * linbox/algorithms/algorithms.doxy, docs related 2005-07-06 Dan Roche * examples/rank.C * examples/det.C: Modified these to use MatrixStream and thereby support multiple file formats. * linbox/matrix/sparse.h * linbox/matrix/sparse.inl: Fixed some problems with the iterators: seg faults were caused by poor handling of empty rows. * linbox/util/matrix-stream.inl: minor clean-ups 2005-07-4 Pascal Giorgi * linbox/blackbox/Makefile.am: add polynomial.h * linbox/blackbox/apply.h: add optimization * linbox/blackbox/blas-blackbox.h: add the use of BLAS asap * linbox/solutions/methods.h: extend dixon method * linbox/solutions/solve.h: add rational-solver and diophantine-solver support for BlasElimination method (need to fix denominator output). also add support for BlasElimination over finite field (not fully implemented) * linbox/algorithms/rational-reconstruction.h: define early termination according to threshold (0 means no early termination, x > 0 means early termination with checking each x steps) 2005-07-01 Pascal Giorgi * configure.in: add linbox/util/formats/Makefile.am support * add linbox/util/formats/Makefile.am file * linbox/util/Makefile.am: fixe comment problem 2005-07-01 Dan Roche * linbox/blackbox/dense.h * linbox/matrix/dense.inl * linbox/matrix/dense.h: Added Constructors from a matrix-stream * linbox/blackbox/sparse.h * linbox/blackbox/sparse.inl * linbox/matrix/sparse.h: Added Constructors from a matrix-stream Changed to use size_t for indexing rather than ints: * linbox/util/matrix-stream.h * linbox/util/matrix-stream.inl * linbox/util/formats/generic-dense.h * linbox/util/formats/maple-dense1.h * linbox/util/formats/maple-sparse1.h * linbox/util/formats/matrix-market.h * linbox/util/formats/sms.h * linbox/util/formats/sparse-row.h * tests/test-matrix-stream.C: Included sparse and dense blackbox matrix constructors in testing * tests/data/sms.matrix: Fixed a formatting error 2005-07-01 W. J. Turner * linbox/until/commentator.C: removed using namespace std directive 2005-06-30 Pascal Giorgi resolve symbol error in libutil.a (commentator.o needed timer.o) * linbox/util/commetator.C: include timer.C * linbox/util/Makefile.am: remove timer.c from libutil.a source (included through commentator) 2005-06-29 W. J. Turner Removed using declarations within several classes and replaced with this->... to preserve backwards compatability and allow compilation with gcc 3.4 and newer: * linbox/algorithms/blackbox-block-container.h * linbox/algorithms/blackbox-container-symmetric.h * linbox/algorithms/blackbox-container-symmetrize.h * linbox/algorithms/blackbox-container.h * linbox/algorithms/lifting-container.h * linbox/blackbox/frobenius.h * linbox/blackbox/lambda-sparse.h * linbox/blackbox/ntl-hankel.{h,inl} * linbox/blackbox/submatrix.h * linbox/field/givaro-zpz.h * linbox/matrix/blas-matrix.h * linbox/util/formats/generic-dense.h * linbox/util/formats/maple-dense1.h * linbox/util/formats/maple-sparse1.h * linbox/util/formats/matrix-market.h * linbox/util/formats/sms.h * linbox/util/formats/sparse-row.h 2005-06-27 W. J. Turner * linbox/ffpack/ffpack_charpoly_kgfast.inl: removed using namespace std directive * linbox/*/lidia-gfq.h: removed using namespace LiDIA directives * linbox/vector/sparse.h: removed using namespace LinBox directive * linbox/util/formats/*.h: removed using declarations * linbox/util/*.h: removed using declarations * linbox/util/xml/*.h: removed using declarations 2005-06-25 Bradford Hovinen * tests/test-mg-block-lanczos.C (testRandomSolve, testSampleNullspace): Use preconditioner SYMMETRIZE (main): Use more sensible defaults * examples/dot-product.C (main): Declare v1 and v2 to be of length n (fixes segfault) 2005-06-24 W. J. Turner * linbox/blackbox/*: removed using declarations and directives * linbox/field/*.h: removed using declarations and directives * linbox/field/ntl-lzz_pE.h: added explicit call to namespace in NTL::BuildIrred_zz_pX * linbox/field/ntl-GF2E.h: added explicit call to namespace in NTL::BuildSparseIrred_GF2X * linbox/randiter/*.h: removed using declarations 2005-06-17 Pascal Giorgi * /linbox/field/PID-integer.h: add sqrt function and homomorphism support * /linbox/field/hom.h: identation fixed * /example/solver/t-rdisove.C: comment givaro.h to fix compilation errors 2005-06-16 Pascal Giorgi * /linbox/blackbox/apply.h: add blas-blackbox compatibility * /linbox/blackbox/blas-blackbox.h: modify constructor and add category support * /linbox/matrix/blas-matrix.h: new creator and add category support * /linbox/matrix/matrix-category.h: move MatrixCategory from blas-matrix.h * /linbox/algorithms/blas-domain.h: fancy indentation * /linbox/algorithms/blas-domain.inl: add support for BlasBlackbox * /linbox/algorithms/matrix-hom.h: add support for BlasBlackbox * /linbox/algorithms/rational-solver.inl: use of MatrixHom and BlasBlackbox instead of MatrixMod and BlasMatrix 2005-06-15 Pascal Giorgi * /linbox/blackbox/apply.h : compatiblity with 64bits architecture 2005-06-14 Pascal Giorgi * /doc directory: modification to documentation (linbox.html become central) * macros/linbox-doc.m4: new documentation checking (use of Doxygen) * configure.in: take into consideration new doc checking 2005-06-10 bds methods.h working for det.h in good form - other solutions may be broken: Can consider det.h a good model for solutions funs now. 2005-06-07 Z. Wan * linbox/blackbox/matrix-blackbox.h, linbox/matrix/dense.h, sparse.h, added reind to DenseMatrixBase and SparseMatrixBase. 2005-05-02 Pascal Giorgi * configure.in , macros/linbox-opt.m4 : add optimization process during linbox configuration * linbox/fflas/fflas.h : allow the use of optimized Winograd threshold 2005-04-26 -bds * Name changes *ntl-zz* --> *ntl-lzz* to avoid clashes with ZZ in case insensitive situations. * Also change test*.cpp to test*.C for consistency 2005-03-32 Pascal Giorgi * linbox/fflas/fflas_fgemm.inl: fix compilation error with WinoMain function call * linbox/algorithms/Makefile.am, rational-solver.h,.inl: set default prime size to 20 bits and make number of prime to try as a user parameter in function solve * tests/Makefile.am, test-rational-solver.C : retrieve rational solver test (make commentator progress worrking) 2005-03-30 bds * removed xml read/write code in numerous places * misc small stuff (I forgot what I may have changed, to tell the truth!) 2005-03-17 PG and ZW * linbox/algorithms/cra.h, cra-det-integer.h, minpoly-integer.h, Makefile.am, added functionalities for integer cases using modular arithmetic and CRA * linbox/solutions/det.h, minpoly.h, rank.h, unified the interface, added blas elimination for det and rank 2005-03-15 bds *tests/test-rank.C linbox/solutions/rank.h methods.h Introduce rank by blas-elimination, together with check for too small prime in wiedemann rank. 2005-02-17 Zhendong Wan (wan@cis.udel.edu) *linbox/algorithms/rational-reconstruction.h, implemented the fast early termination techniques, which was described in a preprint paper submitted to ISSAC'05. 2005-02-16 Zhendong Wan (wan@cis.udel.edu) *linbox/algorithms/rational-solver.h, rational-solver.inl, rational-solver-adaptive.h, Merged rational solver using numerical methods with others 2005-02-14 Clement Pernet (Clement.Pernet@imag.fr) * Improvements to FFLAS::fgemm routine: Winograd's fast matrix multiplication is now working for any operation of the type C<-alpha.A*B + beta.C * Dynamic pealing is now generic wrt the field * The recursive block algorithm is now working over the field if the BLAS condition is not met 2005-02-07 Clement Pernet (Clement.Pernet@imag.fr) * Change the name fflapack -> ffpack * bug fixes in blackbox-block-container.h * compilation failure of test-rational-solver due to "assert" in rational-solver.h should be fixed * compilation failuer in test-matrix-stream due to 888888888888888 being to big should be fixed 2005-02-04 Zhendong Wan (wan@cis.udel.edu) *Add linbox/solutions/cra.h, minpoly-integer.h, add codes to compute the minpoly of an integer matrix. *Modify linbox/test-minpoly.C, add test for minpoly of an integer matrix. *Modify linbox/solutions/minpoly.h, it can hanle integer case. ** linbox/solutions/cra.h and linbox/algorithms/cra.h should merge in future ** minpoly-integer.h and minpoly.h should merge, and support blas in future 2005-02-03 Zhendong Wan (wan@cis.udel.edu) *linbox/field/PID-double.h, PID-integer.h, PIR-modular-int.h, PIR-modular-int32.h, PIR-ntl-ZZ_p.h, double-fmod.h, field-traits.h gf2.h, givaro-gfq.h, givaro-montg.h, givaro-rational.h, givaro-zpz.h, gmp-integers.h, gmp-rational.h, lidia-gfq.h local2_32.h, modular-balance-int.h, modular-balance-int32.h, modular-byte.h, modular-double.h, modular-int.h, modular-int32.h, modular-short.h, modular.h, ntl-GF2E.h ntl-RR.h, ntl-ZZ.h, ntl-ZZ_p.h, ntl-ZZ_pE.h, ntl-pid-zz_p.h, ntl-zz_p.h, ntl-zz_pE.h, param-fuzzy.h, unparametric.h, added information in field traits in order to classify all rings. 2005-03 Zhendong Wan (wan@cis.udel.edu) *linbox/algorithms/matrix-mod.h, change class MatrixMod to namespace, so that some special mod functions can be addaed *linbox/algorithms/rational-reconstruction.h, rational-solver.inl, fixed compiling complaints 2005-01-28 Dan Roche * examples/linbox-program.C - various fixes * field/unparametric.h - was casting to long and then to integer - fixed * field/hom.h - added mapping from UnparametricField to Modular * util/matrix-stream.h Provides a new, generic way of reading matrices in multiple formats. * util/formats New directory for matrix-stream format specifications * util/formats/matrix-stream-readers.h Place to include all the different format specification files: * util/formats/generic-dense.h * util/formats/maple-dense1.h * util/formats/maple-sparse1.h * util/formats/matrix-market.h * util/formats/matrix-stream-readers.h * util/formats/sms.h * randiter/gmp-random-prime.h Generates random numbers up to a given size * tests/test-matrix-stream.C Tests to see if matrix-stream is working * Sample matrices used by test-matrix-stream: * tests/data/generic-dense.matrix * tests/data/maple-dense1.matrix * tests/data/maple-sparse1.matrix * tests/data/matrix-market-array.matrix * tests/data/matrix-market-coordinate.matrix * tests/data/sms.matrix * tests/data/sparse-row.matrix 2005-01-07 ZW * linbox/field/gmp-integers.h, fixed init * linbox/field/modular-double.h, implemented a fast init 2004-12-03 bds * matrix/sparse.h .inl - add reading of Magma Compact form * vector/vector-domain.h .inl - can't read into const vectors, so rm 'const 2004-10-08 bds * examples/blackbox/Makefile.am smith.C - minor * field/field-traits.h givaro-gfq.h ntl-GF2E.h - put in maxmodulus * doc/Doxyfile mainpage - minor doc changes 2004-09-30 Pascal Giorgi * linbox/algorithms/lifting-container.h: take modification of MatrixApplyDomain setup function * linbox/algorithms/rational-solver.inl: use of BlasMatrix instead of BlasBlackbox * linbox/algorithms/rational-reconstruction.h: add lifting commentator progress in getRational3 function * linbox/blackbox/apply.h: redefine MatrixApplyDomain s.t. specialization for dense storage is easier * linbox/matrix/dense.inl: make reading with sparse format work and fix bug in writing over domain with non positive cardinality 2004-09-21 Pascal Giorgi * linbox/algorithms/Makefile.am: Add headers for (rationnal-solver.inl, diophantine-solver.inl, vector-fraction.h) * linbox/algorithms/blackbox-block-container-base.h: Use BlasDomain and BlasMatrix * linbox/algorithms/blackbox-block-container.h: Make BlackboxBlockContainerRecord class (handling precomputed sequence and row-colum updating) * linbox/algorithms/block-massey-domain.h: Compute generating matrix polynomial using Sigma Basis through algorithm of GJV-ISSAC'03 * linbox/algorithms/block-wiedemann.h: Add block Wiedemann solver * linbox/algorithms/lifting-container.h: Add specialisation for Block Wiedemann method and clean optimizations * linbox/algorithms/rational-solver.h: Add specialisation for Block Wiedemann method * linbox/algorithms/rational-solver.inl: Add specialisation for Block Wiedemann method * linbox/blackbox/Makefile.am: Add headers for lambda-sparse.h and blas-blackbox.h * linbox/blackbox/apply.h: Put optimizations on matrix-vector product - moved from lifting-container * linbox/fflas/fflas_fgemm.inl: Fix bug on Winomain function * linbox/fflas/fflas_ftrsm.inl: Fix bug on normalisation before BLAS call * linbox/field/Makefile.am: Add ntl-GF2E.h header * linbox/field/ntl-GF2E.h: Add wrapper for GF(2^n) of NTL library * linbox/field/modular-double.h: Improve DotProductDomain specialization * linbox/field/ntl.h: Add ntl-GF2E.h header * linbox/matrix/blas-matrix.h: Take into account modifications of dense-submatrix * linbox/matrix/dense-submatrix.h: Use pointer instead of reference * linbox/matrix/dense-submatrix.inl: Use pointer instead of reference * linbox/matrix/factorized-matrix.inl: Fix the extractions of L, U and S * linbox/solutions/methods.h: Add BlockWiedemann method * linbox/util/gmp++/Makefile.am: Remove gmp++_int.c ( redudant for compilation) 2004-09-02 Bradford Hovinen * linbox/algorithms/la-block-lanczos.h (class LABlockLanczosSolver): Add _iter, _total_dim, _rank * linbox/algorithms/la-block-lanczos.inl (cleanup): Update _rank (rank): Implement * linbox/blackbox/diagonal.h (class Diagonal): Compilation fix * linbox/blackbox/dense.h (class DenseMatrix): Make _AT use DenseMatrix, not DenseMatrixBase * tests/test-la-block-lanczos.C (main): * tests/test-mg-block-lanczos.C (main): Use better defaults * linbox/algorithms/la-block-lanczos.inl (solve, sampleNullspace): Clear history when done * tests/Makefile.am (BASIC_TESTS): Add test-mg-block-lanczos * linbox/algorithms/la-block-lanczos.h (class LABlockLanczosSolver::InnerProductArray): Add reset * linbox/algorithms/la-block-lanczos.inl (iterate): Reset uAv * linbox/algorithms/Makefile.am (pkgincludesub_HEADERS): Add eliminator.{h|inl} * tests/Makefile.am (BASIC_TESTS): Add test-la-block-lanczos * linbox/algorithms/Makefile.am (pkgincludesub_HEADERS): Add la-block-lanczos.{h|inl}, mg-block-lanczos.{h|inl}; remove block-lanczos.{h|inl} 2004-09-01 bds * solutions/minpoly.h tests/test-minpoly.C: add minpolySymmetrize 2004-09-01 bds wan zw * linbox/algorithms/rational-solver-adaptive.h, adaptive solve 2004-08-30 bds and zw * linbox/algorithms/one-invariant-factor.h, smith-form-adaptive.inl, make bonus works 2004-08-30 bds and zw * linbox/algorithms/smith-form-adaptive.h, inl. Implementation of an adaptive algorithm for Smith form 2004-08-30 bds * linbox/randiter/mersenne-twister.h linbox/util/commentator.h linbox/util/gmp++/gmp++_int_misc.C tests/Makefile.am tests/test-common.C: LinBoxSrcOnly flag also used in tests/ now (to avoid incompatibility with use in examples/) 2004-08-30 bds * examples/ex-integers.C examples/Makefile.am linbox/util/gmp++/Makefile.am: Turn on LinBoxSrcOnly flag for examples compilations so that user does not confront load-library problems. * doc/Makefile.am examples/Matio.h linbox/integer.h linbox/blackbox/*.h etc.: switch documentation system to doxygen. (it still needs plenty of work) * add .doxy files (replacing .dxx files) to doc system * examples/blackbox/smith.C and smithbig.C: smith form examples. 2004-08-28 Pascal Giorgi * examples/solver/t-rdisolve.C: add sparse matrix format for file and make seed to work * linbox/algorithms/diophantine-solver{.h,.inl}: adding parameters information of solving * linbox/algorithms/rational-reconstruction.h: clear bugs in timings 2004-08-26 Z. Wan * linbox/algoriths/last-invariant-factor.h, implement the bonus idea \ref{....} 2004-08-26 Pascal Giorgi * examples/fields/ex-fields-archetype.C : put std namespace * examples/run/run.C : put std namespace * examples/solver/Makefile.am : change order of libs for compilation * examples/solver/t-rdisolve.C : change to use the new design of rational solver * gmp++/gmp++_int.h : Added new function to get the size of integer in base B and base 2 * gmp++/gmp++_int.inl : Added implementation of bitsize() and size_in_base( int base) functions * linbox/algorithms * diophantine-solver.h : use new design of rationnal solver * diophantine-solver.inl : use new design of rationnal solver ( disabling conversion for VectorFraction) * lifting-container.h : Added fast apply over ring when entries of the matrix are small enough ( say less than 2^16) * rational-reconstruction.h : Added direct method for reconstruction, added switch between early termination and direct method * rational-solver.inl : Added blas optimization for preconditionning matrices in random solution solver * linbox/fflapack/fflapack.h : Maked triangular inverse available * linbox/field/PID-double.h : Added abs and compare functions, + indentation * linbox/field/PID-integer.h : Added abs and compare functions, + indentation * linbox/matrix/dense.inl : problem with resizing in read function, leave code as it was but add the older version as comment 2004-08-24 Z. Wan (wan@cis.udel.edu) * change ith-invariant-factor.h to one-invariant-factor.h * Change the implementation of the alogrithm for oneinvariantfactor, use the enhanced algorithm in ISSSAC'04 papre by bds and ZW 2004-08-24 Z. Wan (wan@cis.udel.edu) *linbox/algorithms/rational-solver.h, inl, rational-reconstruction.h, linbox/tests/test-rational-solver.C, change the format of the rational solution a vector of rationals ====> (a vector of the numerator, the common denominator). 2004-08-19 Z. Wan (wan@cis.udel.edu) * linbox/algorithms/rational-reconstruction.h, implement the V. Pan's idea for final reconstruction step. * linbox/field/ntl-ZZ.h, add abs and compare member function. 2004-08-19 David Pritchard (dpritcha@ens-lyon.fr, daveagp@mit.edu) * gmp++/gmp++_int.inl - Added wrapper for mpz_import (convert word array to LinBox::Integer) * linbox/algorithms - Added timing to rational solving routines (#define RSTIMING in rational-solver.h) * diophantine-solver.h - made QSolver field into a reference type * diophantine-solver.inl - changed comments * lifting-container.inl - Added blas optimization for muliplication of large integer matrices in Dixon * rational-reconstruction.h - Changed getRational2 again so that early termination num/denbounds work * rational-solver.h - Added timing, reportTimes() * rational-solver.inl - Added timing * vector-fraction.h - Added comment, about how RandIter may have unrandom low-order bits * linbox/blackbox/apply.h - Removed bad overload of applyV * linbox/fflapack/fflapack.h - changed name of function to LQUPtoInverseOfFullRankMinor * linbox/field/modular-double.h - added constr. from long int, to avoid ambiguity warning when making t-rdisolve * linbox/matrix/dense.inl - attempted to fix problems with Const{Row/Col}Iterator operator++ (int) * linbox/matrix/factorized-matrix.h - added comment about how GetQ returns Qt * linbox/util/timer.C - added a count field to the timer (how many intervals does this timer measure) * linbox/util/timer.h - added a count, stopped small negative rounding errors from printing * gmp++/gmp++_int_cstor.C - added mpz_import function wrapper * tests/test-common.C - fixed reading of large integers * examples/solver/t-rdisolve.C - added flag to make some columns zero, made better random entries 2004-08-11 bds * examples/blackbox/smith.C illustrates iliopolous' and local methods * matrix/dense.inl read() now adjusts to new input size rather than complaining. Also read() accepts sparse file format. 2004-08-11 David Pritchard (dpritcha@ens-lyon.fr, daveagp@mit.edu) * gmp++/gmp++_int.inl - Added nth root function declaration * linbox/algorithms * diophantine-solver.inl - minor changes * lifting-container.h - fixed reconstruction lifting bound * rational-reconstruction.h - added getRational2; will eventually be las-vegas style reconstructor - changed early termination so that 2*numbound*denbound is always less than modulus * rational-solver.inl - more updates, fixes. now only one LQUP is used to check consistency - added optimization wherein LQUP is used to compute a modular inverse more quickly * linbox/fflapack/fflapack.h - added InverseFromLQUP function; fixed invL bug * linbox/matrix/blas-matrix.h - moved indexDomain here (allows application of BlasPermutation to indices, using BlasMatrixDomain) * linbox/matrix/dense-submatrix.inl - minor fix * linbox/util/gmp++/gmp++_int_misc.C - added nth root function 2004-08-09 Dan Roche * gmp++/gmp++_int.inl: Add arithmetic function support for long long and unsigned long long * linbox/blackbox/dense.h,inl: Add hadamardBound method to DenseMatrixFactory * linbox/blackbox/sparse.h: Make hadamardBound return a reference to res, and avoid overflow in computing hadamardBound * linbox/solutions/det.h: little fixes 2004-08-09 Pascal Giorgi * /linbox/blackbox/sparse.h : Fix bugs in SparseMatrixFactory. it compiles right now * /linbox/util/gmp++/gmp++_int_io.C : avoid memory leaks in Integer2string function * /linbox/field/ntl-zz_pE.h : adding new wrapper for NTL algebraic extension of single precision prime field * /linbox/field/ntl-ZZ_pE.h : write a class to handle parametric field * /linbox/field/ntl.h, Makefile.am : adding new field ntl-zz_pE.h 2004-08-08 Dan Roche (roche@cis.udel.edu) * examples/linbox-program.C - now works for determinant also - except that someone recently broke solutions/det.h and blackbox/sparse.h * gmp++/gmp++_int.h, linbox/util/gmp++/gmp++_int_misc.C - added prevprime so that prime-stream.h works * linbox/integer.h - added an abs function here so it works for all types from int8 up to integer. * linbox/algorithms/cra.h - changed invmod to inv so that this compiles * linbox/blackbox/dense.h,.inl - added DenseBlackboxFactory class so I can use det.h to find determinant of a dense matrix over the integers. * linbox/solutions/det.h - NUM_BITS is determined from FieldTraits (linbox/field/field-traits.h) 2004-08-06 David Pritchard (dpritcha@ens-lyon.fr, daveagp@mit.edu) * examples/solver/t-rdisolve.C - added use of 3 'solver levels' and check of certificate of inconsistency * linbox/algorithms * diophantine-solver.h - added use of 3 'solver levels', improved documentation * diophantine-solver.inl - added use of 3 solver levels * lifting-container.h - changed normblackbox to properly compute "norm" of composed boxes * rational-reconstruction.h - added getRational2 for solver use, hopefully will be las-vegas * rational-solver.h - added use of 3 solver levels, certifying of inconsistency, documentation * rational-solver.inl - added use of 3 solver levels, certifying inconsistency - combined 'solve' and 'getRandomSolution' to be both variants of 'solveMonolithic' * vector-fraction.h - simplified constructor * linbox/fflapack/fflapack_ludivine.inl - bugfix for LQUP of rectangular matrices (specifically M x 1 case) * linbox/field/unparametric.h - removed dumb comment * linbox/matrix/blas-matrix.h - added method extendTrivially to embed permutation in larger row/column size * linbox/tests/test-common.C - bugfix 2004-07-30 David Pritchard (dpritcha@ens-lyon.fr, daveagp@mit.edu) * examples/solver/t-rdisolve.C - added diophantine checking+certification, more options - moved VectorFraction class to own file in algorithms - moved new command-line stuff into test-common.C (should be backwards-compatible) * linbox/algorithms * vector-fraction.h - added new file. for storing fractions like [n1 n2 n3 n4 ... ]/d - has various combination functions used by diophantine-solver * blas-domain.inl - fixed a broken linbox_check for vector-matrix product * diophantine-solver.h - diophantine checking, min-denom certification works now * diophantine-solver.inl - diophantine checking, min-denom certification works now * rational-solver.h - made SolverReturnStatus a global enum, preceded by SS_ * rational-solver.inl - added generation of a partial certificate to randomSolve - solveDeterministic is now fully Las Vegas * apply.h - added applyVTrans(vector, const matrix, vector) * linbox/fflas/fflas_fgemv.inl - fixed errors in transpose matrix product * linbox/matrix * blas-matrix.h - fixed flipped row/coldim in constructor * dense-submatrix.h - fixed typo, removed unimplemented operator[] * dense.h - removed debug output * transpose.h - replaced Column with Col * tests/test-common.h - example string can now be passed as null and intelligently generated by default * tests/test-common.C - boolean options can now be turned off like "-b false", "-b -", "-b N" - added a string to write all current switch options to an ostream * tests/test-rational-solver.C - updated to reflect new return type of rational solver 2004-07-26 David Pritchard (dpritcha@ens-lyon.fr, daveagp@mit.edu) * linbox/algorithms * added diophantine-solver.{h,inl} (no diophantine functionality yet) * Makefile.am - added diophantine-solver.h * blas-domain.h - added forms of inv and invin that return the nullity of the matrix * blas-domain.inl - added forms of inv and invin that return the nullity of the matrix, fixed typo * last-invariant-factor.h - changed type of b vector from int to Integer * lifting-container.h - changed blackbox norm to square of 'induced norm', fixed lifting length calculation - added graceful failure to digit (eg if Ring is used improperly) * rational-reconstruction.h - added debug switch DEBUG_RR, graceful failure * matrix-rank.h - changed tabbing * rational-solver.h - many changes to Dixon; Wiedemann may not work - added DEFAULT_PRIMESIZE = 14 (since 30 bit default size would screw up some fields) - added maxPrimes argument to solving routines, will retry that many primes - added const modifier to solving routines, made _prime mutable * rational-solver.inl - many changes to Dixon; Wiedemann may not work - added debug switches, graceful failure for solving routines - changed BlasMatrixDomain routines to BlasApplyDomain to avoid erroneous calculations - in singular/random solve, check solution before returning, and multiply by conditioner P correctly - added consistency check to random solver * linbox/blackbox/blas-blackbox - added to CVS * linbox/blackbox/dense.h - matrix reading bugfix * linbox/fflapack/fflapack.h - pass nullity back in Invert2, and return NULL when matrix is singular * linbox/fflas/fflas_fgemv.inl - remove assumption that alpha=-1, beta=1 * linbox/fflas/fflas_ftrmm.inl - fixed computation of matrix size bound for embedding into FFLAS * linbox/field * PID-double.h - changed 'c=abs(c)' to 'if (c<0) c = -c', no abs found for double * PID-integer.h - changed documentation of isDivisor(a, b) (returns yes if b|a) * givaro-montg.h - fixed init from integer * givaro-zpz.h - fixed init from integer, double and Log16 specializations * givaro-gfq.h - fixed init from integer * modular.h - added init from double - added several specializations of Modular * modular-double.h - fixed operator<< * modular-int.h - fixed init/convert with double * modular-int32.h - fixed init/convert with double * ntl-ZZ.h - changed const to static for convert method - changed documentation of isDivisor(a, b) (returns yes if b|a) * ntl-ZZ_p.h - added init/convert from/to integer, double - put NTL_ZZ_p at top and specialization at bottom for compiler - changed random generator to give fuller range * ntl-zz_p.h - added init from double, integer * unparametric.h - added convert to double * linbox/matrix/dense-submatrix.h - added mapleFormat option to DenseSubmatrix writing * linbox/matrix/dense-submatrix.inl - added mapleFormat option to DenseSubmatrix writing * linbox/randiter/random-prime.h - the class now takes a 'bits' argument on construction and makes primes of that size * linbox/vector/vector-domain.inl - fixed reading bug * tests/Matio.h - added mapleFormat option to write_field * tests/test-fflapack.C - matched Invert2 to new 'nullity' argument format * tests/test-iliopoulos-elimination.C - #define int32 LinBox::int32 to avoid ambiguity with Givaro * tests/test-last-invariant-factor.C - int32 -> LinBox::int32 to avoid ambiguity with Givaro * tests/test-last-rational-solver.C - int32 -> LinBox::int32 to avoid ambiguity with Givaro - now handles solver failures without crashing - added check to ensure that system is solvable (ie no zero elements on diagonal) * tests/test-smith-form.C - int32 -> LinBox::int32 to avoid ambiguity with Givaro * examples/solver/t-rdisolve.C - test driver for rational solver, compile and run t-rdisolve -? * examples/solver/Makefile.am - make file 2004-07-16 Pascal Giorgi * linbox/field/lidia-gfq.h : fixing bug and improvement * tests/Makefile.am : retrieving test-lidia-gfq, fixing modular and gssv redundancy * tests/test-modular.C : using namespace std 2004-07-16 Pascal Giorgi * linbox-config.in : switching order of LiDIA in libs * linbox/randiter/envelope.h : modify random function ( assignement is not needed) * linbox/matrix/dense-submatrix.h : setting input and output functions public * linbox/field/givaro-zpz.h : adding linbox/utils/debug.h header * linbox/field/lidia-gfq.h : setting default degree extension to 1 * linbox/field/ntl-ZZ_p.h : overloading the constructor of UnparamField 2004-07-08 Dan Roche * Adding examples/linbox-program.C which will eventually do a wide variety of operations on integer matrices * gmp++/gmp++_int.h,inl : Little fixes * linbox/algorithms/wiedemann.inl : Little fixes * linbox/matrix/blas-matrix.h : Little fixes * linbox/util/gmp++/gmp++_int_compare.C, gmp++_int_mod.C : Little fixes * linbox/vector/sparse.h : Little fixes * tests/test-fields.C : Little fixes * tests/Makefile.am : Moved everything that uses rational-solver to ATLAS_TESTS rational-solver won't work without BLAS. * fields/field-traits.h : Took implementation out of this file and put it in each field header file. * fields/givaro-gfq.h : Added init and convert from/to a padic number * fields/modular.inl : Fixed some problems with MVProductDomain functions over unsigned types 2004-07-06 Bradford Hovinen * linbox/blackbox/dense.h (class DenseMatrix): Add _AT, a TransposeMatrix of this * linbox/blackbox/dense.inl (DenseMatrix::applyTranspose): Use _AT * linbox/matrix/matrix-domain.h (class MatrixDomain): Get rid of template argument MatrixTrait on specialized permute * linbox/vector/vector-domain.h (class VectorDomain): Get rid of template argument VectorTrait on specialized permute, swap * linbox/matrix/sparse.h (struct MatrixTraits): * linbox/vector/vector-domain.inl (class VectorDomain): * linbox/vector/vector-domain.h (class VectorDomain): * linbox/matrix/matrix-domain.h (class MatrixDomain): * linbox/matrix/transpose.h (struct MatrixTraits): * linbox/matrix/dense.h (struct MatrixTraits): Remove templates from matrix tags 2004-07-02 pascal giorgi * blackbox/apply.h : adding BlasApply domain * blackbox/compose.h : adding accessor to left an right blackbox * blackbox/sparse.h : make write function const * field/ all givaro file : fixe bugs * field/lidia-gfq.h : make it works * field/modular-double.h : add reset function in axpy domain * field/field-traits.h : add specialization for some fields * field/double-fmod.h : include * field/ntl-ZZ.h : remove all static and replace by const function * field/PID-double field/PID-integer.h : adding 2 new PID * matrix/dense.h.inl matrix/sparse.h.inl : make interators work * randiter/ntl-ZZ.h randiter/lidia-gfq.h : fix bugs and make clearer * solutions/method.h : add new traits for rational solvers * algorithms/ * blackbox-container-base.h : adding new constructor allowing size of sequence as parameter * blackbox-container.h : adding new constructor allowing size of sequence as parameter * lifting-containe.h : make a new interface for lifting (give specialization for Wiedemann and Dixon methods) * matrix-inverse.h : put Field as template and require a field as parameter (not restrictive to blackboxes) * matrix-mod.h : giving a specializatino * rational-reconstruction.h : make it clear with lifting interface * rational-solver.h : make a new interface for rational solver * rational-solver.inl : give specialization for Wiedemann and Dixon methods 2004-06-21 bds * removed NAGSparse blackbox which has been replaced by Triplesbb. Mods to linbox/util/xml/reader-blackbox-factory.h tests/Makefile.am Removed Files: blackbox/nag-sparse.h tests/test-nag-sparse.C 2004-06-16 Zhendong Wan * linbox/solutions/lu.h, tests/test-lu.C, fix the block lu and make test work. 2004-06-10 Dan Roche * Added linbox/field/modular-balance-int32.h to use int32 type * Added more fields to tests/test-fields.C * Added more fields and functionality to linbox/field/field-traits.h * Changed most fields so that every field constructor takes two arguments, a modulus and an exponent. Default values are put in so everything should still work the same. 2004-06-10 bds * New version 0.1.4 * final doc mods before release 0.1.4 2004-06-09 bds * Little tweaks. 2004-06-08 Dan Roche * Updated Modular to use the int32 type in integer.h * Added linbox/field/modular-int32.h * Added linbox/field/PIR-modular-int32.h * Updated tests/test-modular-int.h * Updated tests/test-iliopoulos-elimination.C * Updated tests/test-last-invariant-factor.C * Updated tests/test-rational-solver.C * Updated tests/test-smith-form.C * Updated tests/test-fields.C to use types from integer.h and to determine number of iterations based on machine speed. Also uses goodModulus method from FieldTraits struct. * Added linbox/field/field-traits.h, containing struct FieldTraits which can do other things but for now just provides information about valid moduli for a given field. 2004-06-08 bds * assorted documentation mods. * introduced BlackboxInterface, similar to FieldInterface, an empty base class solely for the purpose of organizing the heirarchy in the documentation. 2004-06-07 bds * assorted documentation mods. 2004-06-05 bds and Zhendong Wan * linbox/field/double-fmod.h is now redundant * linbox/field/modular-double.h uses the fmod approach * tests/test-generic.h now has a basic concept check for randiter and a chi-sq randomiterator check that doesn't fail on reasonably uniform random iterators over int elements. * tests/test-double-fmod.C and tests/test-modular-double.C now work. 2004-06-04 Dan Roche * Added tests/test-double-fmod.C Added tests/test-fields.C which benchmarks ops for fields Added tests/test-modular-double.C Added linbox/randiter/generic.h which is a generic random iterator used in double-fmod Added linbox/field/double-fmod.h which is like modular-double, but uses the fmod command from math.h 2004-06-04 bds * comments in rational.h suggesting that it is nowhere used. Shall we delete? 2004-04-20 Zhendong Wan * Add linbox/blackbox/blackbox_parallel.h, blackbox_thread.h, subrowmatrix.h, parallel blackbox apply and applyTranspose by using posix threads. * Modify linbox/blackbox/sparse.h, dense.h, dense.inl, linbox/vector/subvector.h, add parallel apply and applyTranspose for SparseMatrix and DenseMatrix. 2004-03-25 bds * documentation mods 2004-03-17 bds * gmp++/gmp++_int.h linbox/util/gmp++/gmp++_int.C, gmp++_int_add.C, gmp++_int_compare.C, gmp++_int_cstor.C, gmp++_int_div.C, gmp++_int_gcd.C, gmp++_int_io.C, gmp++_int_misc.C, gmp++_int_mod.C, gmp++_int_mul.C, gmp++_int_pow.C, gmp++_int_sub.C, tests/test-common.h: mods to make flag -DLinBoxSrcOnly work. 2004-03-04 Zhendong Wan * linbox/blackbox/sparse.h, set default Row to be SparseMap, which is more efficient to call setEntry, refEntry member function. * tests/test-minpoly.h, make it works with change in sparse.h. 2004-03-04 Zhendong Wan * linbox/blackbox/diagonal.h linbox/blackbox/hilbert.h, linbox/blackbox/scalar-matrix.h linbox/blackbox/submatrix.h, linbox/field/PIR-modular-int.h linbox/field/PIR-ntl-ZZ_p.h, linbox/field/modular-byte.h linbox/field/modular-int.h, linbox/field/modular-short.h linbox/field/modular.h, linbox/field/modular.inl linbox/matrix/matrix-domain.h, linbox/matrix/matrix-domain.inl linbox/matrix/sparse.h, linbox/matrix/sparse.inl linbox/vector/stream.h, linbox/vector/vector-domain.h linbox/vector/vector-domain.inl, linbox/vector/vector-traits.h tests/test-common.h, make these Tag classes non-template, since they are only used to distinguish vector types and for this purpose, ordinary classes suffice. 2004-03-04 Zhendong Wan * linbox/blackbox/dense.h linbox/blackbox/sparse.h, linbox/matrix/archetype.h linbox/matrix/dense-submatrix.h, linbox/matrix/dense.h linbox/matrix/matrix-domain.h, linbox/matrix/sparse.h linbox/matrix/transpose.h, tests/test-matrix-domain.C, make struct RowMatrixTag, struct ColMatrixTag, struct RowColMatrixTag non-template classes, since they are only used to distinguish the matrix types and in this case, non-template classes suffice and codes become simpler. 2004-03-02 Zhendong Wan * remove linbox/vector/const-iterator-type.h, since in new gcc, std::vector::iteretor is not same type as Element*, it doesnot work anymore. * modify linbox/vector/subvector.h, add one template parameter const_iterator. * linbox/blackbox/dense.h, dense.inl, use MatrixDomain to conform SparseMatrix implementation. 2004-03-02 Zhendong Wan * linbox/blackbox/sparse.h, remove field VectorDomain _VD, since it is not used in any member function. 2004-02-07 Zhendong Wan * linbox/algorithms/rational-reconstruction.h, speed it up bu only reconstructing the rationals at every threshold position. 2004-02-06 bds * linbox/gen_superlu/gssv_rank.h linbox/gen_superlu/trsv.h tests/Makefile.am tests/test-gssv_rank.C tests/data/gssv_rank_data: fix gssv_rank test (works except for A'+A case). 2004-02-04 Zhendong Wan * Add linbox/field/PIR-modular-int.h, which is an extension of Modular with PIR functions. 2004-02-03 Zhendong Wan * Modify linbox/field/PIR-ntl-ZZ_p.h, add MVProductDomain, DotProductDomain for PIR_ntl_ZZ_p 2004-01-28 Zhendong Wan * Modify linbox/algorithms/iliopoulos-elimination.h, making it work in a PIR suggest by bds. * Modify linbox/tests/test-iliopoulos-elimination.C, making it work upon change of iliopoulos-elimination * Add linbox/field/PIR-ntl-ZZ_p.h, adpating ntl-ZZ_p, and adding PIR interface (gcd, xgcd, dxgcd). 2004-01-27 Zhendong Wan * Modify linbox/algorithms/bitonic-sort.h, minor name change * Add linbox/tests/test-bitonic.C, test for bitonic-sort 2004-01-27 BDS * Modify linbox.dxx doc/.cvsignore doc/doc.dxx, min doc change 2004-01-27 BDS *add linbox/field/ntl-pid-zz_p.h, linbox/field/local2_32.h, linbox/algroithms/local-smith.h, code for local smith form computation. *add linbox/tests/test-local-smith.C, modify linbox/tests/Makefile.am, add test for local smith algorithm 2004-01-26 Zhendong Wan * add linbox/field/ntl-ZZ.h, linbox/randiter/ntl-ZZ.h, adapter NTL::ZZ to linbox. * add linbox/algorithms/lifting-container.h, linbox/algorithms/rational-reconstruction.h, linbox/algorithms/rational-solver.h, solve the linear systems over the rationals by lifting. * add linbox/algorithms/bitonic-sort.h, implement bitonic-sort, a sort network sequential implemenation. * add linbox/algorithms/iliopoulos-elimination.h, implement the Iliopoulos algorithm for Smith form. * add linbox/blackbox/apply.h, linbox/blackbox/scompose.h, linbox/blackbox/compose-traits.h, linbox/blackbox/random-matrix-traits.h, linbox/blackbox/random-matrix.h, linbox/blackbox/submatrix-traits.h, linbox/algorithms/ith-invariant-factor.h, linbox/algorithms/last-invariant-factor.h, linbox/algorithms/matrix-inverse.h, linbox/algorithms/matrix-mod.h, linbox/algorithms/smith-form.h, implement EGV/EGV+/EGV++ algorithm for Smith Form computation. * add linbox/tests/test-last-invariant-factor.C, linbox/tests/test-smith-form.C, linbox/tests/test-iliopoulos-elimination.C, add test for smith form computation and iliopoulos elimination. 2004-01-26 Zhendong Wan * linbox/blackbox/submatrix.h, add specialization for submatrix of denese matrices. * linbox/matrix/dense-submatrix.h, linbox/matrix/dense-submatrix.inl, fixed output / input 2004-1-15 bds * field/archetype.h field/field-interface.h: doc tweaks * matrix/dense-submatrix.h matrix/dense-submatrix.inl: fixed write trouble. * vector/subvector.h: fixed swap 2004-01-07 Pascal Giorgi Fix some printing messages in : * macro/atlas-check.m4 * macro/expat-check.m4 * macro/givaro-check.m4 * macro/lidia-check.m4 * macro/ntl-check.m4 * macro/saclib-check.m4 2003-12-29 Bradford Hovinen * linbox/matrix/transpose.h (class TransposeMatrix): Remove const requirement on input matrix; add in regular iterators * tests/test-matrix-domain.C (transpose): Remove const (testInvMulOver, testInvMulUnder, testInvLeftMulinOver) (testInvRightMulinOver): Remove const from parameter M 2003-12-28 Bradford Hovinen * linbox/vector/vector-domain.h (class VectorDomain): Add permute, swap functions * linbox/vector/vector-domain.inl (swapSpecialized, permuteSpecialized): Implement * linbox/matrix/matrix-domain.inl (permuteRowsByRow) (permuteRowsByCol, permuteColsByRow, permuteColsByCol): Implement * linbox/matrix/matrix-domain.h (class MatrixDomain): Add row/column permutation functions 2003-12-19 bds * tests/Makefile.am: just clean up some comments 2003-12-19 Pascal Giorgi * added files : linbox/gen_superlu/Makefile.am: missing file macros/config-header.m4: create linbox-config.h from config.h by prefixing all variable by __LINBOX_ macros/linbox-misc.m4: allow --with-all and --with-default options Modify Makefile such they use pkg variable * gmp++/Makefile.am * interfaces/Makefile.am * interfaces/maple/Makefile.am * linbox/Makefile.am * linbox/algorithms/Makefile.am * linbox/blackbox/Makefile.am * linbox/element/Makefile.am * linbox/fflapack/Makefile.am * linbox/fflas/Makefile.am * linbox/field/Makefile.am * linbox/iterators/Makefile.am * linbox/matrix/Makefile.am * linbox/randiter/Makefile.am * linbox/solutions/Makefile.am * linbox/switch/Makefile.am * linbox/util/Makefile.am * linbox/util/xml/Makefile.am * linbox/vector/Makefile.am Modify all macro such that they use --with-package terminology + some new features * macros/Makefile.am * macros/atlas-check.m4 * macros/expat-check.m4 * macros/givaro-check.m4 * macros/gmp-check.m4 * macros/lidia-check.m4 * macros/maple-check.m4 * macros/ntl-check.m4 * macros/saclib-check.m4 modify sources and headers files such that the use the new terminology variable from linbox-config.h * linbox/blackbox/archetype.h * linbox/blackbox/compose.h * linbox/blackbox/dense.h * linbox/blackbox/diagonal.h * linbox/blackbox/nag-sparse.h * linbox/blackbox/ntl-toeplitz.h * linbox/blackbox/ntl-toeplitz.inl * linbox/blackbox/permutation.h * linbox/blackbox/scalar-matrix.h * linbox/blackbox/sparse.h * linbox/blackbox/triplesbb.h * linbox/blackbox/zero-one.h * linbox/blackbox/zero-one.inl * linbox/fflas/fflas.h * linbox/fflas/fflas_fgemm.inl * linbox/field/abstract.h * linbox/field/archetype.h * linbox/field/envelope.h * linbox/field/gf2.h * linbox/field/givaro-gfq.h * linbox/field/givaro-zpz.h * linbox/field/gmp-rational.h * linbox/field/lidia-gfq.h * linbox/field/modular.h * linbox/field/ntl-RR.h * linbox/field/ntl-ZZ_p.h * linbox/field/ntl-ZZ_pE.h * linbox/field/unparametric.h * linbox/matrix/dense.h * linbox/matrix/dense.inl * linbox/matrix/sparse.h * linbox/matrix/sparse.inl * linbox/randiter/gf2.h * linbox/randiter/gmp-rational.h * linbox/randiter/lidia-gfq.h * linbox/randiter/modular.h * linbox/randiter/nonzero.h * linbox/randiter/unparametric.h * linbox/util/xml/field-reader-analyzer.h * linbox/util/xml/reader-blackbox-factory.h * configure.in: Modification for new features * tests/Makefile.am: disable some tests and put tests in right place according to their dependencies * tests/test-lsp.C: changing the verification of result to be faster * Hacking: Adding new way of installation * maple stuff installation have been improved 2003-12-15 Saunders/Wan/Lobo * lbmaple.C: getField -> field, template for triplebb. 2003-11-18 Saunders/Wan * merge newBB branch into main branch (note: there is an indented section of branch changelog notes down below.) 2003-10-21 Pascal Giorgi Modify few Makefile.am in order to synchronise make dist and make check * linbox/algorithm/Makefile.am adding lsp.h * linbox/field/Makefile.am add modular-balance-int.h hom.h image-field.h * linbox/blackbox/Makefile.am add missing files * tests/Makefile.am fixe some bugs. move test-gssv.C to EXTRA PROGRAM 2003-10-08 wan@udel.edu * linbox/matrix/dense.inl, remove the width in write member function, since it causes problem for some ring and it is not necessary, for example, linbox integer doesnot have fixed length 2003-09-29 wan@udel.edu * linbox/util/field-zxpy.h, linbox/vector/vector-domain.h,.inl, linbox/field/givaro-zpz.h,modular-balance-int.h,modular-byte.h,modular-int.h,modular-short.h,modular.h,unparametric.h, add a new member reset to FieldAXPY, set initial accumulator's value to zero, thus we can put an instantiation of FieldAXPY into field of VectorDomain, instead of temporily instantiating FieldAXPY whenever we need it. 2003-09-27 wan@udel.edu * linbox/field/ntl* linbox/randiter/mersenne-twister.* linbox/randiter/unparametric.h, make them work with the new random memebr function. 2003-09-27 wan@udel.edu * linbox/blackbox/dense.h, change the parameter RandIter &iter --> const RandIter &iter in its constructor. 2003-09-27 wan@udel.edu * linbox/randiter/*.h, make each random member function to be a const member function in each random class, since the member will not change the instantiation of the random class at all, just generate a random element. * linbox/matrix/dense.inl, make RowIterator and ColIterator support operator --() and operator-- (int). 2003-09-26 wan@udel.edu * linbox/matrix/dense.h, fit to g++3 change, add std to endl. 2003-08-15 saunders@udel.edu * sundry minor doc++ tweaks. 2003-08-14 saunders@udel.edu * sundry doc++ comments in doc/ examples/ and tests/ * added files (in newbB branch) linbox.dxx doc/fix-index examples/ex-integers.C examples/examples.dxx examples/blackbox/blackbox.dxx examples/fields/fields.dxx tests/tests.dxx * linbox/blackbox/sparse.h added default sizes * removed FROZEN, it's contents added to CHANGED-INTERFACES 2003-08-13 saunders@udel.edu * test-generic.h blackbox tests simplified, testBB() added * ntl-zz_p.h field fixed * tests/test-ntl-toeplitz/hankel to newBB. begin newBB branch notes 2003-11-05 Pascal Giorgi * add file /linbox/field/modular-double.h * /linbox/field/modular.h include modular-double.h 2003-10-23 wan@udel.edu * linbox/blackbox/dense.h, in the operator= , I forced the assignment for field _F. 2003-10-22 wan@udel.edu * tests/Makefile.am, comment test-lsp, since g++ complains its syntax error. * linbox/blackbox/compose.h, correct a few typos. 2003-10-22 wan@udel.edu * linbox/field/modular-byte.h, minor change for write member function, output the modulus as a int instead of a char. 2003-10-22 wan@udel.edu * linbox/blackbox/compose.h, add specialization for Compose 2003-10-08 wan@udel.edu * linbox/matrix/dense.inl, remove the width in write member function, since it causes problem for some ring and it is not necessary, for example, linbox integer doesnot have fixed length 2003-09-29 wan@udel.edu * linbox/util/field-zxpy.h, linbox/vector/vector-domain.h,.inl, linbox/field/givaro-zpz.h,modular-balance-int.h,modular-byte.h,modular-int.h,modular-short.h,modular.h,unparametric.h, add a new member reset to FieldAXPY, set initial accumulator's value to zero, thus we can put an instantiation of FieldAXPY into field of VectorDomain, instead of temporily instantiating FieldAXPY whenever we need it. 2003-09-27 wan@udel.edu * linbox/field/ntl* linbox/randiter/mersenne-twister.* linbox/randiter/unparametric.h, make them work with the new random memebr function. 2003-09-27 wan@udel.edu * linbox/blackbox/dense.h, change the parameter RandIter &iter --> const RandIter &iter in its constructor. 2003-09-27 wan@udel.edu * linbox/randiter/*.h, make each random member function to be a const member function in each random class, since the member will not change the instantiation of the random class at all, just generate a random element. * linbox/matrix/dense.inl, make RowIterator and ColIterator support operator --() and operator-- (int). 2003-09-26 wan@udel.edu * linbox/matrix/dense.h, fit to g++3 change, add std to endl. 2003-08-15 saunders@udel.edu * sundry minor doc++ tweaks. 2003-08-14 saunders@udel.edu * sundry doc++ comments in doc/ examples/ and tests/ * added files (in newbB branch) linbox.dxx doc/fix-index examples/ex-integers.C examples/examples.dxx examples/blackbox/blackbox.dxx examples/fields/fields.dxx tests/tests.dxx * linbox/blackbox/sparse.h added default sizes * removed FROZEN, it's contents added to CHANGED-INTERFACES 2003-08-13 saunders@udel.edu * test-generic.h blackbox tests simplified, testBB() added * ntl-zz_p.h field fixed * tests/test-ntl-toeplitz/hankel to newBB. end newBB branch notes 2003-08-09 saunders@udel.edu * sundry documentation mods * blackbox/companion.h fix 2003-08-08 Rich Seagraves * linbox/util/xml/field-reader-analyzer.C: * linbox/util/xml/reader-blackbox-factory.C: Removed files (depricated) * gmp++/gmp++_int.h: * linbox/util/gmp++/gmp++_int_misc.C: Added operator bool to LinBox Integer class (casts integer to remainder upon division by 2) * linbox/blackbox/archetype.h: Add XML support to BlackboxArchetype * linbox/blackbox/companion.h: Add XML support * linbox/blackbox/compose.h: Added partial XML support (incomplete) * linbox/blackbox/scalar-matrix.h: * linbox/blackbox/triplesbb.h: * linbox/blackbox/zero-one.h: * linbox/blackbox/zero-one.inl: * linbox/blackbox/dense.h: * linbox/blackbox/nag-sparse.h: * linbox/blackbox/ntl-toeplitz.h: * linbox/blackbox/ntl-toeplitz.inl: * linbox/matrix/sparse.inl: Modified XML Reading, Writing methods for these Blackboxes * linbox/field/abstract.h: * linbox/field/envelope.h: Added reading & writing methods to envelope & abstract * linbox/field/givaro-zpz.h: * linbox/field/modular.h: * linbox/field/unparametric.h: Modified XML Reading, Writing methods for these Blackboxes * linbox/field/archetype.h: Added XML support to Field archetype (incomplete) * linbox/util/xml/field-reader-analyzer.h: * linbox/util/xml/reader-blackbox-factory.h: Completed experimental version of FieldReaderAnalyzer & ReaderBlackBoxFactory * linbox/util/xml/Makefile.am: Added entries for reader-blackbox-factory.h & field-reader-analyzer.h 2003-08-07 Bradford Hovinen * linbox/element/Makefile.am (EXTRA_DIST): Remove abstract.dxx * linbox/Makefile.am (EXTRA_DIST): Remove interfaces.dxx * RELEASE-INSTRUCTIONS: Add this file * tests/Makefile.am (BASIC_TESTS): Remove test-givaro-zpz (EXTRA_PROGRAMS): Add $(GIVARO_TESTS) * linbox/algorithms/wiedemann.inl (precondition): Allocate all Compose objects dynamically * tests/test-solve.C (main): Restore call to testPreconditionedSolve * linbox/field/gmp-rational.h (GMPRationalField::read): Compilation fix 2003-07-25 Bradford Hovinen * linbox/algorithms/block-lanczos.inl: Add calls for detailed timing information 2003-07-20 Bradford Hovinen * linbox/field/modular.inl (mulColDenseSpecialized): Compilation fixes * linbox/algorithms/block-lanczos.h (class BlockLanczosSolver): Initialize _MD in all constructors 2003-07-23 wan@udel.edu * linbox/field/modular-int.h, linbox/field/modular-short.h, linbox/field/modular-byte.h add MVProductionDomain specialization. 2003-07-21 Rich Seagraves * linbox/util/xml/field-reader-analyzer.C: * linbox/util/xml/field-reader-analyzer.h: added files for Reader->Field conversion * linbox/util/xml/reader-blackbox-factory.h: * linbox/util/xml/reader-blackbox-factory.C: added files for Reader->BlackBox conversion * linbox/blackbox/dense.h: * linbox/matrix/dense.h: Added XML support to DenseMatrix class * linbox/blackbox/diagonal.h: "" Diagonal class * linbox/blackbox/nag-sparse.h: "" NAGSparse class * linbox/blackbox/ntl-toeplitz.h: * linbox/blackbox/ntl-toeplitz.inl: "" NTLToeplitz class * linbox/blackbox/permutation.h: "" Permutation class * linbox/blackbox/scalar-matrix.h: "" ScalarMatrix class * linbox/blackbox/sparse.h: * linbox/matrix/sparse.h: "" SparseMatrix class * linbox/blackbox/triplesbb.h: "" TriplesBB class * linbox/blackbox/zero-one.h: * linbox/blackbox/zero-one.inl: "" ZeroOne class * linbox/field/gf2.h: "" GF2 class * linbox/field/gf2.inl: * linbox/field/givaro-gfq.h: "" Givaro::GFq class * linbox/field/givaro-zpz.h: * linbox/field/givaro-zpz.inl: "" Givaro::Modular class * linbox/field/gmp-rational.h: "" GMPRationalField class * linbox/field/lidia-gfq.h: "" LidiaGfq class * linbox/field/modular.h: "" Modular class * linbox/field/ntl-RR.h: "" NTL::RR specilization of Unparametric * linbox/field/ntl-ZZ_p.h: "" NTL::ZZ_p "" * linbox/field/ntl-zz_p.h: "" NTL::zz_p "" * linbox/field/ntl-ZZ_pE.h: "" NTL::ZZ_pE "" * linbox/field/unparametric.h: Added XML support to UnparametricField * linbox/randiter/gmp-rational.h: "" GMPRationalRandIter class * linbox/randiter/lidia-gfq.h: "" LidiaGfq randiter * linbox/randiter/modular.h: "" Modular randiter * linbox/randiter/nonzero.h: "" NonZero randiter * linbox/randiter/unparametric.h: "" UnparametricRanditer * linbox/util/xml/linbox-reader.h: * linbox/util/xml/linbox-writer.h: * linbox/util/xml/xml-tree.h: Updated XML reading & writing API 2003-07-21 saunders@udel.edu * Documentation modifications in doc/doc.dxx linbox/archetypes.dxx linbox/linbox.dxx linbox/blackbox/blackbox.dxx linbox/blackbox/direct-sum.h linbox/element/abstract.h linbox/element/archetype.h linbox/element/envelope.h Removed Files: linbox/interfaces.dxx linbox/wrappers.dxx linbox/element/abstract.dxx linbox/element/archetype.dxx 2003-07-21 wan@udel.edu * linbox/field/modular-balance-int.h, add balance representation for modular field. * tests/test-modular-balance-int.C, add test for balance representation for modular field. 2003-07-14 saunders@udel.edu * tests/Makefile.am givaro test now works * various.dxx some doc tweaks 2003-07-11 Bradford Hovinen * linbox/algorithms/block-lanczos.inl (iterate): Add TIMER_* calls to report detailed timings when DETAILED_PROFILE is set * linbox/randiter/mersenne-twister.h: * linbox/randiter/mersenne-twister.C: Eliminate #pragma directives 2003-07-10 Bradford Hovinen * linbox/blackbox/matrix-blackbox.h (class MatrixBlackbox): Add this file 2003-07-06 Bradford Hovinen * linbox/matrix/transpose.h (class TransposeMatrix): Add missing Row, Col, Column declarations * linbox/field/modular.h (class MVProductDomain): Add specializations for uint8, uint16, and uint32 2003-07-05 Bradford Hovinen * linbox/matrix/matrix-domain.h (class MVProductDomain): Create this class and move mulColSpecialized for dense vectors into it * linbox/algorithms/block-lanczos.inl (solve): Try checking system solution even if iterate returned false, just in case enough of the Krylov basis was obtained to get the true solution. 2003-07-03 Bradford Hovinen * linbox/blackbox/diagonal.h (Diagonal::apply): Don't resize the output * linbox/blackbox/transpose.h (class Transpose): Parameterize by black box; add versions of apply and applyTranspose separately parameterized by vector * linbox/blackbox/compose.h (class Compose): Add versions of apply and applyTranspose separately parameterized by vector (class Compose): Parameterize by blackboxes * tests/test-sparse.C (runSparseMatrixTests): Disable testing sparse matrix against non-dense vectors, since I don't support them any more * linbox/blackbox/sparse.h (class SparseMatrix): Add versions of apply and applyTranspose parameterized by two vector types; add MatrixDomain _MD; Use _MD for arithmetic and eliminate specializations as they are no longer needed; eliminate applyTransposeSpecialized * linbox/matrix/matrix-domain.h (MatrixDomain::blackboxMul): Rename blackboxMulLeft, blackboxMulRight; parameterize by black box and not by vector 2003-07-02 Bradford Hovinen * linbox/solutions/solve.h (solve): Eliminate Vector from BlockLanczosSolver declaration; parameterize by black box * linbox/algorithms/block-lanczos.inl (iterate): Declare tmp and tmp1 locally (mulin): Use Vector::Dense::iterator rather than Vector * linbox/algorithms/block-lanczos.h (class BlockLanczosSolver): Eliminate v and Av (class BlockLanczosSolver): Eliminate _t1; replace _t with _tmp * linbox/algorithms/block-lanczos.inl (solve): Parameterize by black box and vector (iterate): Ditto (solve): Eliminate v and Av * linbox/algorithms/block-lanczos.h: (class BlockLanczosSolver): Make generic wrt internal matrix type used; no longer parameterize by vector * linbox/algorithms/block-lanczos.inl (compute_Winv_S): Compute and return rank of V^T AV (iterate): Keep track of Ni and add trace statements to report it; abort if total of Ni's is too large (iterate): Use Vi = 0 as termination condition (iterate): Add variable progress_interval giving number of iterations between each call to commentator.progress (compute_Winv_S): Don't call commentator.progress unless DETAILED_TRACE is set 2003-07-09 saunders@cis.udel.edu * field/ntl-zz_p.h unparametric.h fix yesterday's version - syntax of new constructor from p,e. 2003-07-08 saunders@cis.udel.edu * Documentation tweaks, especially vis a vis @memo entries. * See doc/doc.dxx for discussion of documentation conventions. * For now, let's try to make the html documentation work and leave tex for later. 2003-07-07 Rich Seagraves * macros/expat-check.m4: Disabled automatic detection of expat in system standard locations, expat must now be manually specified in configure step 2003-06-30 Rich Seagraves * macros/expat-check.m4: * linbox/blackbox/triplesbb.h: * linbox/field/modular.h: Files altered to use "XMLENABLED" pre-processor flag instead of "RWENABLED" * linbox/matrix/sparse.h: * linbox/matrix/sparse.inl: * linbox/blackbox/sparse.h: * linbox/blackbox/sparse.inl: Added XML support to all SparseMatrix variants * linbox/blackbox/nag-sparse.h: Added XML support to NAGSparse blackbox * linbox/blackbox/zero-one.h: Added XML support to ZeroOne blackbox * linbox/util/xml/linbox-reader.h: Added constructor from initalized Writer * linbox/util/xml/linbox-writer.h: begun adding ability to traverse written Tag structure, add tags BEFORE as well as after the current Tag 2003-06-26 Rich Seagraves * add macros/expat-check.m4, * add linbox/util/xml, * add linbox/util/xml/linbox-reader.h, * add linbox/util/xml/linbox-writer.h, * add linbox/util/xml/xml-tree.h, * add linbox/util/xml/README, * add linbox/util/xml/Makefile.am: Defines LinBox/XML framework * configure.in: Alters build system to make expat package optional dependency * linbox/util/Makefile.am: make xml a subdir of util * linbox/blackbox/triplesbb.h: Add XML reading & Writing to TriplesBB class * linbox/field/modular.h: Add XML reading & Writing to ModularBase class * linbox/solutions/det.h: commented out debug output 2003-06-24 wan@udel.edu * linbox/field/modular-int.h, linbox/field/modular-short.h, linbox/field/modular-byte.h, use a fast way to compute 2^64 % modulus. * linbox/tests/test-modular-int.h, change the modulus to a 30 big integer. 2003-06-20 wan@udel.edu * linbox/blackbox/butterfly.h, linbox/blackbox/dense.h * linbox/blackbox/dif.h,linbox/blackbox/inverse.h * linbox/blackbox/sparse.h, linbox/blackbox/submatrix.h : for high performance reason, and a field only occupies a small memory, change const Field& to const Field in private field. 2003-06-16 wan@udel.edu * add linbox/field/modular-int.h, modular-short.h , modular-byte, combining the trick of NTL for arithmetic operation and dot product of modluar * add linbox/tests/test-modular-int.C, test-modular-short.C, test-modular-byte.C. * linbox/randiter/modular.h, remove field _card, since it only uses to initialize _size. 2003-06-12 wan@udel.edu * linbox/field/givaro-gfq.h, enforce that the cardinality must be <2^16, for givaro-gfq * linbox/randiter/modular.h, replace static-cast with init in the random function. 2003-06-05 saunders@udel.edu * work on documentation in linbox/blackbox (particularly blackbox.dxx and archetype.h). * Note: renamed blackboxes.dxx to blackbox.dxx and removed some cruft files. 2003-06-03 zhendong wan * linbox/blackbox/ntl-sylvester.inl remove the warning message. 2003-06-03 zhendong wan * linbox/field/ntl-zz-p.h, set default prime to be 65521 * tests/test-sum.C, correct a type name error. 2003-06-03 zhendong wan * linbox/util/commentator.C, tests/test-commentator.C, temporarily fixed the bug in test-commentator, left a little memory leaking. 2003-06-02 saunders@udel.edu * blackbox/zero-one.h, .inl: mods to avoid g++ 3.2.1 typename warnings. 2003-05-30 saunders@udel.edu * field/unparametric.h field/ntl-zz_p.h tests/test-ntl-zz_p.cpp: put in prototype of a constructor * I propose to have all field classes have a constructor from a prime and optionally an exponent -- * FieldClass(integer q) if a prime field class, (allow q = 0) * FieldClass(integer q, size_t e) if an extension of degree e. 2003-05-30 saunders@udel.edu * tests/test-commentator.C - adjust so passes on solaris. Note: there is apparently still a bug to fix. 2003-05-30 zhendong wan * linbox/blackbox/null-matrix.h: remove getInstance member function. Make default constructor public, remove static member nullMatrix * linbox/blackbox/direct-sum.h: update the include file for NullMatrix. * tests/Makefile.am: comment some tests lacking of source codes * linbox/blackbox/Makefile.am: put in null-matrix.h direct-sum.h 2003-05-29 saunders@udel.edu * change name to null-matrix.h and depreciate applyIn and a doc++ comment. 2003-05-29 zhendong wan * linbox/blackbox/nullmatrix.h : added a new singelton class. a matrix of size 0 * linbox/black/direct-sum.h : solved some ugly problem 2003-05-28 zhendong wan * tests/test-direct-sum.c: update the tests for DirectSum 2003-05-28 austin lobo david saunders * Changed blackbox/direct-sum.h to allow for 0 x 0 blocks * Changed blackbox/scalar-matrix.h to properly handle 0 x 0 matrix * Added test for 0 x 0 in tests/test-direct-sum.C * Added test for 0 x 0 in tests/test-scalar-matrix.C * New blackbox/frobenius.h and tests/test-frobenius.C 2003-05-27 zhendong wan * linbox/blackbox/companion.h, tests/test-companion.h: revised the Compa nion class, remove template parameter Polynomial, modify the constructor with ra ndom genertor. 2003-05-27 saunders@udel.edu * blackbox/companion.h, tests/test-companion.h: added class inherits from triplesbb * tests/test-triplesbb.C: add test from other constructor 2003-05-26 Pascal Giorgi * linbox/FFLAS/fflas.h : modify field_trsm to be closed to blas standard * linbox/FFLAS.fflas.inl : put macro LEFT,RIGHT,UNIT,NOUNIT,LOWER,UPPER, to specialize field_trsm function * linbox/algorithms/lsp.h : adding function to retrieve index of zero and non-zero rows in S. * linbox/algorithms/lsp-tools.h: adding function to handle row permutation , synchronization with field_trsm 2003-05-23 saunders@udel.edu * tests/test-generic.h: make testSmallBlackbox work, put it in with linearity and transpose in testBlackbox. 2003-05-20 saunders@udel.edu * linbox/blackbox/compose.h: add constructor from references, &A &B. * linbox/blackbox/sum.h: add constructor from refs, &A &B; remove cloning; copy field for speed. * linbox/field/ntl-zz_p.h: typdef to name NTL_zz_p * macros/atlas-check.m4: remove f77blas refs which break things for me. Hope not needed by others. * tests/test-butterfly.C: also check Compose constructor with refs (vs ptrs) * tests/test-generic.h: fix vector size bug in testTranspose(). * tests/test-rank.C: add testZeroAndIdentRank(). * tests/test-sum.C: also check Sum constructor with refs (vs ptrs), calls testBlackbox() too. * Added Files: linbox/blackbox/direct-sum.h tests/test-direct-sum.C: DirectSum BB is direct sum of 2 BBs, similar in structure to Compose, Sum. 2003-05-14 Bradford Hovinen * tests/Makefile.am (BASIC_TESTS): Reintroduce test-solve * tests/test-solve.C (testSingularInconsistentSolve): Check status == ...INCONSISTENT, not status == SINGULAR 2003-04-23 Pascal Giorgi * linbox/algorithms/lsp.h: delete typo errors * linbox/algorithms/lsp-tools.h : clarify Compute-G function * tests/Makefile.am: retrieve test-lsp 2003-04-19 -bds - comment out non working tests in tests/Makefile.am 2003-04-11 Pascal Giorgi * linbox/FFLAS/FFFMMBLAS.h: use of init and convert with double in MatGfq2MatDouble, MatGfq2MatDouble_Triangular and MatDouble2MatGfq * linbox/field/givaro-zpz.h: define convert to double 2003-04-11 Austin Lobo * Added rules for ntl-sylvester and test-ntl-sylvester * Added ntl-sylvester.h ntl-sylvester.inl to the repository 2003-04-10 Pascal Giorgi * linbox/algorithms/lsp.h : optimization * linbox/FFLAS.fflas.inl : new version of Field_trsm (more effficient) 2003-04-04 Pascal Giorgi * linbox/field/givaro-zpz.h: fix bug with init from double * linbox/field/givaro-zpz.inl: fix some warnings * linbox/FFLAS/FFFMMBLAS.h: fix some bugs * linbox/FFLAS/fflas.inl: fix some bugs * linbox/algorithms/lsp.h: adding header * linbox/tests/test-lsp.C: adding test for LSP factorization with atlas library * linbox/tests/Makefile.am: adding tests and variables for atlas library 2003-04-02 Pascal Giorgi * linbox/matrix/dense.h: adding parameter _ptr as a pointer on the first Element of the matrix adding FullIterator() function (returning _ptr) 2003-04-02 Jean-Guillaume Dumas * gmp++/gmp++_int.h: Backed out my commit * linbox/util/gmp++/gmp++_int_misc.C: Backed out my commit * macros/gmp-check.m4 : added GMP_VERSION Makefile variable to enable gmp-3.xxx compatibility * All this is made to have fully SIMILAR gmp++ files within givaro * and linbox (e.g. no "#include " nor * "#include " 2003-04-02 Giorgi Pascal * linbox/macros/atlas-check.m4: adding checking for atlas tuning library * linbox/configure.in: adding check for atlas * linbox/field/givaro-zpz.h: adding init function from double * linbox/algorithms/lsp.h : * linbox/algorithms/lsp-tools.h : algorithm to compute the LSP decomposition of a dense matrix stored contiguously by row. * linbox/FFLAS/ : new directory containing FFLAS routine of jean-guillaume and clement and also LinBox wrappers * linbox/FFLAS/FFFMMBLAS.h: FFLAS routine (j-g and clement code) * linbox/FFLAS/ FFFMMBLAS.inl: FFLAS routine (j-g and clement code) * linbox/FFLAS/lin_wrap_c++.h: FFLAS routine (j-g and clement code) * linbox/FFLAS/lin_wrap_c++.inl: FFLAS routine (j-g and clement code) * linbox/FFLAS/fflas.h: wrappers including field_dgemm and field_trsm * linbox/FFLAS/fflas.inl: wrappers including field_dgemm and field_trsm 2003-04-01 Bradford Hovinen * linbox/matrix/matrix-domain.inl: * linbox/matrix/matrix-domain.h: Back out previous changes 2003-03-31 Bradford Hovinen * tests/test-vector-domain.C (main): Add test for uint8 * linbox/field/modular.h (class FieldAXPY): typedef uint8 Element 2003-03-29 Bradford Hovinen * linbox/vector/bit-vector.h: Be generic wrt word length, so we can use 64-bit arithmetic when available * linbox/util/debug.h: Remove GCCisms 2003-03-27 Bradford Hovinen * gmp++/gmp++_int.h: Add operator unsigned char * gmp++/gmp++_int.h: Backed out previous commit, since it broke the build for the entire library * linbox/util/gmp++/gmp++_int_misc.C: Backed out previous commit, since it broke the build for this file * tests/test-modular.C (main): Add test for Modular * linbox/field/modular.h (class FieldAXPY): Add specialization for uint8 (class Modular): Add specialization for uint8 (class DotProductDomain): Add specialization for uint8 2003-03-26 Bradford Hovinen * linbox/matrix/matrix-domain.h (class MatrixVectorDomain): Create this class and move mulRowSpecialized and mulColSpecialized functions into it (class MatrixDomain): Inherit MatrixVectorDomain (class MatrixDomain): Move _VD to MatrixVectorDomain * linbox/field/gf2.inl (class Diagonal): Add specialization for GF2 * linbox/blackbox/diagonal.h (class Diagonal): Use RandIter, not RandomIterator * linbox/field/gf2.inl (addinSpecialized): Remember to increment other iterators * tests/test-gf2.C (testDotProductGF2): Create new version for dense/sparse test (testDotProductGF2): Use generic vector names (main): Use unsigned int rather than size_t for n * linbox/field/gf2.inl (dotSpecializedDD): Use mask at the end of the vector * linbox/vector/bit-vector.inl (class BitVector::const_iterator): Add operator = (iterator) (class BitVector::iterator): Make const_iterator a friend (class BitVector::reference): Ditto (class BitVector::iterator, class BitVector::const_iterator): Add equality checks with each other * tests/test-gf2.C (testDotProduct): Enable this * linbox/field/gf2.inl (class RandomSparseStreamGF2, class RandomDenseStreamGF2): Require seed as a parameter (addSpecialized): Swap x and y in if statement (VectorDomain::addinSpecialized): Fix call to copy * linbox/vector/bit-vector.inl (operator ==): Make this operation a bit smarter 2003-03-23 Bradford Hovinen * linbox/field/gf2.inl (class VectorDomain): Sprinkle this-> before copy liberally to make SGI CC happy * linbox/vector/bit-vector.inl (operator =): Return *this * tests/test-dif.C (testZeroApply): Remove neg_one * linbox/util/field-axpy.h (FieldAXPY::operator =): Don't try to assign the field * tests/test-sparse.C (main): Don't use NonzeroRandIter for RandomSparseStream -- that's already implied * linbox/field/gf2.inl (class RandomDenseStreamGF2, class RandomSparseStreamGF2): Rename from specializations of RandomDenseStream and RandomSparseStream * tests/Makefile.am: Enable test-gf2 * linbox/vector/bit-vector.inl (BitVector::resize): Set _size * linbox/randiter/mersenne-twister.h (MersenneTwister::randomDoubleRange): Move this to the header file * linbox/randiter/mersenne-twister.C (randomInt): Make this not inline * linbox/field/gf2.inl (class RandomDenseStream): Use the Mersenne Twister (class RandomSparseStream): Use the Mersenne Twister * linbox/randiter/gf2.h (class GF2RandIter): Use the Mersenne Twister (GF2RandIter::random): Overload with two reference types rather than using template * linbox/field/gf2.h (class GF2): Eliminate template declarations; instead use manual overloading. This means we only support bool & and BitVector::reference. Use a straight bool on const parameters * linbox/vector/bit-vector.inl: Add inserter and extractor overloading for BitVector::(const_)reference * linbox/vector/Makefile.am (include_HEADERS): Add missing bit-vector.inl * linbox/randiter/Makefile.am (BASIC_HDRS): Add missing gf2.h 2003-03-16 Bradford Hovinen * linbox/util/commentator.C (Commentator::setMaxDepth, Commentator::setMaxDetailLevel): Use ++i, not i++ * linbox/vector/subvector.h (Subvector::at): Use const_reference rather than const reference * linbox/vector/reverse.h (ReverseVector): Use const_reference rather than const reference * linbox/util/commentator.h (class Commentator): Add setMaxDepth and setMaxDetailLevel to disabled commentator 2003-03-21 Austin Lobo * test-generic.h: added testApply(..) and testApplyTranspose(...) to testBlackBox, so that timings for these two operations can be obtained. * test-ntl-toeplitz.C, test-ntl-hankel.C: cosmetic changes to give slightly cleaner status message. * ntl-toeplitz.inl: modifications in the limits of iterations to take into account the possibility of rectangular matrices. 2003-03-20 Giorgi Pascal * linbox/field/givaro-zpz.h fix bugs for init function 2003-03-15 Bradford Hovinen * linbox/randiter/modular.h (RandIter::RandIter): Copy _size and _seed in copy constructor * linbox/vector/stream.h (class RandomSparseStream): Use MersenneTwister (class RandomSparseStream): Declare the base random iterator locally * linbox/randiter/modular.h (Modular::RandIter, Modular::RandIter): New specializations; use the new Mersenne Twister random number generator * linbox/randiter/Makefile.am (noinst_LTLIBRARIES): Add libranditer.la (libranditer_la_SOURCES): Add mersenne-twister.C (BASIC_HDRS): Add mersenne-twister.h * linbox/Makefile.am (liblinbox_la_LIBADD): Add libranditer.la 2003-02-07 Bradford Hovinen * linbox/matrix/Makefile.am (BASIC_HDRS): Add matrix-domain.{h|inl} * linbox/vector/Makefile.am (include_HEADERS): Add vector-domain.{h|inl} 2002-03-04 Pascal Giorgi * linbox/field/givaro-zpz.h added specialization for DotProductDomain and FieldAxpy * linbox/field/givaro-zpz.inl added specialization for DotProductDomain and FieldAxpy 2003-03-03 Zhendong Wan *linbox/matrix/matrix-domain.h, include header file linbox/vector/vector-domain.h 2003-02-26 Austin Lobo * linbox/blackbox/Makefile.am (include_HEADERS) : added ntl-hankel.h * linbox/blackbox/ntl-hankel.h: added to library after testing * linbox/blackbox/ntl-hankel.inl: added to library after testing * linbox/tests/test-ntl-hankel.C: added to library after testing * linbox/tests/Makefile.am: (test_ntl_hankel_SOURCES) added * linbox/tests/test-generic.h: minor changes to make output clearer. 2003-02-25 Zhendong Wan *linbox/blackbox/zero-one.h, zero-one.inl. Correct one typo. 2003-02-25 Zhendong Wan *linbox/blackbox/zero-one.h, zero-one.inl. Seperate the Intereface and i implementation, put them in seperate files.And make apply specialization for Modular work. 2003-02-24 David Saunders and Zhendong Wan * linbox/util/timer.h: #define __LINBOX_TIMER_H to avoid conflict with givaro timer * tests/Makefile.am: reinstate givaro test 2003-02-22 David Saunders * tests/test-solve.C: comment out "Sparse preconditioner", MethodTrait::Wiedemann::SPARSE It's segfaulting, likely due to Compose changes. * linbox/blackbox/transpose.h compose.h: remove cloning * linbox/blackbox/triplesbb.h: coupla "typename"s to remove warnings. * linbox/field/hom.h image-field.h: Introduce a scheme for homomorphic images with injections in extension fields in mind, isoms in mind, ints to modular in mind. Specializations are now needed. * tests/test-hom.C test-image-field.C: Add prototype tests for 'em. * tests/test-generic.h: make statistical randiter test more likely to pass. 2003-02-05 Bradford Hovinen * tests/Makefile.am (NTL_TESTS): Move test-ntl-toeplitz here (NTL_TESTS): Move test-gssv_rank here * tests/test-solve.C (testSingularPreconditionedSolve) (testSingularInconsistentSolve): Use version of solve without exceptions * linbox/solutions/solve.h (solve): Return WiedemannSolver return status rather than reference to solution vector. Require parameter for certificate of inconsistency. New version that throws exceptions * linbox/algorithms/wiedemann.h (class WiedemannSolver): Remove exception code; have all functions return a new enum ReturnStatus 2003-02-04 Bradford Hovinen * linbox/vector/stream.h (class RandomSparseStream): Remove specialization for dense vectors * tests/test-generic.h: Remove testFieldAXPY (runFieldTests): Remove call to testFieldAXPY * linbox/vector/vector-traits.h (struct VectorCategories): Add ZeroOneVectorTag, SparseVectorTag for GF(2) 2003-02-03 Bradford Hovinen * tests/test-vector-domain.C: Include test-generic.h * tests/test-generic.h (testRandomIterator): Move from test-modular.C here (testDotProduct, testAddMul, testSubMul, testAXPY, testCopyEqual): Move from test-vector-domain.C here * tests/test-rank.C (testEliminationRank): New test * linbox/matrix/sparse.h (class SparseMatrixBase): Add operator [] for row access (class SparseMatrixBase): Add typedef ConstRow * examples/blackbox/Makefile.am (EXTRA_PROGRAMS): Add random-rank * linbox/matrix/Makefile.am (BASIC_HDRS): Add dense-rows-matrix.h * linbox/vector/Makefile.am (include_HEADERS): Add bit-vector.h * linbox/field/Makefile.am (BASIC_HDRS): Add gf2.h, gf2.inl * linbox/algorithms/wiedemann.inl (makeLambdaSparseMatrix): Update RandomSparseStream * linbox/vector/stream.h (RandomSparseStream::RandomSparseStream): Put probability parameter before vector dimension * linbox/algorithms/gauss.h: Rename gauss_rankin as rankin and gauss_rank as rank * linbox/algorithms/block-lanczos.h (class BlockLanczosSolver): * linbox/algorithms/block-lanczos.inl (solve): * linbox/algorithms/lanczos.h (class LanczosSolver): * linbox/algorithms/lanczos.inl (solve): * linbox/solutions/solve.h (solve): * linbox/algorithms/wiedemann.h (class WiedemannSolver): * linbox/algorithms/wiedemann.inl: Port to new SolverTraits interface * linbox/solutions/methods.h (struct WiedemannTraits): Move Wiedemann-dependent traits here (struct LanczosTraits): Move Lanczos-dependent traits here (struct BlockLanczosTraits): New structure (struct SolverTraits): Parameterize by MethodTraits and include an instance thereof; remove all method-specific traits * linbox/matrix/dense.h (DenseMatrixBase::columnDensity): New function * linbox/matrix/archetype.h (MatrixArchetype::columnDensity, MatrixArchetype::transpose): New functions * linbox/matrix/sparse.h (SparseMatrixBase::columnDensity): New function * linbox/solutions/methods.h (struct RankTraits): New structure (struct MethodTrait): Add BlockLanczos 2003-03-4 Rich Seagraves * interfaces/maple/demonstration.mws: Finished * interfaces/maple/lbmaple.C: Fixed the final bugs with LinBoxV handling code. * interfaces/maple/lbmaple.mpl.tail: ditto. Also, renamed LBApply and LBApplyTranpose as LBaply and LBapplyTranspose to be like the rest of the names * interfaces/maple/lbmaple.mpl.tail: ditto. * configure.in: Removed a double reference to matrix/Makefile in AC_OUTPUT[...] 2003-03-4 Rich Seagraves * interfaces/maple/demonstration.mws: Updated file, should be working * interfaces/maple/README: Added file * interfaces/maple/lbmaple.mpl.tail: Edited final line, lbmaple.mpl script now puts LinBox module into global maple namespace when run 2003-02-3 Rich Seagraves * interfaces/maple/lbmaple.mpl.tail: Fixed some interface bugs * interfaces/maple/demosntration.mws: Updated file, it's almost finished 2003-01-30 Rich Seagrves * interfaces/maple/Makefile.am: * interfaces/maple/Makefile.in.2: * macros/maple-check.m4: Fixed bug in maple interface build setup * linbox/blackbox/triplesbb.h: Added missing _max() function 2003-01-30 Rich Seagraves * tests/Makefile.am: Added entry for test-zero-one.C * tests/test-zero-one.C: Fixed file, now complies with standard for tests * macros/maple-check.m4: Now install maple interface in "prefix" directory * interfaces/maple/Makefile.am: Ditto * interfaces/maple/Makefile.in.2: Ditto as well :-) * linbox/blackbox/triplesbb.h: Added file (copy of maplebb.h) * interfaces/maple/maplebb.h: Removed file * interfaces/maple/lbmaple.C: Now use TriplesBB blackbox instead of MapleBB * linbox/blackbox/zero-one.h: Removed some warnings 2003-01-30 Saunders * tests/test-scalar-matrix.C: simplify test to generic testBlackbox. * tests/test-*.C: modify " ... test suite" header line of output to be preceeded by blank line rather than followed. * linbox/blackbox/hilbert.h, tests/test-hilbert.C: fix hilbert example (for dense vector only) and insert a generic test 2003-01-29 Rich Seagraves * interfaces/maple/lbmaple.C: Killed all bugs * interfaces/maple/lbmaple.mpl.tail: Ditto * macros/maple-check.m4: Fixed problem with check whether specified maple dir IS actually valid maple distribution 2003-01-29 Ahmet Duran and David Saunders * examples/gen_superlu/*: examples added and also removed as a subdir within linbox, i.e. linbox/gen_superlu/example/ subdir. 2003-01-29 Ahmet Duran and David Saunders * linbox/gen_superlu/: directory and contents are a generic version of superlu created by Ahmet. Basics work but header comments and the like will be brought up to form in the near future, * tests/test-gssv_rank: a proto test for gen_superlu, improvements will come. * test/data/gssv_rank_data: input matrix for test-gssv_rank. 2003-01-29 Rich Seagraves * interfaces/maple/Makefile.am: Remove "if HAVE_MAPLE" check * interfaces/maple/lbmaple.C: Fixed some bugs, warnings * interfaces/maple/maplebb.h: Fixed some bugs, warnings * interfaces/maple/lbmaple.mpl.head: Changed formatting a bit * interfaces/maple/lbmaple.mpl.tail: Changed formatting a bit * macros/maple-check.m4: Requires the flag "--enable-shared" to build maple interface, made some fixes to ensure proper building of lbmaple.mpl, interface script * linbox/blackbox/zero-one.h: Fixed in-file test functions * tests/test-zero-one.C: Added test for ZeroOne blackbox 2003-01-20 Austin Lobo * linbox/field/ntl-RR.h: Corrected clashes with LinBox namespace 2003-01-20 Austin Lobo * tests/test-ntl-toeplitz.C: Corrected clashes with LinBox namespace * linbox/blackbox/ntl-toeplitz.inl: Corrected clashes with LinBox namespace * linbox/blackbox/ntl-toeplitz.h: Corrected clashes with LinBox namespace 2003-01-20 Austin Lobo * tests/Makefile.am: reinstated test-ntl-toeplitz * tests/test-generic.h: added LinBox namespace to commentator calls 2003-01-17 Bradford Hovinen * configure.in: Give a sane default for CFLAGS and CXXFLAGS 2003-01-17 David Saunders * CHANGED-INTERFACES: coupla edits to bring this summary up to date a bit 2003-01-16 Bradford Hovinen * configure.in: Disable shared again 2003-01-14 David Saunders *linbox/linbox.dxx, interfaces.dxx: Text edits. interfaces.dxx should be renamed archetypes.dxx. Much text added to interfaces.dxx, some of it speculative. Further editing definitely desirable. 2003-01-14 Bradford Hovinen * linbox/matrix/matrices.dxx: Add missing * interfaces/maple/Makefile.am (mapledir): Put all build rules inside a conditional * configure.in: Add linbox/matrix/Makefile * linbox/matrix/matrix-domain.h: Move from linbox/field * linbox/matrix/matrix-domain.inl: Move from linbox/field * linbox/vector/vector-domain.h: Move from linbox/field * linbox/vector/vector-domain.inl: Move from linbox/field/vector-domain.C 2003-01-11 Bradford Hovinen * linbox/blackbox/Makefile.am (BASIC_HDRS): Remove files listed below * */*.{h|C|inl}: Update to reflect changes below; s/SparseMatrix0/SparseMatrix/ * linbox/matrix/dense.h: Move from blackbox/dense-base.h * linbox/matrix/dense.inl: Move from blackbox/dense-base.inl * linbox/matrix/sparse.h: Move from blackbox/sparse-base.h * linbox/matrix/sparse.inl: Move from blackbox/sparse-base.inl * linbox/matrix/transpose.h: Move from blackbox/transpose-matrix.h * linbox/matrix/dense-submatrix.h: Move from blackbox/dense-submatrix.h * linbox/matrix/dense-submatrix.inl: Move from blackbox/dense-submatrix.inl * linbox/Makefile.am (SUBDIRS): Add matrix 2003-01-09 Bradford Hovinen * linbox/solutions/det.h (det): Give correct solution when deg minpoly is odd 2003-01-08 Brad Botting * linbox/blackbox/dense.h (DenseMatrix::read, DenseMatrix::write): Use fully-qualified name for calling overloaded read and write 2003-01-08 Rich Seagraves * linbox/blackbox/dif.h (very top): changed __TRANSPOSE_H to __DIF_H in the preprocessor test directive at the top of the file * linbox/blackbox/sum.h (very top): changed __TRANSPOSE_H to __SUM_H in the preprocessor test directive at the top of the file * linbox/blackbox/zero-one.h: begin implementing modular template specialization * linbox/util/timer.h (class Timer): change members ut, st, and rt into private members instead of public members (changed second appearance of "public" to "private"). 2003-01-08 Saunders * tests/test-dif.C, blackbox/dif.h: difference of two matrices. Minor tweak on sum.h. 2003-01-08 Bradford Hovinen * linbox/blackbox/dense.h (DenseMatrix::write): Use os, not file * tests/test-matrix-domain.C (testMatrixDomain): Don't refer to stream.dim when constructing stream (remaining two specializations) 2003-01-07 Brad Botting * linbox/switch/Makefile.am (includedir): Install to switch, not vector 2003-01-07 Bradford Hovinen * linbox/algorithms/block-lanczos.h: Undefine _S, _M, _N for the benefit of Solaris 2003-01-07 Bradford Hovinen * linbox/algorithms/wiedemann.h: #include sparse.h * tests/test-matrix-domain.C (testMatrixDomain): Don't refer to stream.dim when constructing stream 2002-1-7 Saunders * tests/test-subvector.cpp: removed. Superceded by test-subvector.C 2002-1-6 Rich Seagraves * linbox/algorithms/massey-domain.h: changed swap() to std::swap() * linbox/randiter/modular.h: changed endl to std::endl in commentator line * linbox/blackbox/zero-one.h: added RawIterator and RawIndexIterator support to ZeroOne blackbox 2003-01-06 Bradford Hovinen * tests/test-common.C: #include 2002-12-23 Bradford Hovinen * tests/test-common.h: Add incompleteGamma, chiSquaredCDF * tests/test-modular.C (testRandomIterator): New test (main): Call testRandomIterator 2002-12-18 Bradford Hovinen * linbox/* (LinBox): Doc++ fixes * configure.in: Add check for latex 2002-12-16 Rich Seagraves * linbox/blackbox/zero-one.h: Added file * linbox/blackbox/nag-sparse.h: Fixed some errors 2002-12-11 Bradford Hovinen * linbox/util/commentator.h: Include streambuf * linbox/blackbox/butterfly.h (buildIndices): Remove check that _n is nonnegative, since _n is unsigned * linbox/blackbox/dense-base.inl (ColIterator::operator +): Make this non-const (ConstColIterator::operator +): Ditto * linbox/blackbox/diagonal.h (class Diagonal): * linbox/blackbox/moore-penrose.h (class MoorePenrose): * linbox/blackbox/butterfly.h (class Butterfly): * linbox/blackbox/dense.h (class DenseMatrix): * linbox/blackbox/compose.h (class Compose): * linbox/blackbox/scalar-matrix.h (class ScalarMatrix): Parameterize on _Vector and typedef Vector * linbox/field/modular.h: Cast to signed quantities when comparing with 0 (LinBox): Add template <> when needed * linbox/blackbox/butterfly.h (setButterfly): Eliminate unused j_1, j_2 (setButterfly): Eliminate check for j < 0, as we are dealing with unsigned quantities * linbox/blackbox/archetype.h (class BlackboxArchetype): Remove std:: from size_t * linbox/algorithms/block-lanczos.inl (eliminate_col) (find_pivot_row, permute): Take an std::vector for indices rather than a pointer (compute_Winv_S): Use _indices; don't declare indices (compute_Winv_S, find_pivot_row, eliminate_col): Make these non-const * linbox/algorithms/block-lanczos.h (class BlockLanczosSolver): Add vector _indices * linbox/blackbox/sparse-base.inl (refEntry): * linbox/field/vector-domain.C: Make sure there's an std:: before pair * linbox/util/debug.C: * linbox/field/lidia-gfq.h: * linbox/util/debug.h: * linbox/blackbox/archetype.h: Get rid of 'using namespace std' * linbox/blackbox/transpose.h (class Transpose): Use linbox_check * linbox/blackbox/sparse.h: * linbox/vector/stream.h: Parameterize all classes by _Vector and typedef to Vector * linbox/field/modular.h: * tests/test-common.C: * linbox/util/debug.h: * linbox/field/vector-domain.C: * linbox/field/vector-domain.h: * linbox/blackbox/sparse-base.inl: Make sure there's an std:: before iostream references * gmp++/gmp++_int.inl: Move constructor and destructor definitions to gmp++_int.h to avoid compiler complaints 2002-12-09 Bradford Hovinen * linbox/blackbox/dense-base.inl (RowIterator): Add operator += (ColIterator): Ditto 2002-12-10 Bradford Hovinen * tests/test-solve.C (main): Add CLI option for blocking factor * linbox/algorithms/lanczos.inl (iterate): Use DETAILED_TRACE ala block-lanczos.inl * linbox/solutions/methods.h (SolverTraits::Preconditioner): Add DEFAULT * linbox/algorithms/wiedemann.inl (precondition): Add default case label for unsupported preconditioners * linbox/solutions/solve.h (solve): Add support for Block Lanczos * tests/test-solve.C (testRandomSolve): New test (main): Add calls to testRandomSolve for Lanczos and Block Lanczos * linbox/solutions/methods.h (SolverTraits::Method): Add BLOCK_LANCZOS (struct SolverTraits): Add _blockingFactor and related methods * linbox/algorithms/Makefile.am (include_HEADERS): Add block-lanczos.{h|inl} * linbox/algorithms/lanczos.inl (solve): Import code from block-lanczos.inl to support more preconditioner types 2002-12-09 Bradford Hovinen * configure.in: Bump version number to 0.1.4 2002-12-07 Bradford Hovinen * linbox/util/commentator.C (Commentator::finishActivityReport): Show the timings in the finalized report, if requested * linbox/field/modular.h (Modular::negin): Fix in case where x == 0 * linbox/util/commentator.C (Commentator::printActivityReport): Reset _last_line_len if no length is given * linbox/field/vector-domain.C (axpyinSpecialized): Add explicit specializations for Dense/* * linbox/field/matrix-domain.inl (mulColSpecialized): Fix non-dense code * linbox/field/matrix-domain.h (MatrixDomain::mulColSpecialized): Create specializations for dense/* and have everything route to that combination * linbox/solutions/methods.h (SolverTraits::Preconditioner): Add SYMMETRIZE, PARTIAL_DIAGONAL, and FULL_DIAGONAL 2002-12-06 Bradford Hovinen * linbox/blackbox/sparse-base.inl (write): Tweak output slightly * linbox/blackbox/sparse.h (class MatrixTraits): Define specialization for SparseMatrix0 * linbox/blackbox/dense-base.inl (ConstRowIterator::operator +): Don't return a reference (write): Tweak output slightly 2002-12-05 Rich Seagaves * interfaces/maple/Makefile.in.1: fixed a small break in the build stage 2002-12-01 Rich Seagraves * interfaces/maple/Makefile.blank: removed, not needed * interfaces/maple/lbmaple.mpl: also removed * interfaces/maple/Makefile.in.1: * interfaces/maple/Makefile.in.2: added files * macros/maple-check.m4: modified for new maple build system * interfaces/maple/lbmaple.C: fixed a bunch of boo-boo's * interfaces/maple/maplebb.h: fixed a boo-boo 2002-12-01 Rich Seagraves * interfaces/maple/lbmaple.C: * interfaces/maple/lbmaple.mpl.head: * interfaces/maple/lbmaple.mpl.tail: * interfaces/maple/maplebb.h: * interfaces/maple/Makefile.am: * interfaces/maple/Makefile.blank: * interfaces/maple/demonstration.mws: * macros/maple-check.m4: Added files for interface * configure.in: Added checks for interface build, installation 2002-12-01 Bradford Hovinen * configure.in (AC_OUTPUT): Add missing interfaces/Makefile 2002-11-30 Bradford Hovinen * linbox/field/matrix-domain.inl (axpyinRowRowRow) (axpyinColColCol): Fix allocation sizes for t * tests/test-matrix-domain.C (testInvMul, testInvLeftMulin, testInvRightMulin): Split these into three cases: square, over-determined, and under-determined. Use the product of the matrix and its transpose (in the appropriate order) in the latter cases * linbox/algorithms/block-massey-domain.h (class MasseyBlockDomain): Make _MD a MatrixDomain * linbox/field/matrix-domain.inl: Comment out pow_apply and pow_horn * linbox/blackbox/sparse-base.h (class SparseMatrix0WriteHelper) (class SparseMatrix0ReadWriteHelper): Compilation fixes (class SparseMatrix0Base): Update iterator interfaces to match the dense matrix archetype (class SparseMatrix0Base): Make Row a typedef of _Row * linbox/blackbox/dense.h (DenseMatrix::read, DenseMatrix::write): Swap order of arguments for consistency * linbox/blackbox/dense-submatrix.h (DenseSubmatrix::DenseSubmatrix): Take a reference rather than a pointer * linbox/blackbox/dense-base.inl (ConstRowIterator::operator ++) (RowIterator::operator ++): Use ++*this rather than ++_row * tests/Makefile.am (BASIC_TESTS): Add test-matrix-domain * linbox/randiter/modular.h (ModularRandIter::ModularRandIter): clock was always returning 0, so go back to time (NULL) * linbox/blackbox/sparse.h (SparseMatrix0::write): Make FORMAT_PRETTY the default * linbox/blackbox/sparse-base.h (SparseMatrix0Base::write): Make FORMAT_PRETTY the default * linbox/field/Makefile.am (BASIC_HDRS): Add matrix-domain.h, matrix-domain.inl * linbox/util/commentator.C (Commentator::printActivityReport): (Commentator::updateActivityReport): (Commentator::finishActivityReport): Don't indent * tests/test-trace.C: * tests/test-sum.C: * tests/test-submatrix.C: * tests/test-sparse.C: * tests/test-solve.C: * tests/test-rank.C: * tests/test-moore-penrose.C: * tests/test-minpoly.C: * linbox/blackbox/dense-base.inl: * linbox/blackbox/sparse-base.inl: * tests/test-matrix-domain.C: * tests/test-inverse.C: * tests/test-diagonal.C: * tests/test-det.C: * tests/test-dense.C: * tests/test-butterfly.C: * tests/test-vector-domain.C: * tests/test-generic.h: Eliminate calls to commentator.indent * linbox/util/commentator.C (Commentator::report): Don't initially indent * linbox/util/commentator.h (class MessageClass): Define smartStreambuf, build _stream from that; add Commentator to all constructors; add copy constructor * linbox/util/commentator.C (Commentator::indent): Make this const 2002-11-29 Bradford Hovinen * linbox/field/vector-domain.h (class VectorDomain): Add support for add/sub/mul/axpy with vectors of different representations, using GenericVectorTag to control the number of specializations required * linbox/vector/vector-traits.h (struct VectorCategories): Add GenericVectorTag; make everything else inherit that * linbox/blackbox/dense-base.inl (DenseMatrixBase::read): Return the input stream * linbox/blackbox/dense-base.h (DenseMatrixBase::read, DenseMatrixBase::write): Swap order of arguments, to be consistent with SparseMatrix0Base * linbox/blackbox/dense-base.h: * linbox/blackbox/dense-submatrix.h: * linbox/blackbox/sparse-base.h: Add struct MatrixTraits * linbox/blackbox/dense-base.h: * linbox/blackbox/sparse-base.h: * linbox/blackbox/dense-submatrix.h: Make Element a typedef from _Element 2002-11-28 Bradford Hovinen * linbox/blackbox/dense-submatrix.h (class DenseSubmatrix): Use a reference rather than a pointer * linbox/blackbox/sparse-base.h (class SparseMatrix0ReadWriteHelper): Make all methods const 2002-11-26 Bradford Hovinen * linbox/blackbox/Makefile.am (BASIC_HDRS): Add transpose-matrix.h * linbox/blackbox/dense-submatrix.h (struct MatrixTraits): Define * linbox/blackbox/dense-base.h (struct MatrixTraits): Define * linbox/field/matrix-domain.h (struct MatrixCategories) (struct MatrixTraits): Define * linbox/field/matrix-domain.inl: Moved all the arithmetic from matrix-domain.C here, in accordance with the convention * linbox/field/matrix-domain.h: Added detailed documentation, cleaned up the interface slightly, and added support for matrix traits. Added read, write, neg, negin, axpy, matrix-vector and matrix-black box operations * linbox/field/vector-domain.h (class VectorDomain): Extend axpyin so that it can work with vectors of more than one representation. Create specializations for input and output vectors of different representations that just use copy. For the benefit of MatrixDomain 2002-11-27 Rich Seagraves and David Saunders * interfaces, interfaces/maple: directories added to hold the Maple linbox interface (which Rich will put there soon ). * Makefile.am interfaces/Makefile.am: subdir entries. 2002-10-29 Bradford Hovinen * linbox/blackbox/dense-base.inl (ColIterator::operator +): Make this work like a real + operator (RowIterator::operator +): Ditto (RowIterator, ConstRowIterator): Fixed some ID10T errors 2002-10-28 Bradford Hovinen * linbox/blackbox/dense-submatrix.inl: Ditto below * linbox/blackbox/dense-base.h: Rename ColOfRowsIterator as RowIterator; similarly with RowOfColsIterator 2002-10-28 Zhendong Wan and David Saunders * linbox/blackbox/dense.h: tweak doc++, delete RowIterator and ColIterator types in matrix class. Change name of RawIndexIterator to RawIndexedIterator. * linbox/blackbox/dense.inl: update impl to reflect dense.h changes. 2002-10-28 Bradford Hovinen * tests/test-trace.C (testDiagonalTrace): Make sure vectors get declared to the right length * tests/test-sum.C (testZeroApply): Make sure vectors get declared to the right length * linbox/vector/stream.h (RandomSparseStream::get, RandomDenseStream::get): Don't try to resize the vector * linbox/blackbox/dense-base.inl (write): Make output format a little prettier * linbox/algorithms/lanczos.inl (solve): Length of b1 should be row dimension of A * linbox/field/vector-domain.h (neg, negin): Add these interfaces and implement (class VectorDomain): Parameterize arithmetic methods by separate vector types for each vector argument. Though they do not support arithmetic on different vector *representations* at the same time, one can use this to, say, add a column vector into a standalone vector 2002-10-27 Bradford Hovinen * linbox/blackbox/dense.inl: * linbox/blackbox/dense.h: Split out container/iterator functionality into new DenseMatrixBase * linbox/blackbox/Makefile.am (BASIC_HDRS): Add dense-submatrix.h, dense-submatrix.inl * linbox/blackbox/dense.inl (read): Compilation fix (write): Prefer ISO standard outputs * linbox/blackbox/dense-submatrix.inl: Rename from densesubmatrix.C * linbox/blackbox/dense-submatrix.h (class DenseSubmatrix): Fix constructor interface; add interfaces missing from DenseMatrix; add Doc++ documentation; reindent * linbox/blackbox/dense-submatrix.h: Rename from densesubmatrix.h * linbox/blackbox/dense.h (DenseMatrix::refEntry): Define (class DenseMatrix): Reorder the declarations to match SparseMatrix0Base; reindent; add Doc++ documentation to the interfaces (DenseMatrix::getEntry): Add a form that returns a read-only reference to the entry (class DenseMatrix): Make generic wrt vector type (class DenseMatrix): Move some of the one-liners from dense.inl into the class (DenseMatrix::resize): Implement * macros/saclib-check.m4: * macros/givaro-check.m4: * macros/lidia-check.m4: * macros/ntl-check.m4: * macros/gmp-check.m4: Preserve user-specified CXXFLAGS and LIBS when running test 2002-10-26 Bradford Hovinen * tests/Makefile.am (CLEANFILES): Add $(TESTS) * .cvsignore: Update * acconfig.h: Remove this file * macros/gmp-check.m4: * macros/ntl-check.m4: * macros/lidia-check.m4: * macros/givaro-check.m4: * macros/saclib-check.m4: Use modernized AC_DEFINE * configure.in: Bump version to 0.1.3 * .cvsignore: * tests/.cvsignore: Update * tests/test-solve.C (testIdentitySolve, testNonsingularSolve): Don't explicitly give whether the matrix is symmetric * linbox/algorithms/Makefile.am (include_HEADERS): Add lanczos.{h|inl} * linbox/solutions/solve.h (solve): Add support for Lanczos iteration * tests/test-solve.C (testIdentitySolve, testNonsingularSolve) (testSingularConsistentSolve, testSingularInconsistentSolve): Add support for specifying the solver to be used (testSingularPreconditionedSolve): Add support for specifying the preconditioner to be used 2002-10-14 Bradford Hovinen * linbox/algorithms/wiedemann.inl (solveNonsingular): Add support for symmetric containers, using _traits.symmetric * linbox/algorithms/blackbox-container-symmetric.h (class BlackboxContainerSymmetric): Add parameter for the field * linbox/solutions/methods.h (struct SolverTraits): Add parameter symmetric, telling whether the matrix is symmetric * tests/test-solve.C: Update with changes to solve 2002-10-13 Bradford Hovinen * linbox/solutions/methods.h (struct SolverTraits): Add documentation; remove unimplemented string constructor * linbox/solutions/solve.h (solve): Add a variant that does not throw any exceptions * linbox/solutions/methods.h (struct SolverTraits): Make default maxTries 100 * linbox/solutions/methods.h (class InconsistentSystem, class SolveFailed): Move these from WiedemannSolver here, since they apply to more than just Wiedemann 2002-10-09 Bradford Hovinen * linbox/blackbox/ntl-toeplitz.inl: Compilation fixes * tests/test-ntl-toeplitz.C: Compilation fixes 2002-10-03 Bradford Hovinen * linbox/switch/cekstv.h (applyTranspose, apply): Fix formulae * linbox/algorithms/wiedemann.inl (findNullspaceElement) (findRandomSolution): Pass _randiter to RandomDenseStream constructor * linbox/algorithms/wiedemann.h (class WiedemannSolver): Add constructor that accepts random iterator * linbox/algorithms/wiedemann.inl (solveNonsingular) (precondition, makeLambdaSparseMatrix): Use _randiter (solveNonsingular): Add parameter useRandIter to determine whether to use the random iterator, or to use b for the Krylov sequence computation (findNullspaceElement, certifyInconsistency): Remove preconditioner support (solveSingular): Use non-preconditioned A for certificate of inconsistency (makeLambdaSparseMatrix): Use the existing randiter, since RandomSparseStream already constructs a NonzeroRandIter (certifyInconsistency): Pass _randiter to WiedemannSolver constructor * linbox/algorithms/wiedemann.h (class WiedemannSolver): Add _randiter * linbox/algorithms/wiedemann.inl (solveSingular): Throw a BadPreconditioner exception if the reason for failure was a bad preconditioner, since this means the rank computation was probably correct and can be reused (solveSingular): Move rank computation to solve (solve): Compute rank and try to reuse when possible; set rank to (unsigned long) -1 when SolveFailed thrown * tests/test-solve.C (testSingularPreconditionedSolve): Return success value rather than always returning true * linbox/randiter/modular.h (LinBox): Use clock () rather than time (NULL) to get a higher-resolution timer * tests/test-solve.C (testSingularPreconditionedSolve): Don't fill matrix with 1's; just build a diagonal black box 2002-10-02 Bradford Hovinen * linbox/algorithms/wiedemann.h: Refactoring: Put everything inside a WiedemannSolver class, with the following interface solveNonsingular - Solve a nonsingular system solveSingular - Solve a general singular system findRandomSolution - Find a random solution to a singular preconditioned problem findNullSpaceElement - Find an element of the right nullspace certifyInconsistency - Find a certificate of inconsistency for a linear system precondition - Form a preconditioner and return it * tests/test-solve.C (testSingularPreconditionedSolve) (testSingularInconsistentSolve, testSingularConsistentSolve): Update according to interface changes in wiedemann.h * linbox/field/vector-domain.C (VectorDomain::writeSpecialized): Remove debugging code * tests/test-butterfly.C (main): Use Modular and make GF(2147483647) the default (testCekstvSwitch): Use preconditioner PDQ rather than just PD * tests/test-solve.C (testSingularPreconditionedSolve): Always return true * linbox/blackbox/moore-penrose.h (MoorePenrose::MoorePenrose): Update use of Submatrix * tests/test-moore-penrose.C (testRandomApply1): Update use of Submatrix * tests/test-solve.C (main): Reenable tests other than preconditioned solve * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Implement sparse preconditioner * linbox/blackbox/sparse-base.h (class SparseMatrix0Base): Add method transpose (class SparseMatrix0Base): Rename VectorTrait as RowTrait in specializations * linbox/blackbox/sparse-base.inl (transpose): Implement 2002-09-30 Bradford Hovinen * linbox/solutions/methods.h (struct SolverTraits): Add enum Preconditioner; rename precondition to preconditioner; add methods to set parameters (SolverTraits::SolverTraits): Initialize _singular with singular, not UNKNOWN * linbox/vector/stream.h (RandomSparseStream::setP): Implement * tests/test-butterfly.C (testSetButterfly): Reset the stream * tests/test-solve.C (testSingularPreconditionedSolve): Use a SparseMatrix0 and fill in the entries below the zeros with 1's * tests/test-butterfly.C (testCekstvSwitch): Ditto 2002-09-26 Bradford Hovinen * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Construct a CekstvSwitchFactory and use it as input for the CekstvSwitch constructor (solveWiedemannSingular): Commentator fixes * linbox/blackbox/butterfly.h (class Butterfly): Parameterize on the field, give a reasonable default for Vector * linbox/switch/boolean.h (class BooleanSwitch): * linbox/switch/cekstv.h (class CekstvSwitch): Don't maintain vector of 2x2 block information; just hold data for one 2x2 block; eliminate field and temporary * linbox/blackbox/butterfly.h (Butterfly): Make the vector of switches (class Butterfly): Constructor reorganization; see header file 2002-09-25 Bradford Hovinen * linbox/switch/cekstv.h (class CekstvSwitch): Add copy constructor (CekstvSwitch::CekstvSwitch): Implement copy constructor * tests/test-butterfly.C (testRandomTranspose) (testRandomLinearity): Implement these tests (testCekstvSwitch): Construct a random vector and pass it to CekstvSwitch * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Prepare rhs before obtaining minpoly * linbox/blackbox/submatrix.h (Submatrix::apply, Submatrix::applyTranspose): Fill unused portions of temporary input vector with zeros (class Submatrix): Parameterize by field (class Submatrix): Give a reasonable default for the vector type * tests/test-submatrix.C (testRandomLinearity) (testRandomTranspose): Implement these tests * linbox/blackbox/submatrix.h (Submatrix::Submatrix): Initialize _z with column dimension * tests/test-submatrix.C (testRandomApply): Make vector output LEVEL_UNIMPORTANT (testRandomTranspose): Implement this * linbox/blackbox/submatrix.h (class Submatrix): Make _z, _y mutable; delete _zt, _yt (Submatrix::apply, Submatrix::applyTranspose): Don't declare local vectors * tests/test-submatrix.C (testRandomApply): Reset stream when done (testRandomLinearity): Implement this test 2002-09-23 Bradford Hovinen * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Don't use DenseVector (solveWiedemann): Compute m_A rather than m_A,b (solveWiedemannSingular): Fix generator for random solution (solveWiedemannSingular): Add butterfly preconditioner support (solveWiedemannSingular): Cancel this loop iteration if the leading principal minor turned out to be singular * tests/test-solve.C (testSingularConsistentSolve): Implement (testNonsingularSolve): Rename from testDiagonalSolve (testSingularInconsistentSolve): Implement * linbox/algorithms/cra.h (cra): Use unsigned long in casts (cra): Fix order of arguments to invmod (cra): Reduce the result modulo the product of the primes * linbox/blackbox/sparse-base.h (_RawIndexIterator::operator ++): Update _curr.second properly * linbox/util/prime-stream.h (PrimeStream::next): Move _curr by 2 * linbox/algorithms/cra.h (cra): Invoke commentator * linbox/solutions/det.h (det): Invoke commentator * tests/test-det.C (testIntegerDet): Implement this test (main): Call testIntegerDet * linbox/blackbox/sparse.inl (makeBlackbox): Implement (smarter version now, taking over for the constructor that was removed) * linbox/blackbox/sparse.h (class SparseMatrix0): Remove constructor from SparseMatrix0Base -- this will be handled by SparseMatrixFactory from now on * linbox/blackbox/sparse-base.h (class SparseMatrix0Base::RawIterator): Remove _A, add _A_end; add default constructor; update other constructors (class SparseMatrix0Base::RawIndexIterator): Ditto (class SparseMatrix0Base): Remove implementations from default class (class SparseMatrix0Base::RawIterator): Make this a parameterized class to allow const version to be defined easily (N.B. I hate C++) (class SparseMatrix0Base::RawIndexIterator): Same as RawIterator (N.B. Same note applies, doubly so) * linbox/blackbox/sparse.h (SparseMatrixFactory): Pull declaration of tmp out of the loop * tests/test-det.C (testDiagonalDet2): Don't specify template parameters explicitly (testSingularDiagonalDet): Ditto * linbox/blackbox/factory.h: Include vector-traits.h * gmp++/gmp++_int.h (Integer::invmod): Make this static * linbox/algorithms/cra.h (cra): Compilation fixes * linbox/solutions/det.h (det): Compilation fixes * linbox/blackbox/sparse.h (class SparseMatrixFactory): Make sure SparseMatrix0Base is used with its own element and row types * linbox/blackbox/factory.h (BlackboxFactory::makeBlackbox): Make F const * linbox/algorithms/cra.h (cra): Use integer:: on integer operations * linbox/blackbox/sparse-base.h (class SparseMatrix0Base): Provide a reasonable default for Row; clean up template declaration * linbox/blackbox/sparse.h (class SparseMatrix0): Clean up template declaration 2002-09-22 Bradford Hovinen * linbox/blackbox/sparse-base.inl (write): Add support for FORMAT_MATLAB in sparse parallel specialization (write): Write closing bracket; put opening bracket at the beginning of the matrix, not the beginning of each row * linbox/blackbox/sparse.h (SparseMatrixFactory::maxNorm, SparseMatrixFactory::rowdim, SparseMatrixFactory::coldim): Implement * linbox/util/gmp++/gmp++_int_gcd.C (invmod): Implement * gmp++/gmp++_int.h (class Integer): Add invmod * linbox/field/modular.h (class ModularBase): Remove assignment operator (Modular::operator =): Copy documentation from ModularBase; use F rather than rhs; copy _two_64 rather than calling init again * linbox/util/gmp++/gmp++_int_misc.C (nextprime, prevprime): Implement Include cmath * gmp++/gmp++_int.h (class Integer): Add nextprime, prevprime * linbox/blackbox/factory.h (class BlackboxFactory): Make a reasonable default for Vector * linbox/Makefile.am (BASIC_HDRS): Add rational.h * linbox/rational.h: Add this file * tests/test-butterfly.C (testBooleanSwitch): Remove this test; it is redundant * linbox/switch/cekstv.h (class CekstvSwitch): Make _iter, _riter, and _R mutable * linbox/blackbox/diagonal.h (class Diagonal): Give a reasonable default for Vector * tests/test-butterfly.C (testSetButterfly): Use stock typedef for dense vectors (testCekstvSwitch): Implement 2002-09-21 Bradford Hovinen * linbox/solutions/det.h (det): Add versions for integer and rational determinant Comilation fixes * examples/dot-product.C (main): Update according to new interfaces; remove unnecessary typedefs * linbox/vector/vector-traits.h (class RawVector): Rename from Vector; parameterize on Element rather than Field (class Vector): Declare to inherit RawVector * linbox/blackbox/sparse.h (class SparseMatrixFactory): Don't require that the field and the SparseMatrixBase share the same element type * examples/blackbox/.cvsignore: Update * linbox/field/modular.h: Reinsert two deleted lines * linbox/util/commentator.C (Commentator::printActivityReport): Don't print percentage unless _len is positive 2002-09-21 Rich Seagraves * linbox/field/modular.h: Added = assignment operator. 2002-09-21 Bradford Hovinen * examples/blackbox/Makefile.am (EXTRA_PROGRAMS): Add load-minpoly * linbox/blackbox/sparse-base.inl (readMatlab): Use is.putback, not is.unget * linbox/blackbox/sparse-base.h (SparseMatrix0WriteHelper::Format): Add FORMAT_MATLAB 2002-09-20 Bradford Hovinen * linbox/randiter/param-fuzzy.h (ParamFuzzyRandIter::random): Uncomment ElementAbstract version Include element/abstract.h, element/envelope.h * linbox/field/param-fuzzy.h: Reintroduce forward declaration of RandIter; move include randiter/... to the end * linbox/randiter/param-fuzzy.h (class ParamFuzzyRandIter): Add a version of the constructor that *really* takes a field as an argument * tests/test-param-fuzzy.C (main): Add arguments n and i; call runFieldTests * tests/test-lidia-gfq.C (main): Add arguments n and i; fix description text for argument q; call runFieldTests * tests/test-ntl-RR.cpp (main): * tests/test-unparametric-field.C (main): Return 0 always * linbox/randiter/unparametric.h (UnparametricRandIter::random): Remove debugging code * tests/test-unparametric-field.C (main): * tests/test-ntl-RR.cpp (main): * tests/test-ntl-ZZ_p.cpp (main): * tests/test-ntl-zz_p.cpp (main): Add arguments n and i; call runFieldTests * tests/test-gmp-rational.C (main): * tests/test-givaro-zpz.C (main): * tests/test-modular.C (main): Reverse order of iterations and n when calling runFieldTests * tests/test-generic.h: Do b / a rather than a / b * tests/test-givaro-zpz.C (main): Add arguments n and i; fix description text for argument q; call runFieldTests (main): Don't print out separate headers for each test; just use the runFieldTests wrapper. (main): Add a parameter e and a field F5 which is GF(q^e); run a test on that * linbox/randiter/gmp-rational.h: Reindent (GMPRationalRandIter::random): Initialize value properly (GMPRationalRandIter::random): Canonicalize before returning * linbox/field/gmp-rational.h: * linbox/element/gmp-rational.h: Reindent * linbox/randiter/gmp-rational.h (class GMPRationalRandIter): Fix compile errors * tests/test-generic.h (runFieldTests): Move from test-modular.C here * linbox/field/gmp-rational.h (GMPRationalField::GMPRationalField): Initialize all the const integers (class GMPRationalField): Make integers not static const; fix compile errors * linbox/blackbox/dense.inl (apply): Remove unused variables (applyTranspose): Remove unused variables * linbox/blackbox/dense.h: Include vector-domain.h * linbox/blackbox/sparse1.h: Fix compile warning * examples/mmZZ_pE.C: Fix header and indentation; include dense.h rather than dense-matrix1.h 2002-09-18 zhendong wan * linbox/blackbox/dense.h Add RawIndexIterator, which looks like RawIterator expect that it has two more member function. rowIndex returns the row index, colIndex returns the column index. 2002-09-17 Bradford Hovinen * linbox/solutions/det.h (det): Use commentator.start / commentator.stop * linbox/field/vector-domain.h (VectorDomain::copySpecialized): Don't call resize * linbox/blackbox/dense.h (class DenseMatrix): Remove template parameter from VectorStream constructor; support a different vector type in the representation * tests/.cvsignore: Update * linbox/blackbox/dense.h (class DenseMatrix): Add constructor that takes a VectorStream 2002-09-16 Bradford Hovinen * linbox/blackbox/dense.h (class DenseMatrix): Define a vector domain _VD * linbox/blackbox/dense.inl (applyTranspose, apply): Use vector domain 2002-09-15 Bradford Hovinen * linbox/blackbox/sparse-base.h (class SparseMatrix0ReadWriteHelper): Add readMatlab (SparseMatrix0WriteHelper::Format): Add FORMAT_MATLAB (SparseMatrix0Base::Format): Add FORMAT_MATLAB * linbox/blackbox/sparse-base.inl (write, read): Add support for FORMAT_MATLAB (readMatlab): Implement 2002-09-12 Bradford Hovinen * configure.in (EIGHT_BYTES): Fix typo 2002-09-11 Rich Seagraves * linbox/blackbox/nag-sparse.h: Add RawIterator and RawIndexIterator support, altered test suite appropriately * linbox/blackbox/archetype.h: include cstddef to ensure support for size_t type. 2002-09-10 Bradford Hovinen * tests/test-generic.h (testFieldInversion): Make sure a is nonzero 2002-09-09 Bradford Hovinen * configure.in: Support older versions of autoconf that give AC_SIZEOF results in bits 2002-09-09 Saunders & Wan * solutions/lu.h: add comments 2002-09-08 Bradford Hovinen * examples/blackbox/load-det.C: Cut out unnecessary typedefs * linbox/blackbox/sparse.h (class SparseMatrixFactory): Define (class SparseMatrix0): Introduce default of Dense for vector type 2002-09-08 Bradford Hovinen * .cvsignore: Update * linbox/vector/stream.h (class RandomDenseStream, class RandomSparseStream): Set default vector types to dense and sparse, respectively * linbox/vector/vector-traits.h: Add class Vector with canonical vector types * linbox/vector/Makefile.am (include_HEADERS): Add stream.h * linbox/util/Makefile.am (include_HEADERS): Remove vector-factory.h * tests/test-trace.C: * tests/test-sum.C: * tests/test-submatrix.C: * tests/test-minpoly.C: * tests/test-inverse.C: * tests/test-diagonal.C: * linbox/solutions/trace.h: * linbox/algorithms/wiedemann.h: * tests/test-butterfly.C: * linbox/algorithms/wiedemann.h: * tests/test-generic.h: * tests/test-vector-domain.C: * tests/test-solve.C: * tests/test-moore-penrose.C: * tests/test-sparse.C: Update with changes to linbox/vector/stream.h * tests/test-moore-penrose.C (buildRandomSparseMatrix): Work with sparse parallel vectors 2002-09-05 Bradford Hovinen * linbox/vector/stream.h: - Renamed to stream.h and moved to linbox/vector - VectorFactory is now called VectorStream, which fits its purpose somewhat better - The interface is now closer to the interface for istream - RandomDenseVectorFactory, et al. are refactored into classes parameterized on the vector type and specialized appropriately. This allows, e.g. construction of a random dense vector in sparse representation and so on. - New constructor interface for RandomSparseStream accepts proportion of nonzero entries - Reindented, since the other changes are so numerous that diffs aren't a big deal anyway * linbox/blackbox/archetype.h: s/stddef.h/cstddef/ 2002-09-04 * tests/test-vector-domain.C (main): Remove srand call * examples/blackbox/load-symmetrize.C (main): Remove srand call (main): Fix help text * examples/blackbox/load-det.C (main): Remove srand call 2002-08-28 Bradford Hovinen * NEWS: Updated text * tests/Makefile.am (BASIC_TESTS): Remove test-lu due to compilation problems * configure.in: Bump version to 0.1.2 * linbox/field/lidia-gfq.h (LidiaGfq::read, LidiaGfq::write): Use std::ostream, std::istream * macros/gmp-check.m4: Add directives to allow use of uninstalled GMP * configure.in: Use AM_CONDITIONAL statements for Doc++; Add arguments --enable-doc and --enable-doc-tex for building documentation * doc/Makefile.am (SUBDIRS): Mandary inclusion of html and tex * doc/html/Makefile.am: * doc/tex/Makefile.am: Add mechanism for optionally compiling in targets if USE_DOCPLUSPLUS is set 2002-08-27 Bradford Hovinen * NEWS: Update text * linbox/*/Makefile.am (EXTRA_DIST): Merge in contents of EXTRA_HEADERS * NEWS: Update text * configure.in: Bump version number to 0.1.1 * tests/test-commentator.C (testBriefReport): Output brief report data to the same file used for the other data * linbox/util/commentator.C (MessageClass::checkConfig): Make depth and level unsigned (Commentator::Commentator): Set default max depth of BRIEF_REPORT to 1 (Commentator::start): Push new activity after printing activity report (Commentator::stop): Pop new activity before finishing activity report (Commentator::progress): Test on _activities.size () - 1 for updateActivityReport (Commentator::progress): Tweak output (Commentator::setPrintParameters, Commentator::setMaxDepth, Commentator::setMaxDetailLevel): Omit BRIEF_REPORT (Commentator::printActivityReport, Commentator::updateActivityReport, Commentator::finishActivityReport): Tweak output parameters (Commentator::updateActivityReport): Don't show progress if deeper messages are printed * linbox/util/commentator.h (Commentator::isPrinted, MessageClass::isPrinted): Make depth and level unsigned * tests/.cvsignore: Update * tests/Makefile.am (BASIC_TESTS): Add test-commentator.C * linbox/algorithms/blackbox-container-base.h (BlackboxContainerBase::~BlackboxContainerBase): Delete _BB, as it was a clone * linbox/util/commentator.h (Commentator::MessageLevel): Renumber so that LEVEL_ALWAYS is 0 * linbox/util/commentator.C (MessageClass::fixDefaultConfig): Add a directive to make sure LEVEL_ALWAYS messages always get printed * linbox/util/commentator.h (Commentator::setPrintParameters, MessageClass::setPrintParameters): Interface adjustment: only one depth is specified, the maximum for which the directive is valid; make depth and level unsigned 2002-08-26 Bradford Hovinen * linbox/randiter/modular.h (ModularRandIter::random): Fix call to linbox_check * tests/test-sparse.C (runSparseMatrixTests): Tweak text * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::next, RandomSparseParVectorFactory::next): Initialize i to -1 so that the first index might get an entry * tests/test-generic.h (testTranspose, testLinearity): Declare new reports inside the loop * tests/test-sparse.C (testRandomApply2): Reset A_factory when done * linbox/util/field-axpy.h (class FieldAXPY): Make _F mutable * tests/test-sparse.C (testRandomApply2): Remove this test (testRandomApply3): Rename as testRandomApply2 (testRandomApply1, testRandomApply2): Accept a factory as a parameter and use it to build the matrix (testRandomTranspose, testRandomLinearity): Accept a factory as a parameter and use it to build the matrix * tests/test-generic.h (testGeometricSummation): Make sure a != 1 * tests/test-modular.C (runFieldTests): Implement; copy code from relevant section of main (main): Use runFieldTests 2002-08-25 Bradford Hovinen * linbox/field/.cvsignore: Update * tests/.cvsignore: Update * linbox/blackbox/butterfly.h (applyTranspose, apply): Call std::copy (x.begin (), x.end (), y.begin ()) * configure.in (AC_OUTPUT): Add linbox/switch/Makefile * macros/ntl-check.m4: Remove EX_FIELDS_NTL, as it is not needed * linbox/Makefile.am (BASIC_HEADERS): Rename from include_HEADERS; have include_HEADERS use the mechanism in tests/Makefile.am for optional inclusion * macros/ntl-check.m4 (NTL_HEADERS_*): Remove * macros/givaro-check.m4 (GIVARO_HEADERS_*): Remove * macros/lidia-check.m4 (LIDIA_HEADERS_*): Remove * linbox/field/Makefile.am (BASIC_HEADERS): Rename from include_HEADERS; have include_HEADERS use the mechanism in tests/Makefile.am for optional inclusion * tests/test-ntl-toeplitz.C: Rename from test-toeplitz.C * tests/Makefile.am: Rename test-toeplitz as test-ntl-toeplitz * macros/lidia-check.m4 (HAVE_LIDIA): Define * macros/givaro-check.m4 (HAVE_GIVARO): Define * macros/ntl-check.m4 (HAVE_NTL): Define * tests/Makefile.am: Put {NTL|GIVARO|LIDIA}_TESTS in here; use conditionals to make inclusion in TESTS optional 2002-08-20 Bradford Hovinen * linbox/blackbox/butterfly.h (setButterfly): Remove Commentator parameter; update uses of commentator to current interface; remove TRACE code * linbox/Makefile.am (SUBDIRS): Add switch * examples/.cvsignore: Update 2002-08-19 Bradford Hovinen * linbox/randiter/modular.h (ModularRandIter::random): Protect from getting a result equal to the size of the sample * tests/test-sparse.C (testRandomApply1): Remove debugging code * linbox/randiter/modular.h (class ModularRandIter): Make _size a double and _seed an Element, as they can never be larger than Element (ModularRandIter::randIter): Initialize _card (ModularRandIter::random): Don't use temp_integer; don't mod out by cardinality as it should not be necessary; don't convert _size to a double 2002-08-18 Bradford Hovinen * linbox/field/modular.inl (dotSpecializedDSP): Add optimized variant for very short vectors, to avoid cost of additional mod operation (dotSpecializedDSP, dotSpecializedDD): Defer declarations until needed * configure.in (AC_DEFINE_UNQUOTED): Don't quote description * examples/blackbox/ex-mat0.C (main): Use Modular * examples/blackbox/example.C: Use Modular * examples/fields/ex-fields0.C (main): Use Modular * examples/fields/ex-fields.C (main): Use Modular * examples/blackbox/load-symmetrize.C: Use Modular * examples/blackbox/load-det.C: Use Modular * examples/dot-product.C: Use Modular * linbox/field/modular.inl (dotSpecializedDD, dotSpecializedDSP): Update signatures of specialization * tests/test-trace.C (main): Use Modular * tests/test-sum.C (main): * tests/test-submatrix.C (main): * tests/test-sparse.C (main): * tests/test-solve.C (main): * tests/test-scalar-matrix.C (main): * tests/test-minpoly.C (main): * tests/test-inverse.C (main): * tests/test-diagonal.C (main): * tests/test-det.C (main): * tests/test-rank.C (main): * tests/test-dense.C (main): * tests/test-randiter-nonzero.C (main): * tests/test-moore-penrose.C (main): * tests/test-vector-domain.C: Use Modular * tests/test-modular.C: * linbox/field/modular.h: Change Modular, FieldAXPY, and DotProductDomain specializations to use new Linbox uint* types * linbox/integer.h: Add typedefs for int* * acconfig.h: Add #undef __LINBOX_INT* * configure.in: Define __LINBOX_INT* based on results of AC_SIZEOF * linbox/field/modular.inl (dotSpecializedDD, dotSpecializedDSP): Reintroduce faster modding out * linbox/field/modular.h (Modular::init_two_64): Start counter at 0 * tests/test-vector-domain.C (main): Test vector domains for all basic modular types (testVectorDomain): Implement * examples/blackbox/.cvsignore: Update * examples/Makefile.am (EXTRA_PROGRAMS): Add dot-product 2002-08-13 Bradford Hovinen * configure.in: Bump version to 0.1.0 * linbox/field/modular.inl (dotSpecializedDSP, dotSpecializedDD): Use traditional modding out pending getting the more advanced version working correctly * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Fix start/stop pairing * linbox/field/modular.h (Modular::inv): Keep the inputs from sign-extending to long long * linbox/util/commentator.C (Commentator::startIteration): Store string in _iteration_str so that it is not deallocated when the call returns * linbox/util/commentator.h (class Commentator): Add _iteration_str * tests/test-diagonal.C (testRandomMinpoly): Make vector reports at LEVEL_UNIMPORTANT (testRandomTranspose): Use factory to generate diagonal vector; make it a dense vector, use VectorDomain::write (testRandomLinearity): Implement * tests/test-vector-domain.C (main): Used unsigned short field * tests/test-modular.C (main): Make default n 10000; reorder test invocations to group fields together 2002-08-12 Bradford Hovinen * tests/test-vector-domain.C (testDotProduct): Make vector output LEVEL_UNIMPORTANT (testCopyEqual, testAXPY, testSubMul, testAddMul, testDotProduct): Terminate vector displays with endl's * linbox/field/modular.inl (dotSpecializedDD, dotSpecializedDSP): Make sure arithmetic takes place without sign-extension * tests/test-generic.h (testFieldAssociativity): Implement 2002-08-11 Bradford Hovinen * tests/test-modular.C (main): Call tests indicated below for each modular type * tests/test-generic.h (testFieldNegation, testFieldInversion) (testFieldAxioms, testGeometricSummation) (testFieldCharacteristic, testFreshmansDream) (testArithmeticConsistency, testAxpyConsistency): Implement * tests/test-minpoly.C (main): Make A_factory sparse parallel (testIdentityMinpoly, testNilpotentMinpoly): Define Row to be sparse parallel * linbox/field/modular.h (read): Do arithmetic in the domain integer * linbox/randiter/modular.h (ModularRandIter::random): Remove check for negativity * linbox/field/modular.h (Modular::init): Fix in case modulus > 2^15 (Modular::init): Perform modding out operation in class integer (class Modular): Convert to Modular to allow larger moduli * tests/test-modular.C (main): Test Modular and Modular as well; add CLI parameters for that * linbox/field/modular.h (class Modular): Make _k a long long (class FieldAXPY >): Make sure _y uses long long arithmetic (class Modular): Do add and sub in a long to remove restriction on modulus * tests/test-vector-domain.C (main): Use a typedef for the field * linbox/field/modular.h (class Modular): Rename 'k' as '_k' * linbox/field/modular.inl (dotSpecializedDSP): Fix compiler errors (dotSpecializedDD): Ditto * linbox/field/modular.h: Add specializations of DotProductDomain; include modular.inl (class Modular): Make DotProductDomain<...> a friend (Modular::init_two_64): Implement (class Modular): Add field _two_64 (Modular::Modular): Call init_two_64 * linbox/blackbox/sparse-base.inl (setEntry): Use v.first.size () * examples/blackbox/load-symmetrize.C: Ditto * examples/blackbox/load-det.C: Don't explicitly specify row type * linbox/field/vector-domain.h (class VectorDomain): Pull out the dense/dense and dense/sparse parallel dot products into a separate class DotProductDomain, which VectorDomain inherits. Put the field in a virtual base class VectorDomainBase (VectorDomain::field): Implement this * linbox/blackbox/sparse.h (class SparseMatrix0): Make default row type a sparse parallel * examples/blackbox/Makefile.am (EXTRA_PROGRAMS): Add load-symmetrize * linbox/algorithms/blackbox-container-symmetrize.h (class BlackboxContainerSymmetrize): Fix compiler warnings * linbox/blackbox/sparse-base.inl (read): Fix arguments to readPretty (read): Remove unused variables (read): Add dummy return statement * examples/blackbox/load-det.C: Fix order of template arguments; add using namespace std * linbox/blackbox/sparse-base.h (class SparseMatrix0Base): Fix member initializer order 2002-08-10 Bradford Hovinen * linbox/util/vector-factory.h (class StandardBasisFactory): Add specialization for sparse parallel vectors * tests/test-generic.h (testLinearity): Use VD.write (testTranspose): Use VD.write (testFieldAXPY): Use VD.write, commentator.startIteration * tests/test-sparse.C (test*): Use VD.write rather than printVector * linbox/blackbox/sparse-base.inl (write): Implement specialization for sparse parallel vectors * linbox/blackbox/sparse-base.h (class SparseMatrix0ReadWriteHelper): Implement class NoField to avoid having twice as many implementations as otherwise (class SparseMatrix0ReadWriteHelper): Split out writing portions into SparseMatrix0WriteHelper, which is partially specialized for sparse parallel vectors * linbox/blackbox/sparse-base.inl (getEntry, refEntry, setEntry): Implement specializations for sparse parallel vectors * linbox/blackbox/sparse.h: Implement specialization for sparse parallel vectors * linbox/blackbox/sparse.h (class SparseMatrix0): Specialize applyTranspose so that it can handle sparse parallel vectors, without having to specialize the entire class * linbox/algorithms/Makefile.am (include_HEADERS): Add wiedmemann.h * linbox/solutions/Makefile.am (include_HEADERS): Add solve.h 2002-08-09 Bradford Hovinen * tests/Makefile.am (BASIC_TESTS): Remove test-dense-matrix * tests/.cvsignore: Update * linbox/blackbox/Makefile.am (include_HEADERS): Remove dense-matrix.h (include_HEADERS): Change dense-matrix1.[Ch] to dense.inl, dense.h * tests/test-submatrix.C: #include dense.h * tests/test-inverse.C: * linbox/blackbox/dense.h (class DenseMatrix): Make F const 2002-08-09 Dave Saunders * linbox/vector/subvector.h: homage to the indentation police. 2002-08-09 Bradford Hovinen * linbox/blackbox/dense.h (class DenseMatrix): Make _F a const reference (DenseMatrix::DenseMatrix): Make F const * linbox/blackbox/dense.h: * linbox/blackbox/dense.inl: Reindent and remove compiler warnings * tests/test-dense.C: Rename from test-dense-matrix1.C; update header * linbox/algorithms/wiedemann.h (solveWiedemannSingular): Give up if tries exceeds maxTries (solveWiedemannSingular, solveWiedemann): Fix order of arguments to VD.axpy * linbox/solutions/methods.h (struct SolverTraits): Add maxTries * linbox/algorithms/wiedemann.h (solveWiedemann): Output minimal polynomial at LEVEL_UNIMPORTANT * tests/test-solve.C (main): Correct output (testDiagonalSolve): Correct output (testDiagonalSolve): Print output vector too * linbox/util/commentator.C (Commentator::start): Don't output starting activity method if messages at that activity's depth aren't printed (Commentator::stop): Give a different message if this is the greatest depth at which messages are printed * linbox/algorithms/wiedemann.h (solveWiedemann): Use traditional indexing approach; eliminate count (solveWiedemannSingular): Ditto * linbox/solutions/methods.h (struct SolverTraits): Add singular, checkResult, certificate * tests/Makefile.am (BASIC_TESTS): Remove test-solver, add test-solve * linbox/solutions/solve.h: Move solveWiedemann[Singular] to linbox/algorithms/wiedemann.h; solve is now just a wrapper * linbox/solutions/solve.h: Rename from solver.h, tweak indentation, add header (solve): Add argument SolverTraits (solve): Remove randiter (solve): Use P.front () rather than P[0] (solve): Use iterator to go through polynomial (solve): Don't use applyIn and axpyin; allocate another vector (solve): Split into nonsingular case (solveWiedemann): Move Wiedemann-based method here (solveWiedemann): Rename y as b * linbox/solutions/methods.h (struct SolverTraits): Add a constructor that takes a string * linbox/blackbox/inverse.h (apply, applyTranspose): Remove template spec on minpoly call * linbox/solutions/rank.h: Update header * linbox/solutions/trace.h (trace): Reorder template parameters so that only Vector need be specified explicitly * tests/test-moore-penrose.C: Remove compiler warnings * tests/test-det.C: Remove compiler warnings * tests/test-rank.C: Remove compiler warnings * linbox/solutions/rank.h (rank): Make i a size_t * linbox/solutions/det.h (det): Make i a size_t * tests/test-trace.C: Remove compiler warnings * linbox/solutions/trace.h (trace): Remove unused int i * linbox/blackbox/dense-matrix.h (DenseMatrix::DenseMatrix): Make F a const (class DenseMatrix): Make _F a const * tests/test-common.h (multiEvalPoly): Make j a size_t * tests/test-inverse.C: Fix compiler warnings (testHilbertInverse, testIdentityInverse, testVandermondeInverse) (testDiagonalInverse): Make generic wrt vector type; use VectorFactory (main): Add CLI argument -N for number of vectors to apply Vandermonde inverse to * tests/test-diagonal.C: Update header; remove compiler warnings (testIdentityApply): Use commentator.startIteration; make generic wrt vector type; use VectorFactory (testRandomMinpoly): Ditto above * linbox/blackbox/scalar-matrix.h: Remove unused y_end * linbox/field/vector-domain.C (VectorDomain::writeSpecialized): Make idx a size_t * linbox/blackbox/inverse.h (Inverse::apply): Fix order of arguments to axpy (Inverse::applyTranspose): Ditto * linbox/field/vector-domain.C (VectorDomain::axpySpecialized): Fix order of arguments to _F.axpy * linbox/algorithms/blackbox-container-base.h (class BlackboxContainerBase): Add virtual destructor * linbox/algorithms/massey-domain.h (MasseyDomain::massey): Cast to avoid compiler warning * tests/test-common.h (printPolynomial): Make val a size_t * tests/test-minpoly.C (testRandomMinpoly1): Use VD in more places (testRandomMinpoly1): Use startIteration (testRandomMinpoly1): Use a vector factory to build the matrix (testRandomMinpoly): Rename from testRandomMinpoly1 (testRandomMinpoly2): Eliminate this test, as it is now redundant (main): Remove CLI argument -N; construct vector factories (testNilpotentMinpoly): Make i a size_t * tests/test-common.h (applyPoly): Fix order of arguments to VD.axpy (applyPoly): Make generic wrt vector type 2002-08-08 Bradford Hovinen * tests/.cvsignore: Remove test-dense-vector-domain, add test-subiterator, test-param-fuzzy, test-dense-matrix1 * linbox/vector/subvector.h (Subvector::Subvector): Use Iterator () rather than 0 * linbox/field/param-fuzzy.h (class ParamFuzzy): Use std:: for istream and ostream * tests/test-scalar-matrix.C (testScalarApply): Make j a size_t * tests/test-submatrix.C (testRandomApply): Make i, j, k, l size_t's * tests/test-subvector.C (testSubvector): Remove unused variable i, make z a size_t * linbox/vector/const-iterator-type.h: Qualify vector with std:: * tests/test-subiterator.C (test): Use Subiterator::iterator> * linbox/vector/subiterator.h: Reindent * linbox/vector/const-iterator-type.h: Rename from constiteratortype.h; reindent * tests/test-randiter-nonzero.C: Remove #include 2002-08-06 Bradford Hovinen * tests/.cvsignore: Update * examples/blackbox/example.C: Compilation fixes * linbox/blackbox/sparse.h: Rename from sparse0.h * linbox/blackbox/sparse.inl: Rename from sparse0.inl * linbox/blackbox/sparse-base.h: Rename from sparse0-base.h * linbox/blackbox/sparse-base.inl: Rename from sparse0-base.inl * tests/test-sparse.C: Rename from test-sparse0.C 2002-08-05 Bradford Hovinen * Change local variable header so that it actually works 2002-08-05 Bradford Hovinen * linbox/blackbox/Makefile.am (include_HEADERS): Update * tests/Makefile.am (BASIC_TESTS): Remove test-toeplitz and test-lu, since they depends on an optional library (i.e. NTL) (EXTRA_PROGRAMS): Add test-toeplitz, test-lu (BASIC_TESTS): Remove test-stub (test-stub.C is missing) 2002-08-03 Dave Saunders * linbox/field/param-fuzzy.h, linbox/randiter/param-fuzzy.h: update. * tests/test-param-fuzzy.C: Added this test. Passes, but fails thru archetype We need to sharpen our testing. Fields should work thru the arch and there should be exact field tests that fuzzy fields fail. 2002-08-02 Dave Saunders * linbox/field/field-interface.h: empty parent class for fields added for the sake of doc++ * linbox/interfaces.dxx: summary of the various interface concepts. Many have archtypes, but not all * consequential changes to these files: doc/Makefile.am doc/html/Makefile.am linbox/Makefile.am linbox/linbox.dxx linbox/field/Makefile.am linbox/field/archetype.h linbox/field/fields.dxx linbox/field/givaro-gfq.h linbox/field/givaro-zpz.h linbox/field/gmp-rational.h linbox/field/lidia-gfq.h linbox/field/modular.h linbox/field/param-fuzzy.h linbox/field/unparametric.h 2002-08-01 Dave Saunders * linbox/field/Makefile.am: delete ref to the previously removed dense-vector-domain * tests/Makefile.am: add comments * HACKING: mod to indent policy, more "cvs up" info. 2002-07-31 Bradford Hovinen * linbox/blackbox/nag-sparse.h: Tweak header * linbox/blackbox/sparse0-base.h (class SparseMatrix0Base): Remove copyToRow and swapRows, as they are unnecessary 2002-07-31 Dave Saunders * linbox/blackbox/ntl-toeplitz.h: fix indentation * linbox/blackbox/ntl-toeplitz.inl: replace .C and fix indentation 2002-07-30 Saunders and Lobo * linbox/blackbox/ntl-toeplitz.* and it's test. Adding a toeplitz black box. * First version, more general capability is coming. 2002-07-26 Bradford Hovinen * linbox/field/modular.h (class Modular, class FieldAXPY): Add specializations for int element type * linbox/util/commentator.h (Commentator::nullstreambuf::showmanyc): Return std::streamsize 2002-07-29 Rich Seagraves * linbox/blackbox/Makefile.am (include_HEADERS): Added nag-sparse.h 2002-07-26 Bradford Hovinen * linbox/blackbox/sparse0-base.C (readTurner, readGuillaume): Use A.refEntry * linbox/blackbox/sparse0.[Ch]: Move apply, applyTranspose definitions to sparse0.C * tests/test-minpoly.C (testRandomMinpoly1, testRandomMinpoly2): Update as per change below * linbox/blackbox/sparse0-base.C (getEntry): Make the Row reference const (getEntry): Have specialization for sparse associative vectors use find to avoid const issues * tests/test-sparse0.C (testRandomApply1, testRandomApply2) (testRandomApply3, testRandomTranspose, testRandomLinearity): Update as per change below * tests/test-moore-penrose.C (buildRandomSparseMatrix): Update as per change below * linbox/blackbox/sparse0-base.h (class SparseMatrix0Base): Change non-const version of getEntry to refEntry 2002-07-26 Bradford Hovinen * linbox/blackbox/Makefile.am (include_HEADERS): Remove densesubmatrix.H 2002-07-25 Bradford Hovinen * linbox/util/commentator.C (Commentator::stop): Make sure all timings get the same precision * linbox/field/modular.h (clsas Modular): Define k for delayed modding out (class FieldAXPY): Use static modding out procedure; make _y a long long 2002-07-24 Bradford Hovinen * tests/test-vector-domain.C (main): Add calls to test sparse parallel vectors Use VD.write rather than printVector * linbox/util/vector-factory.h (class RandomSparseParVectorFactory): Added this class for random sparse parallel vectors * tests/test-vector-domain.C (testDotProduct, testAddMul) (testSubMul, testAXPY, testCopyEqual): Reset factories when done * linbox/field/vector-domain.C (VectorDomain::addinSpecialized, VectorDomain::subinSpecialized, VectorDomain::axpyinSpecialized): Use a temporary vector and copy when done for the sparse sequence specialization (O(n) vs. O(n^2)) Don't use iterator operator < unless necessary * linbox/field/vector-domain.h (class VectorDomain): Add support for SparseParallelVectorTag (VectorDomain::copySpecialized): Use std::copy for inline implementations, just in case there are two different vector types with the same tag * linbox/vector/vector-traits.h (struct VectorCategories): Add SparseParallelVectorTag (struct VectorTraits): Add specialization for sparse parallel vectors (refSpecialized, constRefSpecialized, ensureDimSpecialized): Add specialization for sparse parallel vectors * tests/test-moore-penrose.C (testRandomApply1): Add commentator activity for constructing the matrix (testRandomApply1): Delete A when done * linbox/field/vector-domain.C (VectorDomain::copySpecialized): Add version optimized for copying to vectors of the same type 2002-07-23 Bradford Hovinen * examples/blackbox/load-det.C: Fix include directive * linbox/field/vector-domain.C (VectorDomain::write): Write out i->second, not *i * tests/test-moore-penrose.C (testRandomApply1): Make this generic wrt vector and row type (buildRandomSparseMatrix): Use VectorDomain and facilities of new SparseMatrix0; make generic wrt row type (testRandomApply1): Indent correct and computed output messages * linbox/field/vector-domain.C (VectorDomain::copySpecialized): Implement version described below * linbox/field/vector-domain.h (class VectorDomain): Add a form of copy that allows copying a subvector into a subvector * linbox/util/commentator.C (MessageClass::fixDefaultConfig): Clear entire list 2002-07-23 Saunders * tests/Makefile.am includes test-subiterator. Advise me if it doesn't work for you. 2002-07-22 Bradford Hovinen * tests/test-minpoly.C: Updated to reflect changes to SparseMatrix0 (testNilpotentMinpoly, testIdentityMinpoly): Use a StandardBasisFactory object * tests/test-sparse0.C: Updated to reflect changes to SparseMatrix0 * linbox/blackbox/sparse0.h: * linbox/blackbox/sparse0-base.h: Refactoring: - Eliminated SparseMatrix0Aux and moved that functionality into Sparse0 - Made SparseMatrix0Base parameterized only on the element type - New read/write implementations for SparseMatrix0Base, supporting multiple formats - Eliminated Gaussian elimination code - Added iterators, including ColOfRowsIterator, RawIterator, and RawIndexIterator - Eliminated operator []; added getEntry; changed put_value to setEntry * linbox/util/commentator.C (Commentator::progress): Enable act->_timer.stop () * linbox/util/timer.C (stop, start): Use _start_t * linbox/util/timer.h (class BaseTimer): Added _start_t * linbox/vector/subvector.h (struct VectorTraits): Use Subvector to get value_type 2002-07-18 Bradford Hovinen * linbox/vector/vector-traits.h: Add #include * linbox/util/commentator.h (class Commentator): Add form of isPrinted that does not require activity depth; add isNullStream * macros/*-check.m4: Don't add a -I and -L arguments if they refer only to /usr or to /usr/local * macros/*-check.m4: Add rules for cross-compiling * macros/*-check.m4: Tweak argument documentation * macros/gmp-check.m4: Remove note that GMP installation is optional 2002-07-12 Bradford Hovinen * linbox/field/ntl-RR.h (LinBox): Ditto * linbox/field/ntl-ZZ_p.h (LinBox): Ditto * linbox/field/ntl-zz_p.h (LinBox): Ditto * linbox/blackbox/submatrix.h (LinBox): Ditto * linbox/blackbox/hilbert.h (LinBox): Ditto * linbox/blackbox/diagonal.h (LinBox): Ditto * linbox/blackbox/scalar-matrix.h (LinBox): Ditto * tests/test-scalar-matrix.C: Update as per C++ standard * linbox/solutions/methods.h (struct SolverTraits): First stab at this structure * linbox/algorithms/blackbox-container.h (LinBox): Ditto * linbox/vector/reverse.h (LinBox): Ditto * linbox/vector/subvector.h: Ditto * linbox/vector/subiterator.h (LinBox): Ditto * linbox/field/unparametric.h (LinBox): Update as per C++ standard * linbox/util/commentator.C (Commentator::updateActivityReport): Make i signed * linbox/util/error.C: Ditto * linbox/util/timer.C: Updates to C++ standard; place everything inside LinBox namespace * linbox/util/gmp++/gmp++_int_misc.C: Ditto * linbox/util/gmp++/gmp++_int_io.C: Update header file names Add using namespace std Updates to conform to C++ standard * linbox/util/gmp++/gmp++_int_cstor.C: s/iostream.h/iostream/ * linbox/vector/vector-traits.h (struct SparseSequenceVectorPairLessThan): Use std:: namespace qualifier (class CompareSparseEntries): Use std:: namespace qualifier (refSpecialized): Use std:: namespace qualifier * linbox/util/error.h: s/iostream.h/iostream/ Use std:: namespace qualifier for iostream * linbox/field/envelope.h (class FieldEnvelope): Ditto * linbox/field/archetype.h (class FieldArchetype): Ditto * linbox/field/abstract.h (class FieldAbstract): Use std:: namespace qualifier for ostream/istream * gmp++/gmp++_int.inl (Integer::random): Eliminate default from definition * gmp++/gmp++_int.h: Use namespace qualifier std:: for parts of the STL; update header names in accordance with C++ standard * linbox/util/timer.h: s/iostream.h/iostream/ as per updated C++ standard; put everything inside the LinBox namespace; use std::ostream 2002-07-08 Bradford Hovinen * linbox/solutions/methods.h: Put everything inside the LinBox namespace * linbox/solutions/rank.h (rank): Update (rank): Use VectorWrapper::ensureDim; add commentator calls * linbox/solutions/det.h (det): Update * linbox/solutions/minpoly.h (minpoly): Update * linbox/solutions/methods.h: Changed the name _DEFAULT_EarlyTerm_THRESHOLD_ to the more standard-consistent DEFAULT_EARLY_TERM_THRESHOLD; changed the name Early_Term_Threshold to earlyTermThreshold, also in keeping with the standard. 2002-07-05 Bradford Hovinen * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::applyTranspose): Avoid use of operator []; tweak performance with iterators * linbox/util/field-axpy.h (class FieldAXPY): Add assignment operator; make _F a real copy and not a reference * linbox/field/modular.h (FieldAXPY::FieldAXPY): Add copy constructor; use direct assignment for 0 (class FieldAXPY): Make _F a real copy; add assignment operator * linbox/util/field-axpy.h (class FieldAXPY): Add copy constructor * linbox/blackbox/sparse0-base.h (SparseMatrix0Base::prettyPrint): Make i, j size_t's * linbox/blackbox/sparse0-aux.h (class SparseMatrix0Aux): Add _faxpy (SparseMatrix0Aux::applyTranspose): Use _faxpy vector to enable delayed modding out 2002-07-02 Bradford Hovinen * linbox/field/modular.h (class FieldAXPY): Add template <> * examples/blackbox/.cvsignore: Update * tests/.cvsignore: Update * tests/test-moore-penrose.C (testIdentityApply): Make display of vectors LEVEL_UNIMPORTANT (testRandomApply1): Ditto (testRandomApply1): Put the construction of Adagger inside a commentator activity; change "Computing" to "Applying" for the activity surrounding the application * HACKING: Update instructions for adding a test * tests/Makefile.am (BASIC_TESTS): Move all mandatory tests here (TESTS): Include BASIC_TESTS (EXTRA_PROGRAMS): Include BASIC_TESTS (noinst_PROGRAMS): Remove * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::next): Make i a size_t * linbox/field/vector-domain.C (VectorDomain::mulSpecialized): Eliminate unused j (VectorDomain::addinSpecialized, VectorDomain::subinSpecialized, VectorDomain::axpyinSpecialized): Make i a size_t (VectorDomain::copySpecialized, VectorDomain::areEqualSpecialized): Make idx a size_t * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::RandomSparseSeqVectorFactory): Reorder initializers (class VectorFactory): Add virtual destructor * tests/test-vector-domain.C (testSubMul): Remove unused i, j (testAXPY): Ditto * linbox/blackbox/inverse.h (Inverse::apply): Eliminate unused j * tests/test-vector-domain.C (testCopyEqual, testAddMul): Remove unused i, j (testDotProduct): Make j a size_t * linbox/util/vector-factory.h (StandardBasisFactory::next): Make idx a size_t * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::applyTranspose): Initialize y to all zeros first * tests/test-sparse0.C (testRandomApply3, testRandomApply2, testRandomApply1): Remove unused VD * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::next): Don't die if skip is 0; just increment i * tests/test-generic.h (testTranspose, testLinearity): Remove unused i, j 2002-07-01 Bradford Hovinen * linbox/field/vector-domain.C (dotSpecialized): Don't initialize res; it's not necessary here * linbox/algorithms/blackbox-container-base.h (class BlackboxContainerBase): Tweak indentation * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::applyTranspose): Use linbox_check and _F.axpyin * linbox/algorithms/Makefile.am (include_HEADERS): Add blackbox-container-symmetrize.h * linbox/field/modular.h (FieldAXPY::get, FieldAXPY::assign): inline these * linbox/util/field-axpy.h (FieldAXPY::get, FieldAXPY::assign): inline these * linbox/field/vector-domain.C (VectorDomain::dotSpecialized): inline this * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::apply): Eliminate Element temp * linbox/util/commentator.C (Commentator::progress): Show elapsed time (Commentator::progress): Get a pointer to the top activity first * linbox/algorithms/massey-domain.h (MasseyDomain::massey): Use COMMOD for progress reports * linbox/util/commentator.C (Commentator::updateActivityReport): Use a strstream and update _last_line_len (Commentator::finishActivityReport): Use _last_line_len (Commentator::setReportStream): Disable brief report if we are outputing to the same stream it is * linbox/util/commentator.h (class Commentator): Add _last_line_len * linbox/util/commentator.C (Commentator::stop): Increase output precision; make sure output is nonnegative * examples/blackbox/Makefile.am (EXTRA_PROGRAMS): Add load-det * linbox/field/givaro-zpz.h: Reindent * examples/run/Makefile.am: Kill _DEPENDENCIES lines * examples/integers/Makefile.am: Kill _DEPENDENCIES lines * examples/fields/Makefile.am: Kill _DEPENDENCIES lines * examples/blackbox/Makefile.am: Kill _DEPENDENCIES lines * examples/Makefile.am: Kill _DEPENDENCIES lines * HACKING: Remove note about _DEPENDENCIES lines * tests/Makefile.am: Get rid of _DEPENDENCIES lines; turns out they aren't necessary * linbox/util/commentator.C (Commentator::stop): Modified report format; display all three timings 2002-06-28 Bradford Hovinen * linbox/util/commentator.C (Commentator::updateActivityReport): Use floor (percent + 0.5) rather than round (percent) * linbox/util/commentator.h (Commentator): Redefine Commentator to CommentatorDisabled when disabled; define the existing commentator regardless of whether it is disabled -- the new #defines will deflect any access * tests/test-minpoly.C (main): Re-enable commentator * linbox/util/commentator.C (Commentator::Commentator): Set default max depth for BRIEF_REPORT to 2; use macros for detail levels (MessageClass::fixDefaultConfig): Make sure j is not erased from the list before insertion * gmp++/gmp++_int.h: Add short, unsigned short implicit conversions 2002-06-27 Bradford Hovinen * linbox/util/commentator.C (Commentator::updateActivityReport): Use round (percent) rather than setting precision (MessageClass::checkConfig): Use depth < (*i).first (MessageClass::fixDefaultConfig): Erase everything after _max_depth and everything before _max_depth that is not more restrictive * tests/test-vector-domain.C (testAXPY): Update use of VD.axpy * tests/test-common.h (applyPoly): Update use of VD.axpy * tests/test-generic.h (testLinearity): Update use of VD.axpy * linbox/blackbox/inverse.h (Inverse::apply, Inverse::applyTranspose): Update * linbox/field/vector-domain.h (class VectorDomain): Change order of parameters to match FieldArchetype::axpy 2002-06-26 Bradford Hovinen * tests/test-minpoly.C: Report minpoly degree; tweak report parameters * linbox/algorithms/blackbox-container.h (BlackboxContainer::BlackboxContainer): Initialize _applyTime and _dotTime if INCLUDE_TIMING is defined 2002-06-26 Bradford Hovinen * linbox/field/vector-domain.C (VectorDomain::addinSpecialized, VectorDomain::subinSpecialized): Use i->first < j->first * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::next): Add check that skip > 0 * linbox/field/vector-domain.C (VectorDomain::axpySpecialized): Fix order of arguments to F.axpy * tests/test-generic.h (testLinearity): Fix variable names to be more descriptive * linbox/util/vector-factory.h (LinBox): Use v[] rather than v.insert * tests/test-generic.h (testDenseConsistency): Eliminate this test (testLinearity): Fix formulae * linbox/solutions/trace.h (trace): Make sure v has correct dimension * tests/test-inverse.C (testRandomTranspose): Update according to changes in testTranspose * tests/test-diagonal.C (testRandomTranspose): Update according to changes in testTranspose * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::SparseMatrix0Aux): Initialize _VD for sparse associative specialization * tests/test-generic.h (testTranspose): Use VectorFactory, make this generic wrt vector type * tests/test-sparse0.C (testRandomTranspose, testRandomLinearity): New tests (main): Call tests on all combinations of vector types * linbox/util/vector-factory.h (StandardBasisFactory::next): Initialize the whole vector for the dense case * linbox/blackbox/sparse0-base.h (SparseMatrix0Base::put_value, SparseMatrix0Base::operator[]): Use linbox_check * tests/test-sparse0.C (testRandomApply1, testRandomApply2, testRandomApply3): Make these generic wrt vector and row type * */*.[Ch]: Change top Emacs identifier to mode: C++ so that it does the correct thing with templates and so on * linbox/util/vector-factory.h (class RandomDenseVectorFactory): Use RandIter, not Field::RandIter for _r 2002-06-25 Bradford Hovinen * tests/test-sparse0.C (testIdentityApply): Use VectorFactory (testNilpotentApply): Use VectorFactory * linbox/blackbox/sparse0-aux.h (class SparseMatrix0Aux): Use VectorDomain for the sparse associative specialization; replace Field1 with VectorDomain (SparseMatrix0Aux::apply): Use VectorDomain::dot for all specializations (class SparseMatrix0Aux): Restore compilation of sparse associative specialization (SparseMatrix0Aux::apply): Use iterator rather than integer * tests/Makefile.am (TESTS): Add test-subvector * linbox/algorithms/blackbox-container.h (class BlackboxContainer): Add optional timing facilities, enabled with INCLUDE_TIMING * linbox/algorithms/massey-domain.h (class MasseyDomain): Add optional timing facilities, enabled with INCLUDE_TIMING * linbox/vector/Makefile.am (include_HEADERS): Add subvector.h, subiterator.h, reverse.h * linbox/vector/subvector.h: Reindent; fix headers * linbox/algorithms/massey-domain.h (class MasseyDomain): Replace _field with _F; declare VectorDomain _VD; use const long rather than #define when possible * linbox/algorithms/blackbox-container-base.h (class BlackboxContainerBase): Add member VectorDomain _VD; rename _field to _F (for consistency); eliminate operators; align members (BlackboxContainerBase::size): Make this const * linbox/algorithms/blackbox-container.h (BlackboxContainer::_launch): Use _VD.dot rather than home-cooked dot product (class BlackboxContainer): Make RandIter a template parameter, defaulted to Field::RandIter * linbox/algorithms/Makefile.am (include_HEADERS): Add blackbox-container-symmetric.h * linbox/solutions/trace.h (trace): Use factory.j () - 1 2002-06-24 Bradford Hovinen * tests/test-vector-domain.C (main): Reset factory 5 before sparse sequence/sparse associative dot product; factory 6 before sparse associative add/mul test (testDotProduct): Add timing * linbox/util/vector-factory.h (VectorFactory): Fix output of j () * HACKING: Update with consolidated ChangeLogs * linbox/vector/vector-traits.h (refSpecialized, cosntRefSpecialized): Check that size is nonzero before conducting binary search; check that return iterator is not past-the-end 2002-06-21 Bradford Hovinen * examples/integers/.cvsignore: Update * examples/.cvsignore: Update 2002-06-21 Bradford Hovinen * linbox/field/vector-domain.C (VectorDomain::axpyinSpecialized): Don't use an iterator here, since we invalidate iterators by calling insert * linbox/field/modular.h (Modular::neg): Make sure -0 = 0 * linbox/field/vector-domain.C (VectorDomain::axpySpecialized): Use _F.axpy when possible; avoid use of temporaries (VectorDomain::addSpecialized, VectorDomain::addinSpecialized, VectorDomain::subSpecialized, VectorDomain::subinSpecialized, VectorDomain::isZeroSpecialized, VectorDomain::areEqualSpecialized, VectorDomain::convertSpecialized, VectorDomain::readSpecialized, VectorDomain::writeSpecialized, VectorDomain::copySpecialized): Implement (VectorDomain::mulSpecialized, VectorDomain::mulinSpecialized): Implement specialization for sparse associative vectors * linbox/randiter/nonzero.h (class NonzeroRandIter): Set default RandIter to Field::RandIter * linbox/util/vector-factory.h (class RandomSparseSeqVectorFactory, class RandomSparseMapVectorFactory): Use NonzeroRandIter * linbox/vector/vector-traits.h (class CompareSparseEntries): Implement (refSpecialized, constRefSpecialized): Use lower_bound * tests/test-generic.h (testLinearity): New test * tests/test-vector-domain.C (testAddMul, testSubMul, testCopyEqual): New tests; call these from main * tests/test-vector-domain.C (testAXPY): Use VD.isZero * tests/.cvsignore: Update 2002-06-20 Bradford Hovinen * examples/Makefile.am (EXTRA_PROGRAMS): Add mmZZ_pE * examples/integers/Makefile.am (EXTRA_PROGRAMS): Don't compile programs by default 2002-06-20 Bradford Hovinen * examples/blackbox/Makefile.am (EXTRA_PROGRAMS): Don't compile examples by default * examples/fields/Makefile.am (EXTRA_PROGRAMS): Don't compile programs by default * linbox/blackbox/dense-matrix1.h (DenseMatrix::Row::Row): Fix typos in default initialization * linbox/blackbox/dense-matrix1.C (DenseMatrix::write): Remove default for parameter (DenseMatrix::ColOfRowsIterator::ColOfRowsIterator): Remove default for first parameter (DenseMatrix::RowOfColsIterator::RowOfColsIterator): Remove default for first parameter (class DenseMatrix::RowOfColsIterator): Add constructor with no parameters (class DenseMatrix::ColOfRowsIterator): Add constructor with no parameters * linbox/field/Makefile.am (EXTRA_DIST): Add EXTRA_HEADERS 2002-06-20 Pascal Giorgi * linbox/field/givaro-gfq.h: Replace cast according to gmp++ . 2002-06-20 Bradford Hovinen * linbox/randiter/Makefile.am (include_HEADERS): Add nonzero.h * linbox/util/vector-factory.h (class RandomDenseVectorFactory, class RandomSparseSeqVectorFactory, class RandomSparseMapVectorFactory): Add constructor specifying a particular random iterator 2002-06-20 Dave Saunders * insert LinBoxSrcOnly flag for all-source compilation (fixed) 2002-06-20 Bradford Hovinen * macros/ntl-check.m4 (AC_TRY_LINK): Don't include iostream -- it was causing compiler trouble wrt autoconf (NTL_HEADERS_FIELD): Add ntl-ZZ_pE.h * tests/Makefile.am (TESTS): Add test-randiter-nonzero (test_diagonal_DEPENDENCIES): Remove duplicate definition 2002-06-19 Bradford Hovinen * configure.in (AC_OUTPUT): Remove linbox/iterators/Makefile, remove examples/run/Makefile 2002-06-19 Bradford Hovinen * examples/Makefile.am (SUBDIRS): Add integers * examples/fields/Makefile.am (ex_fields_wrapper_SOURCES): Don't comment out this line * linbox/util/gmp++/Makefile.am (INCLUDES): Add -I$(top_srcdir) * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::next): Use simpler formulas ala Knuth (class RandomSparseSeqVectorFactory): Remove extraneous variables * tests/test-sum.C (main): Use GF(101) by default (testZeroApply): Use VD.mul rather than VD.axpy 2002-06-18 Bradford Hovinen * Makefile.am (SUBDIRS): Add gmp++ * configure.in (AC_OUTPUT): s/integer/gmp++/ 2002-06-18 Bradford Hovinen * examples/blackbox/ex-mat0.C: Add using namespace std * linbox/integer.h: Use GMP++ 2002-06-18 Zhendong Wan * dense-matrix1.h dense-matrix1.C * FieldBASL.h FieldBLAS.C * linbox/field/ntl-ZZ_pE.h 2002-06-18 Bradford Hovinen * linbox/util/vector-factory.h (RandomSparseMapVectorFactory::next): Use a simpler mechanism for constructing vectors * linbox/util/gmp++/gmp++_int.h: Define GMPXX_PREFIX if not already done * linbox/util/gmp++/*.[Ch]: Prefix #include lines with GMPXX_PREFIX * linbox/util/Makefile.am (SUBDIRS): s/integer/gmp++/ (libutil_la_LIBADD): s/integer/gmpxx/ 2002-06-14 Bradford Hovinen * examples/blackbox/.cvsignore: Update 2002-06-14 Bradford Hovinen * linbox/field/vector-domain.C (VectorDomain::dotSpecialized): Make sure not to accumulate if j is at v2.end. (VectorDomain::dotSpecialized): Add specialization for sparse associative/sparse associative dot product * linbox/field/modular.h (class ModularBase, class Modular): Replace Modular[Base]::Modular[Base] (Element) with unsigned long version 2002-06-14 zhenddong wan * linbox/vector/subvector.h: fix the const_iterator problem 2002-06-14 Bradford Hovinen * tests/test-vector-domain.C (main): Add call to test sparse associative/sparse associative dot product 2002-06-13 Bradford Hovinen * .cvsignore: Remove config.h[.in] and add linbox-config.h[.in] * configure.in: Change AM_CONFIG_HEADER to linbox-config.h * */*.C: Change #include "config.h" to #include "linbox-config.h" * Makefile.am (include_HEADERS): Add linbox-config.h * acconfig.h: Add GMP_VERSION_4 2002-06-13 Bradford Hovinen * examples/blackbox/.cvsignore: Update * linbox/integer.h: Only use extern "C" if GMP_VERSION_4 is not set * linbox/vector/vector-traits.h: Add #include linbox/field/archetype.h * macros/gmp-check.m4: Added check for GMP 4.0 or greater * tests/test-vector-domain.C (main): Invoke testDotProduct for sparse sequence/sparse sequence vectors * tests/Makefile.am: Commented out subiterator and solveNonsingular as the former has compilation problems and the latter was not added properly 2002-06-11 Dave Saunders * linbox/field/ntl-ZZ_p.h: include sys/time.h 2002-06-11 Dave Saunders * tests/test-subiterator.C: new test of vector/subiterator.h 2002-06-10 Dave Saunders * linbox/vector/subiterator.h, subvector.h: subvector now constructs from subiterators, not from underlying vector. This avoids copy and reference problems with underlying vector. 2002-06-07 Bradford Hovinen * linbox/field/vector-domain.C (VectorDomain::axpySpecialized): Implement specialization for sparse associative vectors (VectorDomain::axpyinSpecialized): Implement specialization for sparse associative vectors (VectorDomain::dotSpecialized): Implement specialization for sparse sequence/sparse sequence and sparse associative/sparse sequence vectors 2002-06-07 Bradford Hovinen * tests/test-vector-domain.C (main): Add call to test sparse associative vector axpy 2002-06-06 Bradford Hovinen * linbox/field/vector-domain.C (VectorDomain::dotSpecialized): Implement specialization for sparse associative/dense dot product * linbox/field/vector-domain.h (class VectorDomain): Add return statements 2002-06-06 Bradford Hovinen * linbox/util/vector-factory.h (RandomSparseSeqVectorFactory::RandomSparseSeqVectorFactory): Make sure k < n (RandomSparseSeqVectorFactory::next): Tweak formulae (RandomSparseMapVectorFactory::next): Tweak formulae the same way as above * tests/test-vector-domain.C (testAXPY): Rename from testDenseAXPY. Make this generic with respect to the vector type being tested (main): Update according to the above * tests/.cvsignore: Update * tests/test-vector-domain.C (main): Add call to test sparse associative dot product 2002-06-05 Bradford Hovinen * tests/test-vector-domain.C (testDotProduct): Rename from testDenseDotProduct. Make this generic with respect to the vector type being tested 2002-06-04 Bradford Hovinen * .cvsignore: Update 2002-06-04 Bradford Hovinen * examples/run/.cvsignore: Update 2002-06-04 Bradford Hovinen * linbox/blackbox/inverse.h (class Inverse): Update use of VectorDomain * linbox/blackbox/sparse0-aux.h (class SparseMatrix0Aux): Update use of VectorDomain * linbox/blackbox/dense-matrix.h (class DenseMatrix): Update use of VectorDomain 2002-06-04 Bradford Hovinen * linbox/blackbox/moore-penrose.h (class MoorePenrose): s/_B/_B1/ since _B seems to be a macro of some type on Solaris 2002-06-04 Bradford Hovinen * linbox/field/vector-domain.h (class VectorDomainBase, class VectorDomain): Merge these classes together (class VectorDomain): Parameterize methods on the vector types rather than parameterizing the whole class. Add methods * Specialized for template specialization * linbox/field/vector-domain.C: Update according to changes in vector-domain.h 2002-06-04 Dave Saunders * linbox/vector/subvector.h: tweak to have reference semantics to underlying vect. * tests/test-subvector.C: new test for check adapted from Will's test-subvector.cpp * tests/Makefile.am: new target test-subvector, part of check. 2002-06-04 Bradford Hovinen * tests/test-moore-penrose.C (testRandomApply1): s/VectorDomainBase/VectorDomain/ and update * tests/test-common.h (applyPoly): Update use of VectorDomain * tests/test-generic.h (testDenseConsisntency): Update use of VectorDomain (testTranspose): Update use of VectorDomain 2002-05-31 Bradford Hovinen * macros/gmp-check.m4 (min_gmp_version): s/{gmp_prefix}/${gmp_prefix}/ 2002-05-28 Bradford Hovinen * configure.in: AC_OUTPUT linbox-config * Makefile.am (bin_SCRIPTS): Add linbox-config 2002-05-28 Bradford Hovinen * linbox/blackbox/Makefile.am: Add sum.h 2002-05-25 Bradford Hovinen * linbox/blackbox/compose.h (Compose::Compose): Add call to VectorWrapper::ensureDim (class Compose): Make _z mutable 2002-05-25 Bradford Hovinen * tests/Makefile.am (TESTS): Reorder tests in approximate order of dependence (TESTS): Add test-sum 2002-05-19 Bradford Hovinen * linbox/blackbox/sparse0-aux.h (SparseMatrix0Aux::applyTranspose): Don't construct a new vector for y; just fill in existing values * linbox/blackbox/inverse.h (class Inverse): Add _transposeMinpoly for the minimal polynomial of the transpose of the matrix (Inverse::Inverse): Don't construct minimal polynomials; just clear them (Inverse::apply, Inverse::applyTranspose): Construct minimal polynomials if needed * linbox/blackbox/moore-penrose.h (MoorePenrose::MoorePenrose): Reverse order of arguments for call to Submatrix (MoorePenrose::MoorePenrose): Construct _B too * linbox/blackbox/compose.h (Compose::Compose): Don't set _z's size (Compose::apply, Compose::applyTranspose): use VectorWrapper::ensureDim rather than setting _z's size * linbox/blackbox/inverse.h (Inverse::apply, Inverse::applyTranspose): Don't resize the output vector (Inverse::Inverse): Check that the input matrix is square (Inverse::Inverse): Use VectorWrapper::ensureDim rather than _z.resize * linbox/blackbox/Makefile.am (include_HEADERS): Added moore-penrose.h 2002-05-19 Bradford Hovinen * linbox/field/modular.h (class FieldAXPY): Update get () form; remove obsolete forms * linbox/field/vector-domain.C (VectorDomain::dotprod): Fix use of FieldAXPY::get * linbox/solutions/trace.h (trace): Use constRef * linbox/util/field-axpy.h (class FieldAXPY): Remove obsolete get form * linbox/util/vector-factory.h (class VectorFactory): Add interface n(), which returns the dimension of the space from which vectors are being generated * linbox/vector/vector-traits.h (class VectorWrapper): Add method ensureDim (namespace VectorWrapper): Convert this to a namespace and use function specialization * tests/test-moore-penrose.C (main): Switch to field GF(2147483647) by default * tests/test-generic.h (testTranspose): Rename from testTranpose (testTranspose): Use commentator.startIteration * tests/test-moore-penrose.C (testIdentityApply): Ensure w has space for result (buildRandomSparseMatrix): Implement (testRandomApply1): New test * tests/test-trace.C (testDiagonalTrace): Use constRef 2002-05-18 Bradford Hovinen * configure.in: Make disabling shared libraries the default 2002-05-18 Bradford Hovinen * linbox/util/vector-factory.h: Refactor: Create one class StandardBasisFactory, parameterized by vector type, with specializations for dense, sparse map, and sparse associative vectors * linbox/util/commentator.C (Commentator::setMaxDepth, Commentator::setMaxDetailLevel): Implement * linbox/vector/vector-traits.h (class VectorWrapper): Implement 2002-05-17 Bradford Hovinen * examples/.cvsignore: Update 2002-05-17 Bradford Hovinen * linbox/blackbox/submatrix.h (class Submatrix): Add Trait to template parameters and specialize for dense vectors (Submatrix::Submatrix): Check that the row and column dimensions given are valid * linbox/blackbox/sparse0-aux.h: Backed out revision 1.6 (SparseMatrix0Aux::apply): Restore use of _VD.dotprod * linbox/field/vector-domain.h (LinBox): Added specialization for SparseSequence, SparseSequence type * linbox/field/vector-domain.C: Update as per changes in vector-domain.h (VectorDomainBase::mul, VectorDomainBase::mulin): Don't resize and don't invalidate iterators * linbox/field/vector-domain.h (class VectorDomainBase): New class. Pull out all functions from VectorDomain that only need one vector type. * linbox/util/vector-factory.h (RandomDenseVectorFactory::next): Resize input vector * linbox/util/debug.h (PreconditionFailed::PreconditionFailed): Put out a couple of newlines before printing the error message * linbox/util/vector-factory.h (class VectorFactory): Add method reset () * linbox/util/commentator.C (Commentator::startIteration): Implement Include strstream and not cstdio * linbox/util/commentator.h (class Commentator): Add startIteration * macros/ntl-check.m4 (EX_FIELDS_NTL): Define * tests/Makefile.am (test_moore_penrose_SOURCES): New test * tests/test-submatrix.C: Don't include fstream or cstdio (testRandomApply): Use commentator.startIteration rather than forming a new string and calling start (testRandomApply): Put the declaration for report inside the loop and remove the call to indent (testRandomApply): Update report output (main): Don't construct factory2 * tests/.cvsignore: Update 2002-05-14 William J. Turner * linbox/field/archetype.h, envelope.h: changed randIter to RandIter. 2002-05-14 William J. Turner * linbox/randiter/modular.h: Seeded random number generator in constructor. _seed was never used before. 2002-05-07 William J. Turner * linbox/field/ntl-zz_p.h, ntl-ZZ_p.h: modified random generator constructor and creating functions to use NTL functions. 2002-05-07 William J. Turner * linbox/randiter/unparametric.h: static cast added to constructor 2002-04-26 Pascal Giorgi * configure.in, acconfig.h: updating to allow Lidia Library 2002-04-26 Pascal Giorgi * linbox/field/lidia-gfq.h, lidia.h: adding wrapper of extensions fields for Lidia * linbox/field/givaro-gfq.h, givaro-zpz.h: To use these wrappers you need to get a modified version of givaro. You can find these version at this address : http://www.ens-lyon.fr/~pgiorgi/software.html version 3.0.1. * linbox/field/givaro-gfq.h: adding wrapper of extensions fields for Givaro * linbox/field/givaro.h: adding givaro-gfq.h * linbox/field/Makefile.am: adding givaro-gfq.h * linbox/randiter/lidia-gfq.h: adding randiter for lidia gfq field * linbox/randiter/lidia.h: file for all randiter of lidia library * linbox/randiter/Makefile.am: adding the header of Lidia and an EXTRA_DIST variable * macros/givaro-check.m4: adding headers of givaro fields wrappers and the test test-givaro-zpz.h * macros/lidia-check.m4: creating for the library LiDIA * macros/Makefile.am: adding lidia-check.m4 to the EXTRA_DIST * tests/test-givaro-zpz.C: test for prime finites fields of givaro using all type of zpz fields of givaro and an extension field of degree 1 for gfq. * tests/test-lidia-gfq.C: test for Lidia Gfq field. But the Gfq field is tested as a prime field (the extension degree is 1) * tests/test-generic.h: Put in comment the line 56 which is inconsistant. Also make the test for the init/convert function generic for every fields (finite and inifinite fields). 2002-04-25 Zhendong Wan * tests/test-dense-vector-domain.C: test for dense vector domain. 2002-04-24 Pascal Giorgi * linbox/givaro.h: include file for all Givaro wrappers * linbox/lidia.h: include file for all Lidia wrappers * linbox/Makefile.am: adding file givaro.h and lidia.h and adding all Lidia header base 2002-04-24 Pascal Giorgi * linbox/field/givaro-zpz.h, givaro.h: Adding wrappers of primes fields for givaro and his file givaro.h associated. NB: this wrappers is template class which wrapps three sorts of givaro fields. For more information see the file itself. * linbox/field/Makefile.am: adding givaro fields wrapper 2002-04-18 William J. Turner * linbox/vector/subvector.h, subiterator.h: New wrappers for subvector of dense vector. 2002-04-18 William J. Turner * tests/test-subvector.cpp: New partial test program for subvector wrapper class. This needs a lot of work, and is not in the makefile yet. 2002-04-17 Dave Saunders * tweak identity case to copy 2002-04-13 Bradford Hovinen * linbox/field/modular.h (FieldAXPY >): Add form of get where the element in which to store result is also passed 2002-04-13 Bradford Hovinen * linbox/util/Makefile.am (include_HEADERS): Added vector-factory.h * linbox/util/field-axpy.h (class FieldAXPY): Add form of get where the place in which to store the result is passed * tests/test-vector-domain.C (testDenseDotProduct): Convert this to use VectorFactories 2002-04-12 Bradford Hovinen * s/element/Element/ everywhere except in comments (I hope!) * Add a file dummy.C to fool libtool into actually building liblinbox.la * Move debug.[Ch] and error.[Ch] to linbox/util 2002-04-12 William J. Turner * linbox/blackbox/sparse0-aux.h: Made dense vector apply not invalidate iterators 2002-04-12 Bradford Hovinen * linbox/util/commentator.h (class Commentator): Added compatibility layer for Jean-Guillaume's code (class Commentator): Move cnull above protected section to fix crashes on DISABLE_COMMENTATOR * linbox/util/commentator.h: Added null commentator * linbox/util/Makefile.am (include_HEADERS): Put debug.h, error.h here (libutil_la_SOURCES): Put error.C, debug.C here * macros/givaro-check.m4: Fix definition of GIVARO_HEADERS_*, GIVARO_TESTS * tests/test-unparametric-field.C: Rename from test-unparametric-field.cpp 2002-04-11 Bradford Hovinen * Makefile.am: Remove EXTRA_DIST, since both of these files are for CVS developers only 2002-04-11 Bradford Hovinen * linbox/field/modular.h (FieldAXPY >::accumulate): Use -t for overflow check (FieldAXPY >::accumulate): Cast to unsigned when modding out to avoid sign flip problem (FieldAXPY >::get): Cast to unsigned when modding out * tests/test-modular.C (main): Call testFieldAXPY * tests/test-generic.h (testField): Make title const (testFieldAXPY): Add this test * tests/test-diagonal.C (testRandomTranspose): Report diagonal vector used as input * tests/test-scalar-matrix.C: #include "modular.h" (main): Use integers mod 2147483647; update to use Modular interface * tests/.cvsignore: Add test-submatrix * tests/test-submatrix.C (main): Fix banner string * tests/test-diagonal.C (main): Enable printing of detailed messages * tests/test-unparametric-field.cpp (main): * tests/test-modular.C (main): * tests/test-inverse.C (main): * tests/test-minpoly.C (main): * tests/test-diagonal.C (main): * tests/test-rank.C (main): Use GF(2147483647) by default; fix relevant documentation * tests/test-sparse0.C (main): Fix documentation string for default modulus 2002-04-10 Bradford Hovinen * examples/example.C: Update with new Modular signature 2002-04-10 Dave Saunders * linbox/blackbox/scalar-matrix.h: New (simple) black box - sparse vector part not checked. 2002-04-10 Bradford Hovinen * macros/ntl-check.m4: Set NTL_TESTS, NTL_HEADERS_* to empty strings by default and to real data if NTL was found. Call AC_SUBST in all cases Fix check for whether NTL prefix was set * tests/.cvsignore: Add test-unparametric-field; s/test-sparse-matrix/test-sparse0/ 2002-04-10 Dave Saunders * tests/test-scalar-matrix.C: New test for new blackbox. 2002-04-08 Bradford Hovinen * linbox/util/commentator.h (class Commentator): Use std:: namespace for ofstream (class Commentator): Add std:: specifiers for nullstreambuf declarations and cnull 2002-04-08 Pascal Giorgi * macros/gmp-check.m4: Keep the current LD_LIBRARY_PATH * tests/test-generic.h: WARNING: The test of a field is not generic. The test of init and convert functions use a fixed number 49193295. So the test failed if the characteristic is less than this number. 2002-04-05 William J. Turner * linbox/Makefile.am: Install NTL and Givaro wrapper headers only if libraries are installed. 2002-04-05 William J. Turner * linbox/blackbox/Makefile.am: Only install NTL and Givaro wrapper header files if libraries are installed. * linbox/blackbox/sparse0-aux.h: Fixed apply and applyTranspose for sparse vectors. * macros/ntl-check.m4, givaro-check.m4: Only run tests of NTL and Givaro wrappers, and install header files, if libraries are installed. * tests/test-common.h: Fix printVector to print correct number of zeros for sparse sequence vectors. Made functions for testing equality of two vectors of the same type and to test if a vector is the zero vector. These may need some work still. * tests/Makefile.am: Only run tests of NTL and Givaro wrappers if libraries are installed. * tests/test-sparse0.C: Attempted to convert test functions to be generic for the Row and Vector types. These still need more work to be complete. In particular, there still needs to be a function to create a vector with no zero elements. 2002-04-04 William J. Turner * configure.in: removed requirement of givaro 2002-04-04 William J. Turner * linbox/ntl.h: include file for all NTL wrappers. * linbox/blackbox/archetype.h: Added virtual destructor to avoid warning. Removed resize() from apply and applyTranspose. * linbox/blackbox/sparse0-base.h: Fixed comparison between signed and unsigned integers, accessor function to field. * linbox/blackbox/sparse0-aux.h: Fixed constructor from SparseMatrix0Base. 2002-04-04 William J. Turner * linbox/field/Makefile.am: Install NTL and Givaro wrapper header files only if libraries are installed. * linbox/field/ntl.h, ntl-RR.h, ntl-ZZ_p.h, ntl-zz_p.h: Broke NTL field wrappers into separate files. 2002-04-04 Pascal Giorgi * macros/ntl-check.m4, givaro-check.m4: Use GMP_CFLAGS and GMP_LIBS and appending to LD_LIBRARY_PATH, and removed UNSET LD_LIBRARY_PATH at end of file * macros/gmp-check.m4: removed UNSET LD_LIBRARY_PATH at end of file 2002-04-04 William J. Turner * macros/ntl-check.m4: Use GMP_CFLAGS and GMP_LIBS * tests/test-ntl-zz_p.cpp, test-ntl-ZZ_p.cpp, test-ntl-RR.cpp: New tests * tests/test-common.h, test-vector-domain.C: generalized printVector to all vector types. Created areVectorsEqual function. Both need to be generalized to sparse associative vectors. 2002-04-03 William J. Turner * examples/example.C: changed sparse-matrix to sparse0 2002-04-03 William J. Turner * linbox/blackbox/sparse1.h: Original port; needs work! * linbox/blackbox/sparse0*.h: Renamed from sparse-matrix*.h. 2002-04-03 Bradford Hovinen * linbox/field/modular.h (class Modular): Rename from LargeModular, make this a class parameterized on the element type 2002-04-03 William J. Turner * linbox/field/ntl.h: Fixed random iterator random(x) for zz_p 2002-04-03 Bradford Hovinen * linbox/randiter/modular.h (class Modular): Rename from LargeModular; make this a class parameterized on the element type 2002-04-03 William J. Turner * linbox/randiter/unparametric.h: Ported UnparametricRandIter from old module * macros/givaro-check.m4: Copy from gmp-check.m4 and fix for Givaro * macros/ntl-check.m4: Change to version >= 5.0 and C++ namespace * tests/test-unparametric-field.cpp: New test * tests/test-minpoly.C: Changed sparse-matrix to sparse0 * tests/test-sparse0.C: Changed sparse-matrix to sparse0 2002-04-02 Bradford Hovinen * s/*_{abstract|archetype|envelope}/Abstract|Archetype|Envelope/g 2002-04-02 Bradford Hovinen * linbox/blackbox/dense-matrix.h (DenseMatrix::apply): Signedness fix * linbox/blackbox/submatrix.h (class Submatrix): Don't parameterize on the field; add rowdim, coldim (Submatrix::Submatrix): Pass rowdim, coldim; initialize vectors directly * linbox/field/Makefile.am (include_HEADERS): Add ntl.h * linbox/field/vector-domain.C (VectorDomain::axpy): Remove unused iterator k * linbox/util/commentator.C (Commentator::printActivityReport, Commentator::indent) (Commentator::updateActivityReport, Commentator::finishActivityReport): Make i unsigned (MessageClass::checkConfig): Signedness fix * linbox/util/integer/integer-io.C: Return v * tests/test-dense-matrix.C (test*): s/size_t/long/ for parameter n * tests/Makefile.am (TESTS): Add test test-submatrix * tests/test-common.h (printSparseSeqVector, printVector): Signedness fix * tests/test-vector-domain.C (test*): s/size_t/long/ for parameter n * tests/.cvsignore: Added test-det, test-rank 2002-04-01 Bradford Hovinen * Makefile.am (SUBDIRS): Build documentation last 2002-04-01 Bradford Hovinen * linbox/blackbox/transpose.h (Transpose::Transpose): Make A_ptr const (Transpose::Transpose): Use Transpose, not Compose for copy constructor * linbox/blackbox/compose.h (Compose::apply, Compose::applyTranspose): Declare local intermediate vector, since it was not compiling (for what reason I do not know) with the class member * linbox/solutions/rank.h: #include blackbox-container.h (rank): Compilation fixes * linbox/solutions/det.h: #include blackbox-container.h * tests/test-det.C (test*): Supply iterations to commentator.start * tests/Makefile.am (TESTS): Add test test-rank 2002-03-30 Bradford Hovinen * linbox/blackbox/compose.h (Compose::Compose): Use const pointers for inputs (Compose::Compose): Initialize _z directly 2002-03-30 Bradford Hovinen * linbox/solutions/det.h (det): Compilation fixes 2002-03-29 Bradford Hovinen * tests/test-generic.h (testDenseConsisntency): New test 2002-03-28 Bradford Hovinen * Makefile.am (EXTRA_DIST): Typo fix 2002-03-28 Bradford Hovinen * linbox/blackbox/dense-matrix.h (DenseMatrix::clone): Implement nontrivially (DenseMatrix::DenseMatrix): Implement copy constructor * linbox/util/commentator.C (Commentator::Commentator): Set default max depth for errors and warnings to 10; set max detail to 3 (Commentator::registerMessageClass): Accept parameters max_depth and max_level for initial configuration of message class * tests/test-inverse.C (main): Set maximum depth on internal descriptions to 3 (testDiagonalInverse): Add this test (main): Disable Hilbert inverse test pending test of Hilbert black box * tests/Makefile.am (test_large_modular_SOURCES): s/test-field-common/test-generic/ * tests/test-large-modular.C: Update * tests/test-field-common.h: Obsolete now; remove * tests/test-field-common.h (testField): Move to test-generic.h * tests/test-common.[Ch] (test_header, test_trailer): Remove * tests/test-field-common.h (isPower): Move to test-common.c/.h 2002-03-27 Bradford Hovinen * linbox/util/commentator.h (Commentator::Activity::Activity): Initialize _progress to 0 * linbox/util/commentator.C (Commentator::Commentator): Initialize cnull (Commentator::Commentator): Kill customization of BRIEF_REPORT (MessageClass::dumpConfig): Implement. Dumps the state of this MessageClass (Commentator::updateActivityReport): #if out estimated time * linbox/util/commentator.h (class Commentator): Make cnull no longer static * linbox/util/commentator.C (MessageClass::MessageClass): Accept max_depth and max_level parameters (Commentator::progress): Remove redundant isPrinted check (MessageClass::checkConfig): Return false if we get all the way through the loop 2002-03-27 Bradford Hovinen * tests/test-inverse.C (test*): Use commentator, kill report parameter * tests/test-generic.h (testTranpose): Use commentator, kill report parameter * tests/test-diagonal.C (test*): Use commentator, kill report parameter * tests/test-minpoly.C (test*): Use commentator, kill report parameter * tests/test-large-modular.C (main): Kill report * tests/test-sparse-matrix.C (test*): Use commentator, kill report parameter * tests/test-dense-matrix.C (testVandermonde, testIdentity): Use commentator, kill report parameter 2002-03-26 Bradford Hovinen * configure.in: Add default CXXFLAGS 2002-03-26 Bradford Hovinen * linbox/util/commentator.[Ch]: Complete rewrite * tests/test-*.C (main): Fix argument list * tests/test-large-modular.C (main): Update; add Dave Saunders to credits * tests/test-field-common.h (test_field): Rename to testField (testField): Remove report parameter; rename iters as iterations (testField): Fix indentation (testField): Use commentator 2002-03-24 Bradford Hovinen * linbox/algorithms/massey-domain.h (class MasseyDomain): Remove commentator; use global commentator instead. Update 2002-03-24 Bradford Hovinen * tests/test-common.C (parseArguments): Remove report argument (parseArguments): Use commentator to set default report file * tests/test-vector-domain.C (testDenseDotProduct): Use commentator 2002-03-19 Bradford Hovinen * linbox/blackbox/dense-matrix.h (class DenseMatrix): Use VectorDomain rather than MatrixDomain; typedef Vector and use it throughout (DenseMatrix::setEntry): Implement (DenseMatrix::rowdim, DenseMatrix::coldim): Fix signatures (DenseMatrix::clone): Define this; implementation deferred (DenseMatrix::DenseMatrix): Accept field and build VectorDomain object 2002-03-19 Bradford Hovinen * tests/test-field-common.h: Prevent multiple inclusion * tests/Makefile.am (TESTS): Beatify listing; put test-large-modular at top 2002-03-18 Bradford Hovinen * tests/test-diagonal.C (testRandomTranspose): Add this test * tests/test-common.h (applyPoly, multiEvalPoly): Return resulting vector (interpolatePoly): Implement * tests/Makefile.am (TESTS): Add test-dense-matrix 2002-03-15 Bradford Hovinen * tests/test-inverse.C (testVandermondeInverse): New test; construct the inverse of a Vandermonde matrix and check that it behaves correctly * tests/test-common.h (applyPoly): Use VectorDomain; typedef Vector to reduce verbosity (multiEvalPoly): Implement 2002-03-12 Bradford Hovinen * CHANGED-INTERFACES: Updated text * TODO: Updates 2002-03-12 Bradford Hovinen * examples/example.C: Update to new interface * linbox/blackbox/sparse-matrix-aux.h (LinBox): Rename references to MatrixDomain to VectorDomain (apply): Use vector domain dotprod * linbox/blackbox/inverse.h (LinBox): Use matrix domain vector axpy (LinBox): Compute the negative of the inverse of the constant coefficient first, then multiply through by that (Inverse): Rename MatrixDomain _MD to VectorDomain _VD * linbox/field/large-modular.h (LinBox): Rename ParamModular to LargeModular * linbox/field/Makefile.am (include_HEADERS): Rename param-modular.h to large-modular.h * linbox/field/vector-domain.[Ch]: Rename references to MatrixDomain to VectorDomain * linbox/field/Makefile.am (include_HEADERS): Rename matrix-domain.* to vector-domain.* * linbox/field/matrix-domain.h (LinBox): Add scalar-vector multiplication * linbox/field/matrix-domain.C (LinBox): Use FieldAXPY for dot products (MatrixDomain::axpy): Remember to increment i in the last loop (LinBox): Use axpy and axpyin when possible (LinBox): Specialize everything using MatrixDomainType rather than MatrixDomainSimpleType * linbox/randiter/large-modular.h: Rename ParamModularRandIter to LargeModularRandIter * linbox/randiter/Makefile.am (include_HEADERS): Rename param-modular.h to large-modular.h * tests/test-*.C: Update * tests/.cvsignore: Update * tests/test-vector-domain.C: Rename references to MatrixDomain to VectorDomain * tests/Makefile.am (test_vector_domain_SOURCES): Rename test-matrix-domain to test-vector-domain * tests/test-matrix-domain.C (testSparseAXPY, testDenseAXPY): Add these tests 2002-03-11 Bradford Hovinen * linbox/field/matrix-domain.C (LinBox): Remove precondition checks for sparse axpy (LinBox): Check that i has not gone past the end of y in the loop 2002-03-06 Bradford Hovinen * linbox/field/matrix-domain.h (LinBox): Remove definitions that derive from the field class; they are not necessary right now 2002-02-28 Bradford Hovinen * TODO: Added notes here 2002-02-28 Bradford Hovinen * linbox/field/matrix-domain.h (LinBox): Remove extraneous template specialization * linbox/field/matrix-domain.C (LinBox): Use _F.init to initialize field elements * linbox/field/matrix-domain.h: #include vector-traits.h * tests/test-common.h (printSparseSeqVector): Implement * tests/test-matrix-domain.C: Added this test 2002-02-27 Bradford Hovinen * doc/Makefile.am (SUBDIRS): Add $({DOCPLUSPLUS|TEX}_SUBDIRS) 2002-02-27 Bradford Hovinen * configure.in: Added doc/{html|tex}/Makefile; added call to check for Doc++; Add a check for latex and only build latex documentation if that is present (TEX_SUBDIRS): Make sure this gets included even if Doc++ isn't found * examples/example.C (main): Comment alignment fix * linbox/*/*.dxx: Update paths * Added missing *-wrappers.dxx * linbox/*/*.dxx: Update paths; add missing .dxx files * linbox/field/matrix-domain.h (LinBox): Add specialization for SparseSequence vectors 2002-02-20 Bradford Hovinen * tests/Makefile.am (noinst_PROGRAMS): Use $(TESTS) 2002-02-13 Bradford Hovinen * HACKING: Update information on directory structure * configure.in: Properly quote error message strings Use exit status 1 rather than -1 on error * HACKING: Added section with checklists for adding header files and tests to Linbox. * configure.in: Print error message if GMP was not found * HACKING: Update text (http): Added a section on having the right development tools and added some information on autogen.sh/configure options * CHANGED-INTERFACES: Update text 2002-02-09 Bradford Hovinen * COPYING: Copy over LGPL 2002-02-08 Bradford Hovinen * all: s/element_/Element_/g 2002-02-08 Saunders * examples/Makefile.am: change load order 2002-02-08 Bradford Hovinen * linbox/blackbox/inverse.h: Update #include vector-traits.h (Inverse): Correctly instantiate minpoly Include minpoly.h (class Inverse): Make _z mutable 2002-02-08 Saunders * macros/gmp-check.m4: set LD_LIBRARY_PATH 2002-02-08 Bradford Hovinen * macros/*-check.m4: Unset *_{CFLAGS|LIBS} if the library was not found Invoke found macro only if version check succeeded Invoke not found macro if version check failed 2002-02-08 Saunders * tests/Makefile.am: change link order. 2002-02-08 Bradford Hovinen * tests/test-inverse.C (main): Use prevprime(2^32) for default modulus (main): Fix banner * tests/test-diagonal.C (main): Use prevprime(2^32) for default modulus * tests/test-sparse-matrix.C (main): Use 101 for default modulus * tests/test-minpoly.C (main): Use prevprime(2^32) for default modulus * tests/Makefile.am (TESTS): Added test test-inverse 2002-02-07 Bradford Hovinen * tests/test-sparse-matrix.C (main): Use GF(65521) by default * tests/test-minpoly.C (main): Use GF(65521) by default * tests/test-diagonal.C (main): Use GF(65521) by default * tests/Makefile.am (TESTS): Added test test-diagonal * tests/test-sparse-matrix.C: Don't #include minpoly.h 2002-02-04 Bradford Hovinen * configure.in (AC_OUTPUT): Add examples/data/Makefile 2002-02-04 Bradford Hovinen * configure.in (CFLAGS): Make sure all CFLAGS variables make it in to compilations (CXXFLAGS): s/CFLAGS/CXXFLAGS/ * Makefile.am (SUBDIRS): Put examples last in the list * linbox/blackbox/sparse-matrix-aux.h (apply): Initialize *y_iter to 0 before looping * macros/ntl-check.m4: Correct check in error message * macros/*.m4: Remove setting LD_LIBRARY_PATH, etc. * tests/test-sparse-matrix.C (testNilpotentApply): Reset even with every iteration * tests/test-minpoly.C (testNilpotentMinpoly): Fix test of correctness * tests/test-common.h (printPolynomial): Write 0 for the zero polynomial (printPolynomial): Make sure 1 polynomial gets printed correctly * tests/test-minpoly.C (testIdentityMinpoly): Swap coefficients in the test * tests/test-minpoly.C (main): Update banner * tests/test-common.h (applyPoly): Implement; copy from linbox/blackbox/inverse.h * tests/test-sparse-matrix.C: Move minpoly tests to test-minpoly * tests/Makefile.am (TESTS): Add test test-minpoly 2002-02-03 Bradford Hovinen * */*.{C|h|inl}: Change Element to element, Integer to integer * */*.{C|h|inl}: Updated header comments to reflect correct filename locations * */.cvsignore: Added/updated .cvsignore files * configure.in: Add AC_PROG_CC, AC_PROG_RANLIB for building static libraries Add AM_PROG_LIBTOOL * */Makefile.am: Added infrastructure for building static library liblinbox.a so that we can avoid symbol collisions 2001-12-31 Bradford Hovinen * HACKING: Added documentation on coding style, fleshed out algorithms a bit linbox-1.6.3/HACKING000066400000000000000000000001621347646240000140100ustar00rootroot00000000000000Please go to http://www.linalg.org/developer.html (or ./doc/install-dev.html) ================== The Linbox Team linbox-1.6.3/Makefile.am000066400000000000000000000066751347646240000150740ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ ACLOCAL_AMFLAGS = -I macros SUBDIRS=linbox benchmarks macros tests interfaces doc examples pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = linbox.pc # include_HEADERS=linbox-config.h # I intend to pare down the target "check" so as to be a smaller check used # at installation time with a focus on confirming that dependencies on # other packages and compilation environment are in order. In contrast, the # target "fullcheck" should become as exhaustive as possible to serve # developers for regression testing. -bds 2011Feb ...also benchmarks will be. # Fullcheck provides a full check for regression testing purposes. fullcheck: (${MAKE} ; cd tests; ${MAKE} fullcheck ) ${MAKE} examples docs:doc/linbox-html/index.html doc/linbox-html/index.html: (cd doc; ${MAKE} docs) docs_dev:doc/linbox-dev-html/pages.html doc/linbox-dev-html/pages.html: (cd doc; ${MAKE} docs_dev) examples: (cp -R $(top_srcdir)/examples/{data,test.sh} examples; cd examples; ${MAKE} examples; SED="${SED}" ./test.sh) benchmarks: (cd benchmarks; ${MAKE} benchmarks) perfpublisher: benchmarks/perfpublisher tests/perfpublisher benchmarks/perfpublisher: (cd benchmarks; ${MAKE} perfpublisher) tests/perfpublisher: (cd tests; ${MAKE} perfpublisher) .PHONY:examples benchmarks bin_SCRIPTS=linbox-config bundled: sh linbox-auto-install.sh uninstall-hook: (test -d "$(includedir)/linbox" && rmdir "$(bindir)" \ "$(libdir)" \ "$(mandir)/man1" \ "$(mandir)" \ "$(includedir)/linbox/algorithms/gauss" \ "$(includedir)/linbox/algorithms/IML" \ "$(includedir)/linbox/algorithms/matrix-blas3" \ "$(includedir)/linbox/algorithms" \ "$(includedir)/linbox/blackbox" \ "$(includedir)/linbox/element" \ "$(includedir)/linbox/ring/modular" \ "$(includedir)/linbox/ring/ntl" \ "$(includedir)/linbox/field/" \ "$(includedir)/linbox/kaapi" \ "$(includedir)/linbox/matrix/sparsematrix" \ "$(includedir)/linbox/matrix/densedatrix" \ "$(includedir)/linbox/matrix/matrixdomain" \ "$(includedir)/linbox/matrix/sliced3" \ "$(includedir)/linbox/matrix" \ "$(includedir)/linbox/randiter" \ "$(includedir)/linbox/ring" \ "$(includedir)/linbox/solutions/solve" \ "$(includedir)/linbox/solutions/echelon" \ "$(includedir)/linbox/solutions" \ "$(includedir)/linbox/switch" \ "$(includedir)/linbox/util/formats" \ "$(includedir)/linbox/util" \ "$(includedir)/linbox/vector" \ "$(includedir)/linbox/polynomial" \ "$(includedir)/linbox" \ "$(datarootdir)/" \ "$(includedir)" ) || true git: git commit -a; git pull; git push VERSION=1.6.3 EXTRA_DIST= \ linbox-auto-install.sh \ README.md #incremente-versions linbox-1.6.3/README.md000066400000000000000000000026161347646240000143060ustar00rootroot00000000000000# The Linbox Library [![Build Status](https://ci.inria.fr/linbox/buildStatus/icon?job=LinBox)](https://ci.inria.fr/linbox/job/LinBox/) ## Purpose The Linbox library provides functionality for exact linear algebra. See doc/mainpage.doxy for more info. ## Quick Install Download [linbox-auto-install.sh](linbox-auto-install.sh) and run it! For instance, on a machine with an installation of GMP and OpenBLAS in the standard search paths: ``` ./linbox-auto-install.sh --stable=yes --make-flags="-j 3" --with-blas-libs="-lopenblas" ``` This script will install stable versions of Givaro, fflas-ffpack and then LinBox. Here is another example fetching and installing the latest versions of Givaro, OpenBLAS, fflas-ffpack and then LinBox. ``` ./linbox-auto-install.sh --enable-openblas=yes ``` ## Installation In brief: ```./configure && make && make install``` See INSTALL for generic installation information. ## Availability From github.com/linbox-team # Requirements - fflas-ffpack and by transitivity: - any BLAS (Fortran or C): e.g. ATLAS, OpenBLAS, ... - Givaro - GMP # Optional Dependencies - NTL, - IML, - FLINT, - M4RI, - M4RIE See doc/install*html for details. This library requires the GNU C++ compiler (gcc-4.3 or newer) or any compiler supporting advanced template features. ## Contact and discussions Corrections, suggestions and comments to linbox-use@googlegroups.com linbox-1.6.3/RELEASE-INSTRUCTIONS000066400000000000000000000027701347646240000157750ustar00rootroot00000000000000Instructions for making a LinBox release: 1. Run 'svn up ' to make sure you are fully up to date and on the HEAD branch [1] 2. Update the version number in Makefile.am next to 'VERSION = ', and in configure.in:3 3. Run 'make distcheck' on your local copy of LinBox. If there are any problems, fix them and commit the fixes to CVS. Usually problems will be things like header files that are not being installed, but should be. Make sure 'make distcheck' runs once without having any errors before moving onto the next step. Also, record all of the changes you make in ChangeLog. 4. Add a ChangeLog entry for Makefile.am with the text 'New version ' where is the version you are releasing. 5. Make sure everything in your local copy of LinBox is committed. In particular, either commit or eliminate anything from step 1 that was marked modified. 6. Run 'make dist' (or 'make distcheck') so that the last ChangeLog entry is included in your tarball. 7. Copy the tarball produced in step 6 to the web server. 8. Update the LinBox web site with information on the new release -- mention it in news.html and update the latest version information in index.html and download.html [1] Of course, this assumes that you want to release from the head branch. If HEAD represents the development version and you actually want to release from a stable branch, you should use cvs up -dP -r linbox- where is the version identifier in the stable branchlinbox-1.6.3/autogen.sh000077500000000000000000000010641347646240000150240ustar00rootroot00000000000000#!/bin/sh -ex srcdir=`dirname $0` test -z "$srcdir" && srcdir=. # Recover command line, with double-quotes CMDLINE="" for arg in "$@" do WHO="`echo $arg | cut -d'=' -f1`" WHAT="`echo $arg | cut -s -d'=' -f2`" if test "x$WHAT" = "x"; then CMDLINE="$CMDLINE $WHO" else CMDLINE="$CMDLINE $WHO=\"$WHAT\"" fi done echo "$0 $CMDLINE" > $srcdir/autogen.status chmod +x $srcdir/autogen.status # run autoconf, libtoolize, automake, etc. autoreconf -vif $srcdir # run configure script if test x$NOCONFIGURE = x; then $srcdir/configure "$@" fi linbox-1.6.3/benchmarks/000077500000000000000000000000001347646240000151375ustar00rootroot00000000000000linbox-1.6.3/benchmarks/BenchmarkFile.h000066400000000000000000000047711347646240000200130ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/BenchmarkFile.h * @ingroup benchmarks * @brief */ #ifndef __LINBOX_BENCHMARKFILE_H #define __LINBOX_BENCHMARKFILE_H #include #include #include #include namespace LinBox { class BenchmarkFile { public: typedef std::map::iterator MetadataIterator; BenchmarkFile() : numFields_(0) {} ~BenchmarkFile(); void write(std::ostream& out); void addMetadata(const std::string& key,const CSValue& val); MetadataIterator metadataBegin(); void addDataField(const std::string& fieldName,const CSValue& val); void setType(const std::string& fieldName, const std::string& type); void pushBackTest(); static CSDate getDateStamp(); static std::string getDateFormat(); protected: typedef std::vector TestLine; typedef std::map MetadataMap; typedef std::map FieldPosMap; typedef std::map TypeMap; void printMetadata(std::ostream& out); void printFieldTitles(std::ostream& out); void printContents(std::ostream& out); void printCommaVector(std::ostream& out,const std::vector& vec); void freeTestLine(TestLine& line); MetadataMap metadata_; TypeMap typeMap_; int numFields_; FieldPosMap fields_; TestLine curTest_; std::vector allTests_; }; } #include "BenchmarkFile.inl" #endif // __LINBOX_BENCHMARKFILE_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/BenchmarkFile.inl000066400000000000000000000106301347646240000203350ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/BenchmarkFile.inl * @ingroup benchmarks * @brief */ #ifndef __LINBOX_BENCHMARKFILE_INL #define __LINBOX_BENCHMARKFILE_INL #include "linbox/util/debug.h" #include #include #include namespace LinBox { void BenchmarkFile::printCommaVector(std::ostream& out,const std::vector& vec) { bool first=true; for (int i=0;iprint(out); } } out << std::endl; } void BenchmarkFile::printMetadata(std::ostream& out) { typedef MetadataMap::iterator MapIT; for (MapIT it=metadata_.begin();it!=metadata_.end();++it) { out << it->first << ", "; it->second->print(out); out << std::endl; } typedef TypeMap::iterator TypeMapIT; if (!(typeMap_.empty())) { out << "types"; for (TypeMapIT it=typeMap_.begin();it!=typeMap_.end();++it) { out << ", (" << it->first << "," << it->second << ")"; } out << std::endl; } out << "end, metadata" << std::endl << std::endl; } void BenchmarkFile::printFieldTitles(std::ostream& out) { std::vector fieldVec(numFields_); typedef FieldPosMap::iterator MapIT; for (MapIT it=fields_.begin();it!=fields_.end();++it) { fieldVec[it->second]=new CSString(it->first); } printCommaVector(out,fieldVec); for (int i=0;isecond; } } BenchmarkFile::MetadataIterator BenchmarkFile::metadataBegin() { return metadata_.begin(); } void BenchmarkFile::addMetadata(const std::string& key,const CSValue& val) { metadata_.insert(std::pair(key,val.clone())); } void BenchmarkFile::setType(const std::string& fieldName, const std::string& type) { typeMap_[fieldName]=type; } void BenchmarkFile::addDataField(const std::string& fieldName,const CSValue& val) { typedef FieldPosMap::iterator FieldPosMapIT; int fieldPos; FieldPosMapIT it = fields_.find(fieldName); if (it==fields_.end()) { fields_.insert(std::pair(fieldName,numFields_)); fieldPos=numFields_; ++numFields_; curTest_.resize(numFields_); } else { fieldPos=it->second; } curTest_[fieldPos]=val.clone(); } void BenchmarkFile::pushBackTest() { allTests_.push_back(curTest_); curTest_.clear(); curTest_.resize(numFields_); } CSDate BenchmarkFile::getDateStamp() { time_t rawTime; struct tm *timeInfo; srand ((unsigned)time (&rawTime)); timeInfo=localtime(&rawTime); return CSDate(*timeInfo); } std::string BenchmarkFile::getDateFormat() { return "%a %m/%d %H/%M/%S %Y"; } } #endif // __LINBOX_BENCHMARKFILE_INL // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/CSValue.h000066400000000000000000000061251347646240000166160ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/CSValue.h * @ingroup benchmarks * @brief */ #ifndef __LINBOX_CSVALUE_H #define __LINBOX_CSVALUE_H #include #include #include #include #include namespace LinBox { class CSValue { public: virtual ~CSValue() {} virtual void print(std::ostream& out) const =0; virtual CSValue* clone() const =0; virtual int type() const =0; }; #define CSV_STRING_TYPE 1 #define CSV_INT_TYPE 2 #define CSV_DOUBLE_TYPE 3 #define CSV_DATE_TYPE 4 std::ostream& operator<< (std::ostream& out, const CSValue& v) { v.print(out); return out; } class CSString : public CSValue { public: CSString() {} CSString(const std::string& e) : elt_(e) {} std::string getVal() const {return elt_;} void print(std::ostream& out) const {out << elt_;} CSValue* clone() const {return new CSString(elt_);} int type() const {return CSV_STRING_TYPE;} protected: std::string elt_; }; class CSInt : public CSValue { public: CSInt() : elt_(0) {} CSInt(const int e) : elt_(e) {} int getVal() const {return elt_;} void print(std::ostream& out) const {out << elt_;} CSValue* clone() const {return new CSInt(elt_);} int type() const {return CSV_INT_TYPE;} protected: int elt_; }; class CSDouble : public CSValue { public: CSDouble() : elt_(0.0) {} CSDouble(const double e) : elt_(e) {} double getVal() const {return elt_;} void print(std::ostream& out) const {out << elt_;} CSValue* clone() const {return new CSDouble(elt_);} int type() const {return CSV_DOUBLE_TYPE;} protected: double elt_; }; class CSDate : public CSValue { public: CSDate() {} CSDate(const struct tm& time) : elt_(time) {} struct tm getVal() const {return elt_;} void print(std::ostream& out) const { std::string timeStr(asctime(&elt_)); timeStr.erase(timeStr.size()-1); out << timeStr; } CSValue* clone() const {return new CSDate(elt_);} int type() const {return CSV_DATE_TYPE;} protected: struct tm elt_; }; } #endif // __LINBOX_CSVALUE_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/Makefile.am000066400000000000000000000106171347646240000172000ustar00rootroot00000000000000# Copyright (c) 2011 the LinBox group # Brice Boyer (briceboyer) # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ SUBDIRS=data matrix DEFCPPFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -DLinBoxSrcOnly AM_CPPFLAGS = -I$(top_srcdir) $(DEFCPPFLAGS) $(DEPS_CFLAGS) LDADD = $(DEPS_LIBS) $(LDFLAGS) LDADD += $(top_builddir)/linbox/liblinbox.la pkgincludesubdir=$(pkgincludedir)/benchmarks noinst_LTLIBRARIES=libbenchmarks.la libbenchmarks_la_SOURCES= benchmark.C libbenchmarks_la_LDFLAGS=$(LDFLAGS) $(DEPS_LIBS) libbenchmarks_la_LIBADD=$(top_builddir)/linbox/liblinbox.la #libbenchmarks_la_LIBADD+=$(top_builddir)/linbox/util/.libs/libutil.la # AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/linbox # AM_CPPFLAGS += $(NTL_CFLAGS) $(IML_CFLAGS) $(PARFLAGS) # AM_CXXFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -DLinBoxSrcOnly # LDADD = $(NTL_LIBS) $(MPFR_LIBS) $(FPLLL_LIBS) $(LDFLAGS) $(IML_LIBS) $(XML_LIBS) $(PARLIBS) # AM_LDFLAGS=-static $(LDFLAGS) AM_LDFLAGS = .libs/libbenchmarks.la # AM_LDFLAGS = .libs/benchmark.o PERFPUBLISHERFILE=benchmarks-report.xml BENCH_BASIC= \ benchmark-example\ benchmark-dense-solve\ benchmark-order-basis \ benchmark-solve-cra FAILS= \ benchmark-ftrXm \ benchmark-ftrXm \ benchmark-crafixed TODO= \ benchmark-matmul \ benchmark-spmv \ benchmark-fields # BENCH_ALGOS= \ TODO= \ benchmark-solve \ benchmark-rank \ benchmark-det \ benchmark-nullspace # BENCH_FORMS= \ TODO= \ benchmark-lu benchmark-echelon \ benchmark-hermite \ benchmark-smith EXTRA_PROGRAMS= $(BENCH_BASIC) pkginclude_HEADERS = \ optimizer.h \ benchmark-utils.h \ benchmark-utils.C \ benchmark-metadata.h \ benchmark-metadata.C \ benchmark.h \ benchmark.C \ benchmark.inl EXTRA_DIST = \ perfpublisher.sh \ benchmark.doxy CLEANFILES= $(EXTRA_PROGRAMS) $(PERFPUBLISHERFILE) benchmarks: ${EXTRA_PROGRAMS} ### BASE BENCHMARK ### # benchmark_fgemm_SOURCES = benchmark-fgemm.C # benchmark_ftrXm_SOURCES = benchmark-ftrXm.C # benchmark_crafixed_SOURCES = benchmark-crafixed.C benchmark_example_SOURCES = benchmark-example.C benchmark_order_basis_SOURCES = benchmark-order-basis.C benchmark_dense_solve_SOURCES = benchmark-dense-solve.C benchmark_solve_cra_SOURCES = benchmark-solve-cra.C # benchmark_matmul_SOURCES = benchmark-matmul.C # benchmark_spmv_SOURCES = benchmark-spmv.C # benchmark_fields_SOURCES = benchmark-fields.C ### BENCHMARK ALGOS and SOLUTIONS ### # benchmark_solve_SOURCES = benchmark-solve.C # benchmark_rank_SOURCES = benchmark-rank.C # benchmark_det_SOURCES = benchmark-det.C # benchmark_nullspace_SOURCES = benchmark-nullspace.C ### BENCHMARK MATRIX FACTORISATIONS ### # benchmark_lu_SOURCES = benchmark-lu.C # benchmark_echelon_SOURCES = benchmark-echelon.C # benchmark_hermite_SOURCES = benchmark-hermite.C # benchmark_smith_SOURCES = benchmark-smith.C cleanup : (cd data ; make cleanup) LINBOX=@prefix@ LINBOX_BIN=@bindir@ # Perfpublisher script interaction - AB 2014/12/11 perfpublisher: $(top_srcdir)/tests/perfpublisher.sh "$(PERFPUBLISHERFILE)" "$(EXTRA_PROGRAMS)" "$(CXX)" mv $(PERFPUBLISHERFILE) .. make clean mv ../$(PERFPUBLISHERFILE) . # for compilation of new benchmarks %:%.C $(CXX) $(AM_CXXFLAGS) $(CXXFLAGS) $(OPTFLAGS) ${INCLUDES} $(AM_CPPFLAGS) $*.C -o $@ $(LDFLAGS) $(LDADD) %:%.cpp $(CXX) $(AM_CXXFLAGS) $(CXXFLAGS) $(OPTFLAGS) ${INCLUDES} $(AM_CPPFLAGS) $*.cpp -o $@ $(LDFLAGS) $(LDADD) linbox-1.6.3/benchmarks/README000066400000000000000000000104521347646240000160210ustar00rootroot00000000000000These notes stem from a discussion by Johnson, Harrison, Yuhasz, Youse, Stachnik , Saunders at UDel June 2013. It is proposed that experiment data files be csv files containing a metadata sec tion followed by a measurement section. The idea is that (1) each experimental run will make such a file (or add to such a file) and (2) each plot and table generation can then be done from such files as input. The metadata is a series of key-value pairs ending in one whose key is "end" This is followed by a line containing a list of keys (column labels) and then some number of lines recording experiments. These are lists of values corresponding to the column labels. The value "-" denotes "missing" or "undefined". When value v in a "k,v" pair is another keyword, it means that k's value is the same as the other keyword's. Blank lines are ignored. C++ comment conventions are followed (use of "//" and "/* ... */"). This is for "commented out" text and should not be confused with values of the keyword "comment". Metadata reveals key values that are held constant in the experiments. The column labels are the keys whose values will vary from experiment to experiment.i Experiment data lines record the key values for the column labels of a given experiment. For example: ------------------ comment, exploration of foo parallel and blocked variants problem, foo date, 2013June21 author, joe linboxer\, bds rowdim, 10000 //coldim, rowdim coldim, 20000 blockcoldim, blockrowdim matrix class, randomMat field, Givaro::Modular(101) flops formula, (n*nnz)/time comment, no parsing guidance is offered yet for mflops formula end, metadata time, nnz, blockrowdim, threads, algorithm, comment 0.001, 10000, 26, 1, block-coppersmith, blockdim is about 2lg(dim) 1.1e-5, 10000, 100, 48, block-coppersmith-omp, blockdim is sqrt(dim) 1.1e-5, 100000, -, 1, matrix-build, - ... ------------------ For consistency and particularly for generating reports on data from multiple data files, the following key name conventions should be followed. Other key names should be used only when one of these does not fit. ----- // algorithm properties problem - the algorithmic task being measured (eg. solveNonsingular). algorithm - a specific implementation of a method to solve the problem (eg. solve(Method::Wiedemann) or solve-omp). time - the runtime for the experiment task flops - the nominal operation count for the task. The flops formula should be made clear in the metadata. blockrowdim - row blocking used blockcoldim - col blocking used ... // domain of computation properties field - arithmetic domain class used (when it is a field) (eg. Givaro::Modular). ring - arithmetic domain class used (eg. PID_integer). matrix domain - arithmetic domain used (ring or field extended by matrix ops) (eg. BlasMatrixDomain). modulus - characteristic of the field or ring (eg. 200000000000003). exponent - exponent of the modulus. ... // environment-of-computation properties date - the date of the experiment(s) (eg. 2013June22). author - name or list of names of the person(s) running the experiments. computer - computer description (cores, mem, cache, speeds, etc.). threads - number of threads used. ... // matrix properties (when problem has a key matrix as data) matrix class - blackbox template or class (eg. SparseMatrix or BlasMatrix or MatrixDomain::Submatrix). matrix constructor - eg. randomMat. // Properties of the constructed instance (depends on matrix class and constructor rowdim - coldim - nnz - rank - Pesumably one knows from context whether this is a parameter or computed result. det - Pesumably one knows from context whether this is a parameter or computed result. ... ----- Further remarks. Other shared keywords can be added... Some keywords, whose values are strings, should have a standardized list of possible values... For convenience we could have a file of some keyword constants. For example, some keywords which are machine names with corresponding value a description, eg., "hmrg, Dell Poweredge 2650 2-Xeon (3.2GHz)". Then a data file's metadata can include "computer, hmrg" for short. @ can be the "value of" operator, as in "computer, @hmrg", wherein the value expands to the value of hmrg. The experiment lines (below metadata and column labels) should be readable by gnuplot (this is a constraint on number and string representations). linbox-1.6.3/benchmarks/benchmark-dense-solve.C000066400000000000000000000166451347646240000214330ustar00rootroot00000000000000/* * benchmarks/benchmark-dense-solve.C * * Copyright (C) 2019 The LinBox group * Author: J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file benchmarks/benchmark-dense-solve.C \brief Solving dense linear system over Q or Zp. \ingroup benchmarks */ #include "linbox/linbox-config.h" #include #include "linbox/algorithms/vector-fraction.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/methods.h" #include "linbox/solutions/solve.h" #include "linbox/util/args-parser.h" #include "linbox/util/matrix-stream.h" #include #ifdef _DEBUG #define _BENCHMARKS_DEBUG_ #endif using namespace LinBox; using Ints = Givaro::ZRing; using VectorFractionInts = VectorFraction; namespace { struct Arguments { Givaro::Integer q = -1; int nbiter = 3; int n = 500; int bits = 10; std::string dispatchString = "Auto"; std::string methodString = "Auto"; }; template double& setBitsize(double& size, const Givaro::Integer& q, const Vector& v) { return size = Givaro::logtwo(q); } template <> double& setBitsize(double& size, const Givaro::Integer& q, const VectorFractionInts& v) { return size = Givaro::logtwo(v.denom); } } template > void benchmark(std::pair& timebits, Arguments& args, MethodBase& method) { Field F(args.q); // q is ignored for Integers typename Field::RandIter randIter(F, args.bits); // bits is ignored for ModularRandIter #ifdef _BENCHMARKS_DEBUG_ std::clog << "Setting A ... " << std::endl; #endif DenseMatrix A(F, args.n, args.n); DenseVector B(F, A.rowdim()); Timer chrono; if (method.master()) { chrono.start(); PAR_BLOCK { FFLAS::pfrand(F, randIter, args.n, args.n, A.getPointer(), args.n); } chrono.stop(); #ifdef _BENCHMARKS_DEBUG_ std::clog << "... A is " << A.rowdim() << " by " << A.coldim() << ", " << chrono << std::endl; if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(std::clog << "A:=", Tag::FileFormat::Maple) << ';' << std::endl; #endif PAR_BLOCK { FFLAS::pfrand(F, randIter, args.n, 1, B.getPointer(), 1); } #ifdef _BENCHMARKS_DEBUG_ std::clog << "B is " << B << std::endl; #endif } method.pCommunicator->bcast(A, 0); method.pCommunicator->bcast(B, 0); Vector X(F, A.coldim()); if (method.master()) { chrono.start(); } if (args.methodString == "Elimination") solve(X, A, B, Method::Elimination(method)); else if (args.methodString == "DenseElimination") solve(X, A, B, Method::DenseElimination(method)); else if (args.methodString == "SparseElimination") solve(X, A, B, Method::SparseElimination(method)); else if (args.methodString == "Dixon") solve(X, A, B, Method::Dixon(method)); else if (args.methodString == "CRA") solve(X, A, B, Method::CRAAuto(method)); else if (args.methodString == "SymbolicNumericOverlap") solve(X, A, B, Method::SymbolicNumericOverlap(method)); else if (args.methodString == "SymbolicNumericNorm") solve(X, A, B, Method::SymbolicNumericNorm(method)); else if (args.methodString == "Blackbox") solve(X, A, B, Method::Blackbox(method)); else if (args.methodString == "Wiedemann") solve(X, A, B, Method::Wiedemann(method)); else if (args.methodString == "Lanczos") solve(X, A, B, Method::Lanczos(method)); // @fixme Won't compile // else if (args.methodString == "BlockLanczos") solve(X, A, B, Method::BlockLanczos(method)); else solve(X, A, B, Method::Auto(method)); if (method.master()) { chrono.stop(); #ifdef _BENCHMARKS_DEBUG_ printVector(std::clog << "(DenseElimination) Solution is ", F, X) << std::endl; #endif setBitsize(timebits.second, args.q, X); timebits.first = chrono.usertime(); } } int main(int argc, char** argv) { Arguments args; Argument as[] = {{'i', "-i", "Set number of repetitions.", TYPE_INT, &args.nbiter}, {'q', "-q", "Set the field characteristic (-1 for rationals).", TYPE_INTEGER, &args.q}, {'n', "-n", "Set the matrix dimension.", TYPE_INT, &args.n}, {'b', "-b", "bit size", TYPE_INT, &args.bits}, {'d', "-d", "Dispatch mode (any of: Auto, Sequential, SMP, Distributed).", TYPE_STR, &args.dispatchString}, {'M', "-M", "Choose the solve method (any of: Auto, Elimination, DenseElimination, SparseElimination, " "Dixon, CRA, SymbolicNumericOverlap, SymbolicNumericNorm, " "Blackbox, Wiedemann, Lanczos).", TYPE_STR, &args.methodString}, END_OF_ARGUMENTS}; LinBox::parseArguments(argc, argv, as); // Setting up context Communicator communicator(&argc, &argv); if (communicator.master()) { std::clog << "Communicator size: " << communicator.size() << std::endl; } MethodBase method; method.pCommunicator = &communicator; if (args.dispatchString == "Sequential") method.dispatch = Dispatch::Sequential; else if (args.dispatchString == "SMP") method.dispatch = Dispatch::SMP; else if (args.dispatchString == "Distributed") method.dispatch = Dispatch::Distributed; else method.dispatch = Dispatch::Auto; // Real benchmark bool isModular = false; if (args.q > 0) isModular = true; using Timing = std::pair; std::vector timebits(args.nbiter); for (int iter = 0; iter < args.nbiter; ++iter) { if (isModular) { benchmark>(timebits[iter], args, method); // benchmark>(timebits[iter],n,q,bits,p); } else { benchmark(timebits[iter], args, method); } } #ifdef _BENCHMARKS_DEBUG_ for (const auto& it : timebits) std::clog << it.first << "s, " << it.second << " bits" << std::endl; #endif if (method.master()) { std::sort(timebits.begin(), timebits.end(), [](const Timing& a, const Timing& b) -> bool { return a.first > b.first; }); std::cout << "Time: " << timebits[args.nbiter / 2].first << " Bitsize: " << timebits[args.nbiter / 2].second; FFLAS::writeCommandString(std::cout, as) << std::endl; } return 0; } linbox-1.6.3/benchmarks/benchmark-example.C000066400000000000000000000217421347646240000206340ustar00rootroot00000000000000/* Copyright (C) 2011 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark-example.C * @ingroup benchmarks * @brief Benchmarking example * @example benchmark */ #include "benchmarks/benchmark.h" #include "linbox/util/error.h" #include "fflas-ffpack/fflas-ffpack.h" #include "linbox/ring/modular.h" #include "linbox/matrix/random-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/rank.h" #include using namespace LinBox ; using Givaro::Timer; /* compute MegaFLOPS for mat mul (2 m n k) */ double mm_mflops(size_t m, size_t n, size_t k) { return 2*(double)m/100*(double)n/100*(double)k/100 ; } /* Benchmark on a field */ /*! @internal * @brief launches the benchmarks for the square case. * @param F field * @param min min size to bench * @param max max size to bench * @param step step between two sizes * @param Data where data is stored * @param series_nb index of the current series of measures. */ template void launch_bench_square(Field & F // const problem , size_t min, size_t max, size_t step // no negative step , PlotData & Data ) { linbox_check(step); linbox_check(min <= max); std::ostringstream nam ; F.write(nam); // Data.setCurrentSeriesName(nam.str()); Data.newSeries(nam.str()); Chrono TW ; typedef typename Field::RandIter Randiter ; Randiter R(F) ; BlasMatrixDomain BMD(F) ; RandomDenseMatrix RandMat(F,R); for ( size_t i = min ; i < max ; i += step ) { showAdvanceLinear(i,min,max); size_t ii = i ; BlasMatrix A (F,ii,ii); BlasMatrix B (F,ii,ii); BlasMatrix C (F,ii,ii); size_t j = 0 ; // number of repets. RandMat.random(A); RandMat.random(B); RandMat.random(C); TW.clear() ; while( Data.keepon(j,TW.time(),false) ) { TW.start() ; BMD.mul(C,A,B) ; // C = AB TW.stop(); ++j ; } double mflops = computeMFLOPS(TW.times(),mm_mflops(i,i,i)); Data.setCurrentSeriesEntry(i,mflops,(double)i,TW.time()); // could be i*i*i } Data.finishSeries(); } /* Collects Benchmarks */ /*! @brief Benchmark square fgemm Y=AX for several fields. * @param min min size * @param max max size * @param step step of the size between 2 benchmarks * @param charac characteristic of the field. */ void bench_square( size_t min, size_t max, size_t step, int charac ) { size_t nb = 1 ;// une col de plus (la première) typedef Givaro::Modular Field0 ; ++nb ; typedef Givaro::Modular Field1 ; ++nb ; // typedef Givaro::Modular Field2 ; ++nb ; // typedef Givaro::ModularBalanced Field3 ; ++nb ; // typedef Givaro::ModularBalanced Field4 ; ++nb ; // typedef Givaro::ModularBalanced Field5 ; ++nb ; // GivaroZpZ ///// DATA HARVEST //// PlotData Data; showProgression Show(nb) ; Field0 F0(charac) ; // launch_bench_square(F0,100,1500,300,Data); launch_bench_square(F0,min,max,step,Data); Show.FinishIter(); if (charac < 2048) { Field1 F1(charac) ; // launch_bench_square(F1,200,1500,200,Data); launch_bench_square(F1,min,max,step,Data); Show.FinishIter(); } else { Show.SkipIter(); } #if 0 Field2 F2(charac) ; launch_bench_square(F2,min,max,step,Data); Show.FinishIter(); Field3 F3(charac) ; launch_bench_square(F3,min,max,step,Data); Show.FinishIter(); if (charac < 2048) { Field4 F4(charac) ; launch_bench_square(F4,min,max,step,Data); Show.FinishIter(); } else { Show.SkipIter(); } Field5 F5(charac) ; launch_bench_square(F5,min,max,step,Data); Show.FinishIter(); #endif ///// PLOT STYLE //// LinBox::PlotStyle Style; Style.setTerm(LinBox::PlotStyle::Term::eps); Style.setTitle("BlasMatrixDomain mul","Mflops","dimensions"); Style.setPlotType(LinBox::PlotStyle::Plot::graph); Style.setLineType(LinBox::PlotStyle::Line::linespoints); LinBox::PlotGraph Graph(Data,Style); Graph.setOutFilename("bmdmul_square"); // Graph.plot(); Graph.print(Tag::Printer::gnuplot); Graph.print(Tag::Printer::tex); Graph.print(Tag::Printer::csv); return ; } template void launch_bench_rank(const Field &F, const std::string & name , PlotData & Data ) { SparseMatrix Mat(F); std::ifstream mat1 (name); Mat.read(mat1); MatrixMetaData mmd (Mat,name); // Data.newSeries(name); Chrono TW ; showAdvanceLinear(1,1,2); TW.clear() ; size_t j = 0 ; while( Data.keepon(j,TW.time()) ) { TW.start() ; unsigned long d ; LinBox::rank(d,Mat,Method::Blackbox()); TW.stop(); ++j ; } // double mflops = computeMFLOPS(TW.times(),mm_mflops(i,i,i)); Data.setSeriesEntry("Rank (Blackbox)",name,TW.time(),(double)Mat.size(),TW.time()); Data.addCurrentEntryMetaData(mmd); // Data.addCurrentSeriesMetaData(mmd); // Data.addMetaData(mmd); showAdvanceLinear(2,1,2); TW.clear() ; j = 0 ; while( Data.keepon(j,TW.time()) ) { TW.start() ; unsigned long d ; LinBox::rank(d,Mat,Method::SparseElimination()); TW.stop(); ++j ; } Data.selectSeries("Rank (SparseElimination)"); Data.setCurrentSeriesEntry(name,TW.time(),(double)Mat.size(),TW.time()); Data.addCurrentEntryMetaData(mmd); } void bench_rank(int carac) { typedef Givaro::Modular Field0 ; Field0 F(carac); int nb = 1; //! @bug no gz reader ? std::string m1 = "matrix/bibd_12_5_66x792.sms" ; ++nb; std::string m2 = "matrix/bibd_13_6_78x1716.sms" ; ++nb; std::string m3 = "matrix/bibd_14_7_91x3432.sms" ; ++nb; PlotData Data; showProgression Show((size_t)nb) ; launch_bench_rank(F,m1,Data); Show.FinishIter(); launch_bench_rank(F,m2,Data); Show.FinishIter(); launch_bench_rank(F,m3,Data); Show.FinishIter(); ///// PLOT STYLE //// LinBox::PlotStyle Style; Style.setTerm(LinBox::PlotStyle::Term::eps); Style.setTitle("Rank algorithms","seconds","matrices"); Style.setXtics(LinBox::PlotStyle::Options::oblique); /* default Style.setPlotType(LinBox::PlotStyle::Plot::histo); Style.setLineType(LinBox::PlotStyle::Line::histogram); */ LinBox::PlotGraph Graph(Data,Style); Graph.setOutFilename("rank_comparison"); // Graph.plot(); Graph.print(Tag::Printer::gnuplot); // change style Graph.refStyle().setTerm(LinBox::PlotStyle::Term::png); Graph.print(Tag::Printer::gnuplot); Graph.print(Tag::Printer::xml); Graph.print(Tag::Printer::html); return; } /* main */ int main( int ac, char ** av) { /* Argument parsing/setting */ static size_t min = 100; /* min size */ static size_t max = 1500; /* max size (not included) */ static size_t step = 300; /* step between 2 sizes */ // static std::list lst ; /* what bench to start ? */ // lst.push_front(1);// ={1,2} vivement le nouveau std... // lst.push_front(2); static Argument as[] = { { 'm', "-m min" , "Set minimal size of matrix to test." , TYPE_INT , &min }, { 'M', "-M Max" , "Set maximal size." , TYPE_INT , &max }, { 's', "-s step", "Sets the gap between two matrix sizes.", TYPE_INT , &step }, // { 'l', "-l list", "Only launches a subset of available benchmarks\n - 1: compare to raw blas\n - 2:various square sizes\n - 3:various shapes\n - 4: various parameters (a,b)\n - 5 : various transp. combinations", TYPE_INTLIST, &lst }, END_OF_ARGUMENTS }; parseArguments (ac, av, as); if (min >= max) { throw LinBoxError("min value should be smaller than max..."); } if (min + step >= max) { std::cout << "Warning : your x axis has only one point. You should have a smaller step." << std::endl; } /* square for various fields */ #if 1 { std::cout << " *** Lines plot *** " << std::endl; std::cout << "Benchmark square matrix multiplication via BMD.mul()" << std::endl; bench_square(min,max,step,13); } #endif /* different sparse matrix */ { std::cout << " *** Bar plot *** " << std::endl; std::cout << "Benchmark different matrices on different rank algorithms" << std::endl; bench_rank(13); } return EXIT_SUCCESS ; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark-metadata.C000066400000000000000000000025131347646240000207540ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark-metadata.C * @ingroup benchmarks * @brief metadata */ #ifndef __LINBOX_benchmarks_benchmark_metadata_C #define __LINBOX_benchmarks_benchmark_metadata_C #endif // __LINBOX_benchmarks_benchmark_metadata_C // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark-metadata.h000066400000000000000000000245721347646240000210320ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark-metadata.h * @ingroup benchmarks * @brief metadata */ #ifndef __LINBOX_benchmarks_benchmark_metadata_H #define __LINBOX_benchmarks_benchmark_metadata_H #include "benchmark-utils.h" // // Metadata // namespace LinBox { class MetaData ; //! This is the general metadata class class MetaData { private : svector_t name ; //! key/name of the metadata. for instance std::string _hash ; //! unique id (used to save space) svector_t keys ; //! keys svector_t vals ; //! values std::vector metadata ; //! child metadata array private : //! @internal recursively free memory void clean () { for (size_t i = 0 ; i < metadata.size() ; ++i) { metadata[i]->clean(); delete metadata[i] ; metadata[i] = nullptr ; } return; } //! @internal copy all, including metadata children void deep_copy(const MetaData * md) { name = md->getIds(); _hash = md->getHash(); keys = md->getKeys(); vals = md->getVals(); size_t md_size = md->getMetaDataSize(); if (md_size) { metadata.resize(md_size,nullptr); for (size_t i = 0 ; i deep_copy(md->getMetaData(i)); } } return; } //! @internal adds some metadata child void push_back(const MetaData * md) { size_t md_size = getMetaDataSize(); metadata.resize(md_size+1,nullptr); metadata[md_size] = new MetaData ; metadata[md_size]->deep_copy(md); } protected : const std::string & getName() const { return name[1] ; } void setHash(const std::string & myhash) { _hash = myhash ; } const svector_t & getIds() const { return name ; } const svector_t & getKeys() const { return keys ; } const svector_t & getVals() const { return vals ; } size_t getMetaDataSize() const { return metadata.size(); } const MetaData * getMetaData(const size_t & i) const { return metadata[i]; } std::string hasher(const std::string & data) { #ifdef HAVE_CXX11 std::hash my_hasher ; size_t the_hash = my_hasher(data); #else std::locale loc; const std::collate& coll = std::use_facet >(loc); // const member ? size_t the_hash = coll.hash(data.data(),data.data()+data.length()); #endif return toString(the_hash); } public: MetaData() : name(2) , _hash("") , keys(0) , vals(0) , metadata(0) { name[0] = "unknown" ; name[1] = name[0] + '_' + randomAlNum(8) ; } ~MetaData() { clean(); } MetaData(const MetaData * md) { deep_copy(md); } MetaData(const MetaData & md) { deep_copy(&md); } template void changeValue(const std::string & keyword, T& value) { size_t i ; bool ok = findKeyword(i, keys.begin(), keys.end(), keyword); if ( !ok ) // throw LinBoxError("undefined keyword",keyword); throw LinBoxError("undefined keyword"); vals[i] = toString(value); return; } const std::string & getValue(const std::string & keyword) { size_t i ; bool ok = findKeyword(i, keys.begin(), keys.end(), keyword); if ( !ok ) // throw LinBoxError("undefined keyword",keyword); throw LinBoxError("undefined keyword"); return vals[i] ; } void addValue(const std::string & nom, const std::string & val = "N/A") { keys.push_back(nom); vals.push_back(val); linbox_check(keys.size() == vals.size()); return; } template void addValue(const std::string & nom, const T & val ) { keys.push_back(nom); vals.push_back(toString(val)); linbox_check(keys.size() == vals.size()); return; } void addMetaData( const MetaData * md) { push_back(md); } void setIds (const std::string & key) { name[0] = key ; name[1] = key + "_" + randomAlNum(8) ; return; } #ifdef __LINBOX_HAVE_TINYXML2 void writeMetaData(tinyxml2::XMLElement ** data, tinyxml2::XMLDocument & doc) const { //! @warning only one name allowed. Todo : matrix1, matrix2,... using namespace tinyxml2; *data = doc.NewElement( getIds()[0].c_str() ); linbox_check(*data); (*data)->SetAttribute("id",getIds()[1].c_str()); #ifndef NDEBUG (*data)->SetAttribute("hash",getHash().c_str()); #endif for (size_t i = 0 ; i < keys.size() ; ++i ) { (*data)->SetAttribute(keys[i].c_str(),vals[i].c_str()); } for (size_t i = 0 ; i < getMetaDataSize() ; ++i ) { XMLElement * child = nullptr ; getMetaData(i)->writeMetaData(&child,doc); (*data)->InsertEndChild( child ); } return ; } #endif // should not be too public std::string getLocalString() const { std::string res = name[0] + ',' ; for (size_t i = 0 ; i < keys.size() ; ++i) res += keys[i] + '=' + vals[i] + ';'; return res ; } const std::string & getHash() const { return _hash ; } }; // MetaData } // LinBox // // MetaData specialized // #ifdef HAVE_CXX11 #include #endif namespace LinBox { // class RepresentationMetaData ; class MatrixMetaData ; // class VectorMetaData ; class StorageMetaData ; class GeneratorMetaData ; class FieldMetaData ; // class SolutionMetaData ; class AlgorithmMetaData ; class EnvrironmentMetaData ; class BenchmarkMetaData ; //! Field metadata class FieldMetaData : public MetaData { private : public : FieldMetaData() { setIds("field"); addValue("name"); addValue("characteristic"); hash(); } // a general field/ring has no exponent. template FieldMetaData( const Field & F) { #if 0 F.getMetaData(this); // this would also print representation also det(A, some_mehtod(), Meta) would do a dry run and print in Meta. #endif setIds("field"); std::ostringstream a ; F.write(a); addValue("name",a.str()); addValue("characteristic", F.characteristic()); hash(); } void hash() { std::string data = getLocalString() ; linbox_check(getMetaDataSize() == 0); setHash(hasher(data)); } }; // FieldMetaData //! Matrix metadata // what if MetaData changes something in MatrixMetaData and does not update hash ? class MatrixMetaData : public MetaData { void initMetadata() { addValue("rowdim"); addValue("coldim"); addValue("nbnz"); addValue("name"); FieldMetaData FMD; addMetaData(&FMD); } public: MatrixMetaData() { setIds("matrix"); initMetadata() ; hash(); } template MatrixMetaData(Matrix & M, const std::string nom = "N/A" ) { setIds("matrix"); // M.getMetaData(this); addValue("rowdim",M.rowdim()); addValue("coldim",M.coldim()); addValue("nbnz",M.size()); addValue("name",nom); FieldMetaData FMD(M.field()); addMetaData(&FMD); hash(); } void hash() { std::string data = getLocalString() ; if (getMetaDataSize() == 1) { // first the field. (@todo search for fields, then search for random generator.) data += getMetaData(0)->getLocalString(); } setHash(hasher(data)); } } ; // MatrixMetaData //! Environment metadata; class EnvironmentMetaData : public MetaData { void initMetadata() { // Machine // compiler } public : EnvironmentMetaData() { } }; // EnvironmentMetaData //! Benchmark metadata; class BenchmarkMetaData : public MetaData { void initMetadata() { // problem // machine } public : BenchmarkMetaData() { } }; // BenchmarkMetaData //! Algorithm metadata; class AlgorithmMetaData : public MetaData { void initMetadata() { // name // method } public : AlgorithmMetaData() { } }; // AlgorithmMetaData //! Generator metadata; class GeneratorMetaData : public MetaData { void initMetadata() { } public : GeneratorMetaData() { } }; // GeneratorMetaData //! Storage metadata; class StorageMetaData : public MetaData { void initMetadata() { } public : StorageMetaData() { } }; // StorageMetaData } // LinBox // // typedefs // namespace LinBox { typedef std::vector mvector_t ; } // LinBox // // Metadata Container // namespace LinBox { struct MetaDataSeries { mvector_t MetaDataVec ; // vector of metadatas // svector_t PointsIDs ; // vector of points ids smatrix_t MetaDataIDs ; // MetaDataIDs[i] is the list of indexes in PointIDs, corresponding to the points associated with metadatas MetaDataVec[i]. Could use some std::map as well. public: MetaDataSeries() : MetaDataVec(0) , MetaDataIDs(0) {}; // bool exists(size_t & j, const MetaData & m); // uses hashes to search for metadata. void push_back(const std::string & pointID, const MetaData & pointMD) { // size_t j = MetaDataVec.size(); // re-hash here ? std::string hsh = pointMD.getHash(); size_t i ; bool found = false ; for (i = 0 ; i < MetaDataVec.size() ; ++i) if (hsh == MetaDataVec[i].getHash()) { found = true ; break; } linbox_check((!found) && (i == MetaDataVec.size())); if (! found) { MetaDataVec.push_back(pointMD); svector_t used_by(0) ; used_by.push_back(pointID); MetaDataIDs.push_back(used_by) ; } else { MetaDataIDs[i].push_back(pointID); } } }; } // LinBox #ifdef LinBoxSrcOnly #include "benchmarks/benchmark-metadata.C" #endif #endif // __LINBOX_benchmarks_benchmark_metadata_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark-order-basis.C000066400000000000000000000315021347646240000214060ustar00rootroot00000000000000//#define __FFLASFFPACK_SEQUENTIAL #include #include size_t getPeakRSS( ); size_t getCurrentRSS( ); //#define MEMINFO std::right< Max Mem: "<>20) #define MEMINFO std::right<<" ----> Mem: "< #include #include #if defined(BSD) #include #endif #else #error "Unable to define getMemorySize( ) for an unknown OS." #endif #if defined(_WIN32) #include #include #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) #include #include #if defined(__APPLE__) && defined(__MACH__) #include #elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) #include #include #elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) #include #endif #else #error "Cannot define getPeakRSS( ) or getCurrentRSS( ) for an unknown OS." #endif /* END MEMORY INFO */ size_t getPeakRSS( ) { #if defined(_WIN32) /* Windows -------------------------------------------------- */ PROCESS_MEMORY_COUNTERS info; GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); return (size_t)info.PeakWorkingSetSize; #elif (defined(_AIX) || defined(__TOS__AIX__)) || (defined(__sun__) || defined(__sun) || defined(sun) && (defined(__SVR4) || defined(__svr4__))) /* AIX and Solaris ------------------------------------------ */ struct psinfo psinfo; int fd = -1; if ( (fd = open( "/proc/self/psinfo", O_RDONLY )) == -1 ) return (size_t)0L; /* Can't open? */ if ( read( fd, &psinfo, sizeof(psinfo) ) != sizeof(psinfo) ) { close( fd ); return (size_t)0L; /* Can't read? */ } close( fd ); return (size_t)(psinfo.pr_rssize * 1024L); #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) /* BSD, Linux, and OSX -------------------------------------- */ struct rusage rusage; getrusage( RUSAGE_SELF, &rusage ); #if defined(__APPLE__) && defined(__MACH__) return (size_t)rusage.ru_maxrss; #else return (size_t)(rusage.ru_maxrss * 1024L); #endif #else /* Unknown OS ----------------------------------------------- */ return (size_t)0L; /* Unsupported. */ #endif } /** * Returns the current resident set size (physical memory use) measured * in bytes, or zero if the value cannot be determined on this OS. */ size_t getCurrentRSS( ) { #if defined(_WIN32) /* Windows -------------------------------------------------- */ PROCESS_MEMORY_COUNTERS info; GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) ); return (size_t)info.WorkingSetSize; #elif defined(__APPLE__) && defined(__MACH__) /* OSX ------------------------------------------------------ */ struct mach_task_basic_info info; mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; if ( task_info( mach_task_self( ), MACH_TASK_BASIC_INFO, (task_info_t)&info, &infoCount ) != KERN_SUCCESS ) return (size_t)0L; /* Can't access? */ return (size_t)info.resident_size; #elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) /* Linux ---------------------------------------------------- */ long rss = 0L; FILE* fp = NULL; if ( (fp = fopen( "/proc/self/statm", "r" )) == NULL ) return (size_t)0L; /* Can't open? */ if ( fscanf( fp, "%*s%ld", &rss ) != 1 ) { fclose( fp ); return (size_t)0L; /* Can't read? */ } fclose( fp ); return (size_t)rss * (size_t)sysconf( _SC_PAGESIZE); #else /* AIX, BSD, Solaris, and Unknown OS ------------------------ */ return (size_t)0L; /* Unsupported. */ #endif } /** * Returns the size of physical memory (RAM) in bytes. */ size_t getMemorySize( ) { #if defined(_WIN32) && (defined(__CYGWIN__) || defined(__CYGWIN32__)) /* Cygwin under Windows. ------------------------------------ */ /* New 64-bit MEMORYSTATUSEX isn't available. Use old 32.bit */ MEMORYSTATUS status; status.dwLength = sizeof(status); GlobalMemoryStatus( &status ); return (size_t)status.dwTotalPhys; #elif defined(_WIN32) /* Windows. ------------------------------------------------- */ /* Use new 64-bit MEMORYSTATUSEX, not old 32-bit MEMORYSTATUS */ MEMORYSTATUSEX status; status.dwLength = sizeof(status); GlobalMemoryStatusEx( &status ); return (size_t)status.ullTotalPhys; #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) /* UNIX variants. ------------------------------------------- */ /* Prefer sysctl() over sysconf() except sysctl() HW_REALMEM and HW_PHYSMEM */ #if defined(CTL_HW) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM64)) int mib[2]; mib[0] = CTL_HW; #if defined(HW_MEMSIZE) mib[1] = HW_MEMSIZE; /* OSX. --------------------- */ #elif defined(HW_PHYSMEM64) mib[1] = HW_PHYSMEM64; /* NetBSD, OpenBSD. --------- */ #endif int64_t size = 0; /* 64-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (size_t)size; return 0L; /* Failed? */ #elif defined(_SC_AIX_REALMEM) /* AIX. ----------------------------------------------------- */ return (size_t)sysconf( _SC_AIX_REALMEM ) * (size_t)1024L; #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) /* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */ return (size_t)sysconf( _SC_PHYS_PAGES ) * (size_t)sysconf( _SC_PAGESIZE ); #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) /* Legacy. -------------------------------------------------- */ return (size_t)sysconf( _SC_PHYS_PAGES ) * (size_t)sysconf( _SC_PAGE_SIZE ); #elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM)) /* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */ int mib[2]; mib[0] = CTL_HW; #if defined(HW_REALMEM) mib[1] = HW_REALMEM; /* FreeBSD. ----------------- */ #elif defined(HW_PYSMEM) mib[1] = HW_PHYSMEM; /* Others. ------------------ */ #endif unsigned int size = 0; /* 32-bit */ size_t len = sizeof( size ); if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) return (size_t)size; return 0L; /* Failed? */ #endif /* sysctl and sysconf variants */ #else return 0L; /* Unknown OS. */ #endif } using namespace LinBox; using namespace std; template string check_sigma(const Field& F, const Mat& sigma, Mat& serie, size_t ord){ Mat T(F,sigma.rowdim(),serie.coldim(),sigma.size()+serie.size()-1); PolynomialMatrixMulDomain PMD(F); PMD.mul(T,sigma,serie); MatrixDomain MD(F); size_t i=0; string msg("....."); bool nul_sigma=true; while(i bool operator==(const MatPol& A, const MatPol& B){ MatrixDomain MD(A.field()); if (A.size()!=B.size()|| A.rowdim()!= B.rowdim() || A.coldim()!=B.coldim()){ cout< " < "< void bench_sigma(const Field& F, RandIter& Gen, size_t m, size_t n, size_t d, string target) { //typedef typename Field::Element Element; //typedef PolynomialMatrix MatrixP; typedef PolynomialMatrix MatrixP; std::cout<<"Order Basis computation over ";F.write(cout)<=64?16:0); //size_t data_in=3*m*n*d*memp; //size_t data_out=2*m*m*(d+1)*memp; //size_t data_comp= 2*m*m*d*(length(uint64_t(m*d)*p*p)+(p.bitsize()>26?8:0)); std::cout<<"**************************"<ref(i,j,k)); std::cout<<"[initial sequence] : "<realmeminfo())<<"Mo"< shift(m,0); OrderBasis SB(F); Timer chrono; #ifdef BENCH_MBASIS if (target=="ALL"){ MatrixP Sigma1(F, m, m, d+1); vector shift2(m,0); chrono.start(); SB.M_Basis(Sigma1, *Serie, d, shift2); chrono.stop(); std::cout << "M-Basis : " < shift3(m,0); // chrono.start(); // SB.oPM_Basis(Sigma3, Serie, d, shift3); // chrono.stop(); // std::cout << "PM-Basis iter : " < SmallField; //typedef Givaro::Modular LargeField; typedef Givaro::Modular LargeField; size_t logd=integer((uint64_t)d).bitsize(); std::cout<<"### matrix series is of size "<b-4){ std::cout<<"degree is to large for field bitsize: "< #include #include #include using namespace LinBox; using Ring = Givaro::ZRing; #if defined(__LINBOX_HAVE_MPI) #define getWTime(...) MPI_Wtime(__VA_ARGS__); #else #define getWTime(...) omp_get_wtime(__VA_ARGS__); #endif template static bool checkResult(Matrix& A, BlasVector& B, BlasVector& X, Integer& d) { const Ring& ZZ = A.field(); BlasVector B2(ZZ, A.coldim()); BlasVector B3(ZZ, A.coldim()); A.apply(B2, X); VectorDomain VD(ZZ); VD.mul(B3, B, d); if (!VD.areEqual(B2, B3)) { std::cerr << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" << std::endl; std::cerr << " The solution of solveCRA is incorrect " << std::endl; std::cerr << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" << std::endl; return false; } return true; } template void genData(Ring& ZZ, RandIterator& randIter, Matrix& A, BlasVector& B) { LinBox::RandomDenseMatrix RDM(ZZ, randIter); RDM.randomFullRank(A); B.random(randIter); } bool benchmark(size_t niter, BlasVector& x, BlasMatrix& A, BlasVector& B, Communicator& communicator) { Ring::Element d; double startTime = getWTime(); Method::CRAAuto method; method.pCommunicator = &communicator; solve(x, d, A, B, method); bool ok = false; if (communicator.master()) { double endTime = getWTime(); std::cout << "CPU time (seconds): " << (endTime - startTime) / double(niter) << std::endl; ok = checkResult(A, B, x, d); } communicator.bcast(ok, 0); return ok; } int main(int argc, char** argv) { Communicator communicator(&argc, &argv); if (communicator.master()) { std::cout << "Communicator size: " << communicator.size() << std::endl; } int seed = -1; size_t bits = 10; size_t niter = 1; size_t n = 100; bool loop = false; static Argument args[] = {{'n', "-n N", "Set column and row dimension of test matrices to N.", TYPE_INT, &n}, {'b', "-b B", "Set the maximum number of digits of integers to generate.", TYPE_INT, &bits}, {'i', "-i I", "Set the number of times to do the random unit tests.", TYPE_INT, &niter}, {'s', "-s SEED", "Set the seed for randomness (random if negative).", TYPE_INT, &seed}, {'l', "-l", "Infinite loop (ignoring -i).", TYPE_BOOL, &loop}, END_OF_ARGUMENTS}; parseArguments(argc, argv, args); // As only master uses the seed, there is no need to broadcast it if (communicator.master()) { if (seed < 0) { seed = time(NULL); } srand(seed); } Ring ZZ; DenseMatrix A(ZZ, n, n); BlasVector b(ZZ, A.coldim()); BlasVector x(ZZ, A.coldim()); bool ok = true; for (size_t j = 0u; loop | (j < niter); j++) { if (communicator.master()) { Ring::RandIter randIter(ZZ, bits, seed); genData(ZZ, randIter, A, b); } communicator.bcast(A, 0); communicator.bcast(b, 0); ok = benchmark(niter, x, A, b, communicator); if (!ok) break; ++seed; } if (!ok) { if (communicator.master()) { std::cerr << "Failed with seed: " << seed << std::endl; } return 1; } return 0; } linbox-1.6.3/benchmarks/benchmark-utils.C000066400000000000000000000167461347646240000203510ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*!@internal * @file benchmarks/benchmark-utils.C * @ingroup benchmarks * @brief utils */ #ifndef __LINBOX_benchmarks_benchmark_utils_C #define __LINBOX_benchmarks_benchmark_utils_C #include "linbox/linbox-config.h" #include "benchmark-utils.h" // // Terminal progression // namespace LinBox { void showAdvanceLinear(size_t curr, size_t min, size_t max) { std::cout << std::setprecision(4) << "\033[2K" << "\033[30D" << min < tps) { tim3[2] = tim3[1] ; tim3[1] = tim3[0] ; tim3[0] = tps ; } else if (tim3[1] > tps) { tim3[2] = tim3[1] ; tim3[1] = tps ; } else if (tim3[2] > tps) { tim3[2] = tps ; } return tim3 ; } double computeMFLOPS(const dvector_t & tim, const double mflo, Tag::TimeSelect ts ) { linbox_check(tim.size()); switch (ts) { case (Tag::TimeSelect::average) : { double tps = 0 ; for (size_t i = 0 ; i < tim.size() ; ++i) tps += tim[i] ; return computeMFLOPS(tps,mflo,(size_t)tim.size()); } case (Tag::TimeSelect::bestThree) : { if (tim.size() <4) return computeMFLOPS(tim,mflo,Tag::TimeSelect::average); dvector_t tps (3); double t1,t2 ; if (tim[0]> d ; // try to read. ss >> std::ws; // suppress whitespace return (!ss.fail() && ss.eof()) ; } bool fortifiedString(const std::string & s) { if (isDigit(s)) return true ; linbox_check(!s.empty()); return s.front() == '\"' && s.back() == '\"' ; } std::string unfortifyString(const std::string &s) { std::string t = s ; if (fortifiedString(s)) { t.erase(t.begin()); t.pop_back(); } return t; } std::string fortifyString(const std::string & s) { if (fortifiedString(s)) return s ; string r = "\"" ; return r + s + "\""; } char randomAlNum() { int c = rand()%62 ; c += 48 ; // c entre 48 et 109 if (c < 58) { return (char) c; } else { c += 7 ; if (c < 91) { return (char)c ; } else { c += 6 ; return (char)c; } } } std::string randomAlNum(const size_t & m) { std::string r = "" ; for (size_t i = 0 ; i < m ; ++i) r += randomAlNum(); return r ; } }// LinBox // // Machine information // namespace LinBox { //! get ISO time and date std::string getDateTime(const std::string & sep) { std::time_t rawtime; std::tm* timeinfo; char buffer [80]; std::time(&rawtime); timeinfo = std::gmtime(&rawtime); std::string fmt ; std::string date = "%Y-%m-%d" ; std::string time = "%H:%M:%S" ; std::string tz = "GMT" ; fmt = date + sep + time + sep + tz ; std::strftime(buffer,80,fmt.c_str(),timeinfo); std::string mytime(buffer); return mytime; } //! get some machine information (not cpu yet) smatrix_t getMachineInformation() { smatrix_t Machine(2); Machine[0].resize(5); Machine[1].resize(5); struct utsname unameData; uname(&unameData); Machine[0][0] = "sysname"; Machine[1][0] = unameData.sysname; Machine[0][1] = "nodename"; Machine[1][1] = unameData.nodename; Machine[0][2] = "release"; Machine[1][2] = unameData.release; Machine[0][3] = "version"; Machine[1][3] = unameData.version; Machine[0][4] = "machine"; Machine[1][4] = unameData.machine; // Machine[0][5] = "RAM (kb)"; // system("cat /proc/meminfo | grep MemTotal | awk '{print $2}'"); // Machine[0][6] = "CPU name"; // system("/proc/cpuinfo | grep 'model name' | awk '{$1=$2=$3=""; print $0}'"); // Machine[0][7] = "CPU nb"; // system("/proc/cpuinfo | grep 'model name' | wc -l"); // Machine[0][8] = "CPU Ghz"; // cpuid ? return Machine ; } } #endif // __LINBOX_benchmarks_benchmark_utils_C // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark-utils.h000066400000000000000000000166761347646240000204200ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark-utils.h * @ingroup benchmarks * @brief utils */ #ifndef __LINBOX_benchmarks_benchmark_utils_H #define __LINBOX_benchmarks_benchmark_utils_H /* ********************** */ /* Tags */ /* ********************** */ // Tags (cf linbox/linbox-tags.h ) namespace LinBox { namespace Tag { //! selection of best times in a series. #if HAVE_CXX11 enum struct TimeSelect : int32_t #else enum TimeSelect #endif { average = 1, //!< select the average bestThree = 2, //!< select the average among the three best (supposes order is <) bestOne = 3, //!< select the best one (supposes order is <) median = 4, //!< median medmean = 5 //!< interquartile mean (remove 25% extremes and average the rest) }; //! selection of printers #if HAVE_CXX11 enum struct Printer : int32_t #else enum Printer #endif { dat = 1, //!< print data raw (format chosen by implementation) tex = 2, //!< print latex useable xml = 3, //!< print using xml syntax gnuplot = 4, //!< print using gnuplot csv = 5, //!< coma separated values html = 6 //!< coma separated values }; } // Tag } // LinBox /* ********************** */ /* Outils */ /* ********************** */ // // typedefs data formats // namespace LinBox { //! vector of double typedef std::vector dvector_t; typedef std::vector svector_t; //! matrix of double typedef std::vector dmatrix_t; typedef std::vector smatrix_t; } // LinBox // // String processing // namespace LinBox { /** Check if a string is actually a double. * @param s string to check * @return true/false */ bool isDigit (const std::string & s); /** Tells is a string has double quotes around. * @param s string to test * @return true if s[0] == s[last] == '"' */ bool fortifiedString(const std::string & s); /** removes the surrounding quotes. * @param s removes quotes around if necessary * @return s without surrounding double quotes if necessary */ std::string unfortifyString(const std::string &s); /** adds surrounding quotes. * @param s add quotes around if necessary * @return s with surrounding double quotes if necessary */ std::string fortifyString(const std::string & s); /** Converts anything to a string * @param nam to be put in a string. */ template std::string toString(T & nam) { std::ostringstream nam_ss ; nam_ss << nam ; return nam_ss.str(); } //! finds keyword betwen begin and end, return true if found and i is the index where it is (possibly correspondig to end) bool findKeyword(size_t & i, const svector_t::const_iterator & begin, const svector_t::const_iterator & end, const std::string & keyword) { svector_t::const_iterator it ; it = std::find(begin, end, keyword); i = (size_t)std::distance(begin, it); return (it != end) ; } /*! @internal * @brief random :alnum: \c char. * [[:alnum:]] characters are in range * - num : 48-57 * - AL : 67-90 * - al : 97-122 * . * @return a random alphabetic or numeric char. */ char randomAlNum() ; /*! @internal * @brief random :alnum: \c string. * @param m size of string * [[:alnum:]] characters are in range * - num : 48-57 * - AL : 67-90 * - al : 97-122 * . * @return a random alphabetic or numeric char. */ std::string randomAlNum(const size_t & m) ; }// LinBox // // Machine info // namespace LinBox { /*! get ISO time and date * year-time YYYY-MM-DD 'sep' HH:MM:SS 'sep' (GMT) * @param sep separation between */ std::string getDateTime( const std::string & sep = " "); //! get some machine information (not cpu yet) smatrix_t getMachineInformation(); } // LinBox // // advancement printing on terminal // namespace LinBox { /*! show the advancement (on the terminal) * suppose linear advancement * @param curr current iteration * @param min starting iteration * @param max terminal iteration */ void showAdvanceLinear(size_t curr, size_t min, size_t max); /*! tells the current series of measure has completed (on the terminal) * @param curr current iteration * @param all number of iterations */ void showFinish(size_t curr, size_t all); /*! tells the current series of measure was skipped (on the terminal) * @param curr current iteration * @param all number of iterations */ void showSkip(size_t curr, size_t all); //! Show progression on the terminal (helper) class showProgression { private : size_t _cur_ ; //!< current iter size_t _tot_ ; //!< max iter public : //! constructor showProgression (size_t tot) ; //! show an inter has finished void FinishIter(); //! show an inter has been skipped. void SkipIter(); }; // showProgression } // LinBox // // computing megaflops from time (series)/number ops // namespace LinBox { /** * @brief computes the number of megaflops. * @param tim timer (seconds) * @param mflo number of operations (1e6 operations) * @param rpt number of experiences * @return mflo/(tim*rpt) */ double computeMFLOPS(const double & tim, const double mflo, const size_t rpt = 1); /*! @internal @brief inserts a time in a vector of 3 best times. * @param tim3 ordered form min to max vector of 3 best times * @param tps inserts that time in \p tim3 if better. * @return a reference to \p tim3 */ dvector_t & insertTime(dvector_t & tim3, const double & tps); /** * @brief computes the number of megaflops. * @param tim timer (seconds) * @param mflo number of operations (1e6 operations) * @param ts number of experiences to select. @see TimeSelect. Default to the best three * @return mflo/(tim*rpt) */ double computeMFLOPS(const dvector_t & tim, const double mflo, Tag::TimeSelect ts = Tag::TimeSelect::bestThree); } // // Chrono // warning : implem in benchmark.inl // namespace LinBox { template class Chrono { private : MyTimer _chrono_ ; dvector_t _times_ ; double _total_ ; public: Chrono() ; ~Chrono() ; void clear(); void start(); void stop(); double time() const; dvector_t times() const; }; // Chrono } // LinBox #ifdef LinBoxSrcOnly #include "benchmarks/benchmark-utils.C" #endif #endif // __LINBOX_benchmarks_benchmark_utils_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark.C000066400000000000000000001136411347646240000172030ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*!@internal * @file benchmarks/benchmark.C * @ingroup benchmarks * @brief utils */ #ifndef __LINBOX_benchmarks_benchmark_C #define __LINBOX_benchmarks_benchmark_C #include "linbox/linbox-config.h" #include "benchmark.h" // // PlotData // namespace LinBox { #ifdef __LINBOX_HAVE_TINYXML2 tinyxml2::XMLElement * PlotData::saveData(tinyxml2::XMLDocument & doc) { using namespace tinyxml2; XMLElement * data = doc.NewElement( "data" ); selectFirstSeries(); for (size_t i = 0 ; i < size() ; ++i ) { XMLElement * series = doc.NewElement ( "series" ); series->SetAttribute("name",unfortifyString(getCurrentSeriesName()).c_str()); for (size_t j = 0 ; j < getCurrentSeriesSize() ; ++j) { XMLElement * point = doc.NewElement ( "point" ); point->SetAttribute("x",unfortifyString(getCurrentSeriesEntry(j,Point::Labels() )).c_str()); point->SetAttribute("y",getCurrentSeriesEntry(j,Point::Values() )); point->SetAttribute("time",getCurrentSeriesEntry(j,Point::Times() )); point->SetAttribute("xval",getCurrentSeriesEntry(j,Point::Points() )); point->SetAttribute("id",getCurrentSeriesId(j).c_str()); series->InsertEndChild( point ); } data->InsertEndChild( series ); selectNextSeries(); } return data ; } #endif PlotData::PlotData() : _tableau_ (0) ,_series_label_ (0) ,_curr_series_ ( ) ,_time_watch_ ( ) { } PlotData::~PlotData() {} PlotData::PlotData(const PlotData & PD): _tableau_(PD.getTable()) ,_series_label_(PD.getSeriesLabels()) ,_curr_series_(PD.getCurrentSeriesNumber()) ,_time_watch_ (_tableau_[_curr_series_].Points,_tableau_[_curr_series_].Times) { } size_t PlotData::selectIndex(const std::string & nom) { std::string nomf = fortifyString(nom); size_t j ; bool ok = findKeyword(j,_series_label_.begin() , _series_label_.end() , nomf); if ( ! ok ) { linbox_check(j ==(size_t)_series_label_.size() ); _series_label_.push_back(fortifyString(nom)); _tableau_.resize(j+1); } initWatch(j); return j ; } size_t PlotData::getIndex(const std::string & nom) const { std::string nomf = fortifyString(nom); size_t j ; #ifdef NDEBUG findKeyword(j,_series_label_.begin() , _series_label_.end() , nomf); #else bool ok = findKeyword(j,_series_label_.begin() , _series_label_.end() , nomf); linbox_check(ok); #endif return j ; } void PlotData::clear() { _tableau_.resize(0); _series_label_.resize(0); _curr_series_ = 0; _time_watch_.clear(); } void PlotData::merge(const PlotData &PD) { for (size_t i = 0 ; i < (size_t)PD.size() ; ++i) { _tableau_.push_back(PD.getSeries(i)); _series_label_.push_back(fortifyString(PD.getSeriesName(i))); } return ; } size_t PlotData::size() const { linbox_check(_tableau_.size() == _series_label_.size()); return (size_t)_tableau_.size() ; } size_t PlotData::getCurrentSeriesNumber() const { return _curr_series_ ; } void PlotData::setSeriesName(const size_t & i, const std::string & nom) { linbox_check(i & PlotData::getTable() const { return _tableau_ ; } std::vector & PlotData::refTable() { return _tableau_ ; } bool PlotData::keepon(size_t & repet, double tim, bool usePrediction) { return _time_watch_.keepon(repet,tim, usePrediction); } void PlotData::load( const std::string & filename) { #ifdef __LINBOX_HAVE_TINYXML2 using namespace tinyxml2; XMLDocument doc; doc.LoadFile( filename.c_str() ); // std::cout << "loaded " << filename << std::endl; linbox_check(!doc.ErrorID()); XMLElement * bench = doc.FirstChildElement( "benchmark"); linbox_check(bench); XMLElement* data = bench -> FirstChildElement( "data" ) ; linbox_check(data); XMLElement* series = data -> FirstChildElement( "series" ) ; clear(); while (series) { newSeries( series->Attribute( "name" ) ); XMLElement * points = series->FirstChildElement() ; while (points) { std::string x = points->Attribute( "x" ); double y = points->DoubleAttribute( "y" ); double time = points->DoubleAttribute( "time" ); double xval = points->DoubleAttribute( "xval" ); // std::string id = points->Attribute( "id" ); setCurrentSeriesEntry(x,y,xval,time); // setCurrentSeriesEntryId(id); points = points->NextSiblingElement(); } series = series->NextSiblingElement(); } #else throw LinBoxError("You need tinyxml2 for loading data"); #endif // save("toto.xml"); } void PlotData::save( const std::string & filename , const std::string & title , const std::string & xtitle , const std::string & ytitle ) { #ifdef __LINBOX_HAVE_TINYXML2 using namespace tinyxml2; XMLDocument doc; doc.InsertEndChild(doc.NewDeclaration()); XMLElement * benchmark = doc.NewElement( "benchmark" ); doc.InsertEndChild(benchmark); { // Benchmark Metadata XMLElement * metadata = doc.NewElement( "metadata" ); smatrix_t uname = getMachineInformation(); for (size_t i = 0 ; i < uname[0].size() ; ++i) { metadata->SetAttribute(uname[0][i].c_str(),uname[1][i].c_str()); } std::string myTime = getDateTime(); metadata->SetAttribute("time",myTime.c_str()); benchmark->InsertEndChild(metadata); } { // Legende XMLElement * legende = doc.NewElement( "legende" ); std::string mytitle = title; if (title.empty()) mytitle =filename ; legende->SetAttribute("title",unfortifyString(mytitle).c_str()); if (!xtitle.empty()) legende->SetAttribute("X",unfortifyString(xtitle).c_str()); if (!ytitle.empty()) legende->SetAttribute("Y",unfortifyString(ytitle).c_str()); benchmark->InsertEndChild(legende); } { // series XMLElement * data = saveData(doc); benchmark->InsertEndChild(data); } { // point metadata XMLElement * metapoint = doc.NewElement( "PointMetaData" ); for (size_t i = 0 ; i < _meta_data_.MetaDataVec.size() ; ++i) { XMLElement * item = NULL ; _meta_data_.MetaDataVec[i].writeMetaData(&item,doc); std::string pts = ""; for (size_t j = 0 ; j < _meta_data_.MetaDataIDs[i].size(); ++j){ pts += _meta_data_.MetaDataIDs[i][j] ; if (j+1 < _meta_data_.MetaDataIDs[i].size() ) pts += ','; } item->SetAttribute("used_in",pts.c_str()); metapoint->InsertEndChild(item); } benchmark->InsertEndChild(metapoint); } doc.SaveFile(filename.c_str()); std::cout << "xml table saved in " << filename << std::endl; #else std::cout << "tinyxml2 is not installed, could not save" << std::endl; #endif } } // LinBox // // PlotStyle // namespace LinBox { PlotStyle::PlotStyle() : _term_(Term::eps),_plot_type_(Plot::histo),_line_type_(Line::histogram) { } void PlotStyle::setTitle ( const std::string & titre , const std::string & titre_y , const std::string & titre_x) { _title_ = titre ; _title_x_ = titre_x ; _title_y_ = titre_y ; } std::string PlotStyle::getTitle() const { std::string title = "#title\nset title \"" + _title_ + '\"'; if (!_title_x_.empty()) title +="\nset xlabel \"" + _title_x_ +'\"' ; if (!_title_y_.empty()) title +="\nset ylabel \"" + _title_y_ +'\"' ; return title ; } std::string PlotStyle::getTitleX() const { return "\nset xlabel \"" + _title_x_ + '\"' ; } std::string PlotStyle::PlotStyle::getTitleY() const { return "\nset ylabel \"" + _title_y_ + '\"' ; } std::string PlotStyle::getRawTitle(int index) const { switch (index) { case 0 : return _title_ ; case 1 : return _title_x_ ; case 2 : return _title_y_ ; default : return "bad index" ; } } void PlotStyle::setTerm( enum Term::Type term) { _term_ = term ; } std::string PlotStyle::getTerm() const { std::string term = "#term\nset term " ; switch(_term_) { case (Term::png) : term += "png noenhanced" ; break; case (Term::pdf) : std::cerr << "warning, pdf not really working for now" << std::endl; term += "postscript eps noenhanced color" ; break; case (Term::eps) : term += "postscript eps noenhanced color" ; break; case (Term::epstex) : term += "epslatex color colortext" ; break; case (Term::svg) : term += "svg" ; break; case (Term::other) : default : std::cerr << " *** error ***" << std::endl << "No supported term set" << std::endl; term += "unknown" ; } return term ; } std::string PlotStyle::getExt() const { switch(_term_) { case (Term::png) : return ".png" ; case (Term::pdf) : #ifndef __LINBOX_HAVE_GHOSTSCRIPT std::cerr << "warning, pdf not available. falling back to eps" << std::endl; #endif return ".pdf" ; case (Term::eps) : return ".eps" ; case (Term::epstex) : return ".tex" ; case (Term::svg) : return ".svg" ; default : std::cerr << "unknown extension set" << std::endl; return ".xxx" ; } } void PlotStyle::setKeyPos(const std::string & keypos) { _legend_pos_ = keypos ; } std::string PlotStyle::getKeyPos() const { std::string lgd ="#legend\nset key " ; if (!_legend_pos_.empty()) lgd += _legend_pos_ ; else lgd += " under" ; return lgd; } void PlotStyle::setXtics ( enum Options::Type opt, const std::string & more ) { _xtics_ = "#xtics\nset xtics "; if (opt == Options::oblique) _xtics_ += "nomirror rotate by -45 scale 0 "; else { linbox_check(opt == Options::other); _xtics_ += more ; } } const std::string & PlotStyle::getXtics() const { return _xtics_ ; } std::string PlotStyle::getOutput(const std::string & basnam) const { std::string setout = "#output\nset output \'" ; #ifdef __LINBOX_HAVE_GHOSTSCRIPT if (_term_ == Term::pdf) setout += "| ps2pdf - " ; setout += basnam + getExt() + '\'' ; #else setout += basnam + ".eps\'" ; #endif return setout ; } void PlotStyle::setPlotType(enum Plot::Type type) { _plot_type_ = type ; // _plot_extra_ = moreargs ; } void PlotStyle::setLineType( enum Line::Type type) { _line_type_ = type ; } std::string PlotStyle::getPlotType(const std::string & extraargs) // const { _styleopts_ += "\nset datafile missing \"inf\"" ; std::string mystyle = "#style\nset style data " ; if (_line_type_ != Line::other) { switch (_line_type_) { case (Line::lines) : mystyle += "lines" ; break; case (Line::histogram) : mystyle += "histogram" ; if (extraargs.empty()) // default style mystyle += "\nset style histogram cluster gap 1\nset style fill solid border rgb \"black\""; break; case (Line::points) : mystyle += "points" ; break; case (Line::linespoints) : mystyle += "linespoints" ; break; default : std::cout << __func__ << " : you should have set the LineType when ploting PlotType::graph !" << std::endl; mystyle += "other" ; } } else { // userd defined datastyle return _styleopts_ ; } // some more style args : mystyle += "\n" + _styleopts_ + "\n" + extraargs + "\n"; return mystyle ; } void PlotStyle::addPlotType(const std::string & style) { _styleopts_ += "\n" + style ; } void PlotStyle::setUsingSeries(size_t col, const std::string & moreargs) { linbox_check(col>1); std::ostringstream usingcols ; if (_plot_type_ == Plot::histo) { usingcols << " using " << col << ":xtic(1) title columnheader(" << col << ") " << moreargs << " "; } else { linbox_check(_plot_type_ == Plot::graph); usingcols << " using 1:" << col << " title columnheader(" << col << ") " << moreargs << " "; } _usingcols_ = usingcols.str(); } void PlotStyle::addUsingSeries(size_t col, const std::string & moreargs) { linbox_check(col>2); linbox_check(!_usingcols_.empty()); // we don't add if nothing was set std::ostringstream usingcols ; usingcols << ", \'\' using " ; if (_plot_type_ == Plot::graph) usingcols << "1:" ; usingcols << col << " ti col " << moreargs << " "; _usingcols_ += usingcols.str(); } void PlotStyle::setUsingSeries(std::list cols, const std::string & moreargs) { linbox_check(!cols.empty()); std::list::iterator it = cols.begin(); // no way to check *it< coldim... std::ostringstream usingcols ; if ( _plot_type_ == Plot::histo ) { usingcols << " using " << *it << ":xtic(1) title columnheader(" << *it << ") " << moreargs << " " ; ++it ; for (;it != cols.end();++it) { usingcols << ", \'\' using " << *it << " ti col " << moreargs << " "; } } else { linbox_check(_plot_type_ == Plot::graph); usingcols << " using 1:" << *it << " title columnheader(" << *it << ") " << moreargs << " "; ++it ; for (;it != cols.end();++it) { usingcols << ", \'\' using 1:" << *it << " ti col " << moreargs << " "; } } _usingcols_ = usingcols.str(); return; } void PlotStyle::addUsingSeries(std::list cols, const std::string & moreargs) { linbox_check(!cols.empty()); linbox_check(!_usingcols_.empty()); // we don't add if nothing was set std::list::iterator it = cols.begin(); std::ostringstream usingcols ; if (_plot_type_ == Plot::histo) { for (;it != cols.end();++it) { usingcols << ", \'\' using " << *it << " ti col " << moreargs << " "; } } else { linbox_check(_plot_type_ == Plot::graph); for (;it != cols.end();++it) { usingcols << ", \'\' using 1:" << *it << " ti col " << moreargs << " "; } } _usingcols_ += usingcols.str(); return; } void PlotStyle::setUsingSeries(std::pair cols, const std::string & moreargs) { std::ostringstream usingcols ; if (_plot_type_ == Plot::histo) { usingcols << " using " << cols.first << ":xtic(1) title columnheader(" << cols.first << ") " << moreargs << " "; usingcols << ", for [i=" << cols.first+1 << ":" << cols.second << "] \'\' using i title columnheader(i) " << moreargs << " "; } else { linbox_check(_plot_type_ == Plot::graph); usingcols << " using 1:" << cols.first << " title columnheader(" << cols.first << ") " << moreargs << " "; usingcols << ", for [i=" << cols.first+1 << ":" << cols.second << "] \'\' using 1:i title columnheader(i) " << moreargs << " "; } _usingcols_ = usingcols.str(); return; } void PlotStyle::addUsingSeries(std::pair cols, const std::string & moreargs) { linbox_check(!_usingcols_.empty()); // we don't add if nothing was set std::ostringstream usingcols ; if (_plot_type_ == Plot::histo) { usingcols << ", for i=[" << cols.first << ":" << cols.second << "] \'\' using i title columnheader(i) " << moreargs << " "; } else { usingcols << ", for i=[" << cols.first << ":" << cols.second << "] \'\' using 1:i title columnheader(i) " << moreargs << " "; linbox_check(_plot_type_ == Plot::graph); } _usingcols_ += usingcols.str(); } const std::string & PlotStyle::getUsingSeries() const { return _usingcols_ ; } } // LinBox // // Curve fitting // namespace LinBox { // fit X[nn-1,nn],Y[nn-1,nn] and return evaluation at x. double fit2(const dvector_t & X, const dvector_t & Y, int nn, double x) { size_t n = (size_t) nn; assert(n>0); if ( n==1 ) { if ( X[0]==X[1] ) { // std::cerr << "two of your evaluation points are at the same X" << std::endl; // this is NOT supposed to happen. return (Y[0]+Y[1])/2 ; } } if (X[n]==X[n-1]) // discard the last one. return fit2(X,Y,(int)n-1,x); double a = (Y[n-1]-Y[n])/(X[n-1]-X[n]) ; double b = (X[n-1]*Y[n]-X[n]*Y[n-1])/(X[n-1]-X[n]) ; return a*x+b ; } #ifdef __LINBOX_HAVE_LAPACK double fit_lapack3(const dvector_t &X, const dvector_t &Z, double x) { dvector_t Y = Z ; int n = (int) Z.size(); linbox_check((size_t)n == X.size()); int deg = (int) std::min((int)4,n); dvector_t V((size_t)(deg*n)); int ldv = deg ; #if 0 // Clapack (not working) for(size_t i = 0 ; i < (size_t)n; ++i) { for (size_t j = 0 ; j < (size_t)ldv; ++j) { V[i*ldv+j] = std::pow(X[i],j); } } clapack_dgels(CblasRowMajor, CblasNoTrans, n, deg, 1, &V[0], deg, &Y[0], 1); #endif #if 1 /* basic least squares */ // std::cout << V.size() << std::endl; for(size_t i = 0 ; i < (size_t)n; ++i) { for (size_t j = 0 ; j < (size_t)ldv; ++j) { V[i+j*(size_t)n] = std::pow(X[i],j); } } // std::cout << V << std::endl; int info; int ldun = 1 ; { int lwork = 2*n*deg*4 ; dvector_t work((size_t)lwork); char N[] = "N"; dgels_(N, &n, &ldv, &ldun, &(V[0]) , &n, &(Y[0]), &n, &work[0], &lwork, &info); } #endif #if 0 /* least squares using SVN and V not nec. full rank */ { int lwork = 2*deg+std::max(2*deg,n)*4 ; dvector_t work(lwork); dvector_t s(deg); double rcond = 1e-8 ; int rank ; dgelss_( &n, &ldv, &ldun, &(V[0]) , &n, &(Y[0]), &n, &s[0], &rcond, &rank, &work[0], &lwork, &info); } #endif #if 0 /* weighted least squares */ //DGGGLM // TODO #endif // std::cout << Y << std::endl; // horner eval the poly double res = 0.0; for(int i=deg-1; i >= 0; i--) { res = res * x + Y[(size_t)i]; } return res; } #endif // __LINBOX_HAVE_LAPACK double fit3(const dvector_t & X, const dvector_t & Y,int n, double x) { #ifndef __LINBOX_HAVE_LAPACK /* à la main */ linbox_check(n>1); linbox_check((size_t)n< X.size()); linbox_check((size_t)n< Y.size()); if (n==2) { if (X[1]==X[2]) return fit2(X,Y,1,x) ; if (X[0]==X[2]) { return fit2(X,Y,1,x) ; } if (X[0]==X[1]) { dvector_t X1(2); X1[0]=X[1]; X1[2]=X[2]; dvector_t Y1(2); Y1[0]=Y[1]; Y1[2]=Y[2]; return fit2(X1,Y1,1,x) ; } } if (X[n]==X[n-1]) { // discard last dvector_t X1(X.begin(),X.begin()+(n-1)); dvector_t Y1(Y.begin(),Y.begin()+(n-1)); return fit3(X1,Y1,n-1,x) ; } if (X[n]==X[n-2]) { // discard last dvector_t X1(X.begin(),X.begin()+(n-1)); dvector_t Y1(Y.begin(),Y.begin()+(n-1)); return fit3(X1,Y1,n-1,x) ; } if (X[n-1]==X[n-2]) { // discard last but one dvector_t X1(X.begin(),X.begin()+(n-1)); dvector_t Y1(Y.begin(),Y.begin()+(n-1)); X1[n-1]=X[n]; Y1[n-1]=Y[n]; return fit3(X1,Y1,n-1,x) ; } // todo: use Lagrange ? // std::cout << X[n-2] << ',' << X[n-1] << ',' << X[n] << std::endl; double d = (-X[n]+X[n-1])*(-X[n]+X[n-2])*(X[n-2]-X[n-1]) ; double a1 = -X[n]*Y[n-2]+X[n-2]*Y[n]+X[n-1]*Y[n-2]-X[n-1]*Y[n]+X[n]*Y[n-1]-X[n-2]*Y[n-1]; double a2 = -X[n-2]*X[n-2]*Y[n]+X[n-2]*X[n-2]*Y[n-1]+X[n-1]*X[n-1]*Y[n]-Y[n-2]*X[n-1]*X[n-1]+Y[n-2]*X[n]*X[n]-Y[n-1]*X[n]*X[n]; double a3 = X[n-2]*X[n-2]*X[n-1]*Y[n]-X[n-2]*X[n-2]*X[n]*Y[n-1]-X[n-1]*X[n-1]*X[n-2]*Y[n]+Y[n-1]*X[n-2]*X[n]*X[n]+X[n-1]*X[n-1]*X[n]*Y[n-2]-Y[n-2]*X[n-1]*X[n]*X[n]; // std::cout <<" (("<size() == Values_->size()); return (size_t)Points_->size(); } void TimeWatcher::clear() { Points_ = NULL ; Values_ = NULL ; } } // LinBox // // DataSeries // namespace LinBox { DataSeries:: DataSeries() : PointLabels(0) , Points(0) , Times(0) , Values(0) , UID(0) {} DataSeries::~DataSeries() {} #if 0 void DataSeries::resize(const size_t & n) { linbox_check(n == Values.size()+1); PointLabels.resize(n); Times.resize(n); Points.resize(n); Values.resize(n); UID.resize(n); return; } #endif size_t DataSeries::size() const { linbox_check(PointLabels.size() == Points.size()) linbox_check(Times.size() == Points.size()) linbox_check(Times.size() == Values.size()) linbox_check(Times.size() == UID.size()) return (size_t)Values.size(); } void DataSeries::push_back(const std::string & nam, const double & val, const double & x , const double &y ) { linbox_check(PointLabels.size() == Values.size()); PointLabels.push_back(nam); Values.push_back(val); if ( std::isnan(x) ) Points.push_back((double)Points.size()); else Points.push_back(x); if ( std::isnan(y)) Times.push_back(val); else Times.push_back(y); UID.push_back("point_" + randomAlNum(8)); return; } } // LinBox // // PlotGraph // namespace LinBox { //!@todo use getUsingSeries in latex/html/csv/xml void PlotGraph::_randomName() { std::ostringstream unique_filename ; unique_filename << _filename_ << '_' << getDateTime("_") << '_' << randomAlNum(4); // std::cout << unique_filename.str() << std::endl; _printname_ = unique_filename.str() ; } const std::string & PlotGraph::getFileName() { if (_printname_.empty()) _randomName(); return _printname_; } void PlotGraph::mergeTwoSeries( svector_t & merge_points , dmatrix_t & merge_data , const svector_t & pts , const dvector_t & dat , const size_t & idx) const { size_t data_size = (size_t)merge_points.size(); linbox_check(data_size == (size_t)merge_data[0].size()); merge_data[idx].resize(data_size,NAN); typename svector_t::iterator it ; for (size_t i = 0 ; i < pts.size() ; ++i) { size_t k ; bool ok = findKeyword(k, merge_points.begin(), merge_points.begin()+data_size,pts[i]); if ( ok ){ merge_data[idx][k] = dat[i] ; } else { for (size_t j = 0 ; j < idx ; ++j) { merge_data[j].push_back(NAN); } merge_data[idx].push_back(dat[i]) ; merge_points.push_back(pts[i]) ; } // std::cout << "..." << std::endl; // std::cout << merge_points << std::endl; // std::cout << merge_data << std::endl; // std::cout << "..." << std::endl; } return; } void PlotGraph::mergeSeries() { _data_. selectFirstSeries(); _merge_points_ = _data_.getCurrentSeries( Point::Labels() ) ; _merge_data_[0] = _data_.getCurrentSeries( Point::Values() ) ; // std::cout << "merge points " << _merge_points_ << std::endl; // std::cout << "merge data " << _merge_data_ << std::endl; for (size_t i = 1 ; i < _data_.size() ; ++i) { _data_. selectNextSeries() ; // std::cout << "to be merged " << i << " : " << std::endl; // std::cout << "new points " << _data_.getCurrentSeriesPointLabel() << std::endl; // std::cout << "new data " << _data_.getCurrentSeriesValues() << std::endl; mergeTwoSeries(_merge_points_,_merge_data_, _data_. getCurrentSeries( Point::Labels() ), _data_. getCurrentSeries( Point::Values() ),i); // std::cout << "result : " << std::endl; // std::cout << "merge points " << _merge_points_ << std::endl; // std::cout << "merge data " << _merge_data_ << std::endl; } return ; } void PlotGraph::print_csv() { char comma = ','; char comment = '#'; size_t nb_points = (size_t)_merge_points_.size() ; size_t nb_series = (size_t)_data_.size() ; std::string unique_filename = getFileName(); std::string DataFileName = unique_filename + ".csv" ; std::ofstream DF(DataFileName.c_str()); /* Data file to be plot */ DF.precision(2); // metadata DF << comment << fortifyString("title") << comma << fortifyString(_style_.getRawTitle()) << std::endl; DF << comment << fortifyString("date") << fortifyString(getDateTime()) << std::endl; smatrix_t uname = getMachineInformation(); for (size_t i = 0 ; i < uname[0].size() ; ++i) DF << comment << fortifyString(uname[0][i]) << comma << fortifyString(uname[1][i]) << std::endl ; // data DF << fortifyString(_style_.getRawTitle(1)) << comma ; for (size_t i = 0 ; i < nb_series ; ++i) { DF << _data_.getSeriesLabel(i) ; if (i != nb_series -1) DF << comma ; } DF << std::endl; for (size_t j = 0 ; j < nb_points ; ++j) { DF << _merge_points_[j] << comma; for (size_t i = 0 ; i < nb_series ; ++i) { DF << _merge_data_[i][j] ; if (i != nb_series -1) DF << comma ; } DF << std::endl; } std::cout << "csv data in " << DataFileName << std::endl; } void PlotGraph::print_dat() { print_gnuplot(true); } void PlotGraph::print_xml() { #ifdef __LINBOX_HAVE_TINYXML2 std::string unique_filename = getFileName(); unique_filename += ".xml" ; _data_.save(unique_filename,_style_.getRawTitle(),_style_.getRawTitle(1),_style_.getRawTitle(2)); load(unique_filename); #else std::cout << "tinyxml2 is not installed, could not print" << std::endl; exit(-1); #endif return ; } void PlotGraph::print_html() { std::string comment_in = ""; size_t nb_points = (size_t)_merge_points_.size() ; size_t nb_series = (size_t)_data_.size() ; std::string unique_filename = getFileName(); std::string DataFileName = unique_filename + ".html" ; std::ofstream DF(DataFileName.c_str()); /* Data file to be plot */ DF.precision(2); // metadata DF << comment_in << ("date") << (getDateTime()) << std::endl; smatrix_t uname = getMachineInformation(); for (size_t i = 0 ; i < uname[0].size() ; ++i) DF << (uname[0][i]) << " : " << (uname[1][i]) << std::endl ; DF << comment_out << std::endl ; // data DF << "" << std::endl; DF << "" << std::endl; DF << " " << std::endl; DF << ""; for (size_t i = 0 ; i < nb_series ; ++i) { DF << ""; } DF << " " << std::endl; for (size_t j = 0 ; j < nb_points ; ++j) { DF << " " << std::endl; DF << ""; for (size_t i = 0 ; i < nb_series ; ++i) { DF << ""; } DF << std::endl; DF << "" << std::endl; } DF << "
" << (_style_.getRawTitle()) << " (data in " << _style_.getRawTitle(2) << ')' << "
" << _style_.getRawTitle(1) << " " << unfortifyString(_data_.getSeriesLabel(i)) << "
" << unfortifyString(_merge_points_[j]) << " " << _merge_data_[i][j] << "
" << std::endl; std::cout << "html data in " << DataFileName << std::endl; } void PlotGraph::print_latex() { size_t nb_points = (size_t)_merge_points_.size(); size_t nb_series = _data_.size(); linbox_check(nb_points); linbox_check(nb_series); // srand(time(NULL)); // std::ostringstream unique_filename ; std::string unique_filename = getFileName(); unique_filename += ".tex" ; // std::cout << _filename_ << " plot in " << unique_filename << '.'<< std::endl; std::ofstream FN(unique_filename.c_str()); //!@todo check FN opened. // begin FN << "%\\usepackage{slashbox}" << std::endl; FN << "\\begin{table}" << std::endl; FN << "\\centering" << std::endl; // format FN << "\\begin{tabular}{c||" ; for (size_t j = nb_points ; j-- ; ) FN << 'c' ; FN << "|}" << std::endl; // top left case std::string series = _style_.getRawTitle(2); std::string points = _style_.getRawTitle(1); if (!points.empty()) { FN << "\\backslashbox{" << points << "}{" << series << "}" ; } else { FN << series ; } // first line for (size_t j = 0 ; j < nb_points ; ++j ) { FN << " & " << _merge_points_[j] ; } // lines of data FN << std::endl << "\\hline" << std::endl; FN.precision(2); for (size_t i = 0 ; i < nb_series ; ++i) { FN << _data_.getSeriesLabel(i) ; for (size_t j = 0 ; j < nb_points ; ++j ) FN << " & " << _merge_data_[i][j] ; if (i+1 < nb_series ) FN << "\\\\" ; FN << std::endl; } // end FN << "\\end{tabular}" << std::endl; FN << "\\caption{" << _style_.getRawTitle() << "}" << std::endl; FN << "\\label{tab:<+" << "label+>}" << std::endl; FN << "\\end{table}" << std::endl ; FN.close(); std::cout << "latex table in " << unique_filename << '.' << std::endl; return ; } void PlotGraph::print_gnuplot(bool only_data) { #ifndef __LINBOX_HAVE_GNUPLOT std::cout << "gnuplot is not available on your system. only the data will be printed" << std::endl; #endif size_t nb_points = (size_t)_merge_points_.size() ; size_t nb_series = (size_t)_data_.size() ; std::string unique_filename = getFileName(); std::string DataFileName = unique_filename + ".dat" ; std::ofstream DF(DataFileName.c_str()); /* Data file to be plot */ // DF.precision(_style_.getPrecision()); DF.precision(2); char comment = '#' ; char comma = ' '; // metadata DF << comment << ("title") << comma << (_style_.getRawTitle()) << std::endl; DF << comment << ("date") << (getDateTime()) << std::endl; smatrix_t uname = getMachineInformation(); for (size_t i = 0 ; i < uname[0].size() ; ++i) DF << comment << (uname[0][i]) << comma << (uname[1][i]) << std::endl ; DF << "legend " ; for (size_t i = 0 ; i < nb_series ; ++i) { DF << _data_.getSeriesLabel(i) << ' ' ; } DF << std::endl; for (size_t j = 0 ; j < nb_points ; ++j) { DF << _merge_points_[j] ; for (size_t i = 0 ; i < nb_series ; ++i) { DF << " " << _merge_data_[i][j] ; } DF << std::endl; } if (only_data) std::cout << "data in " << DataFileName << std::endl; #ifdef __LINBOX_HAVE_GNUPLOT if (!only_data) { std::string PlotFileName = unique_filename + ".gp" ; std::ofstream PF(PlotFileName.c_str()); /* Ploting script */ PF << "#" << _filename_ << std::endl; PF << _style_.getTerm() << std::endl; PF << _style_.getOutput(unique_filename) << std::endl; PF << _style_.getTitle() << std::endl; PF << _style_.getKeyPos() << std::endl; PF << _style_.getXtics() << std::endl; PF << _style_.getPlotType() << std::endl; PF << getPlotCommand(DataFileName) << std::endl; PF.close(); std::string command( "gnuplot " ) ; command += PlotFileName ; int err = system( command.c_str() ) ; if (err) { std::cout << "errors have occured. Look at gnuplot output." << std::endl; } else { std::cout << "Output generated as " << unique_filename + _style_.getExt() << std::endl; } } #endif return; } void PlotGraph::setData( PlotData & data ) { _data_ = data ; } PlotData & PlotGraph::refData( PlotData & data) { return data = _data_ ; } void PlotGraph::setStyle( PlotStyle & style ) { _style_ = style ; } PlotStyle & PlotGraph::refStyle( PlotStyle & style) { return style = _style_ ; } // not implemented yet void PlotGraph::sortSeries() {} // not implemented yet void PlotGraph::unique() {} PlotGraph::PlotGraph( PlotData & data, PlotStyle & style ) : _data_(data) ,_style_(style) ,_filename_("") ,_printname_("") ,_merge_data_(data.size()) ,_merge_points_(data.getSeries(0).size()) { srand((unsigned)time(NULL)); mergeSeries(); } void PlotGraph::setOutFilename( const std::string & filename ) { int err = system( "test -d data || ( rm -rf data && mkdir data )" ) ; if (err) { throw LinBoxError("could not create directory data"); } if ( filename.empty() ) { _filename_ = "./data/plotdata" ; std::cerr << "you should provide a filename. Using " << _filename_ << " as default ."<((size_t)2,(size_t)_merge_data_.size()+1)); } return _style_.getUsingSeries(); } std::string PlotGraph::getPlotCommand(const std::string & File) //const { std::string PC = "#plot\nplot \'" + File + "\' "; PC += getUsingSeries() ; return PC ; } void PlotGraph::print( Tag::Printer pt ) { switch (pt) { case (Tag::Printer::xml): { print_xml(); break; } case (Tag::Printer::csv) : { print_csv(); break; } case (Tag::Printer::dat) : { print_dat(); break; } case (Tag::Printer::gnuplot) : { print_gnuplot(); break; } case (Tag::Printer::tex) : { print_latex(); break; } case (Tag::Printer::html) : { print_html(); break; } default : { throw LinBoxError("printer unknown"); } } return ; } void PlotGraph::save() { return print_xml(); } void PlotGraph::load(const std::string & filename) { return _data_.load(filename); } } // LinBox #endif // __LINBOX_benchmarks_benchmark_C // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark.doxy000066400000000000000000000033741347646240000200050ustar00rootroot00000000000000/* * Coypright (c) LinBox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * */ /*! \ingroup linbox * \defgroup benchmarks Benchmarks * @brief This directory is used to perform benchmarks on LinBox. * The benchmarks are meant for : * - the \e user to guide her through the various choices of * algorithms/implementation provided in her particular case. * - the \e developer to test her new algorithms against the others or check * that the newest shiny subroutine she just wrote didn't deteriorate too much * the performance of LinBox :) (regression testing purpose). * . * * Benchmarks can be grouped in : * - basic routines (fflas/ffpack, integer operations,...) ; * - algorithms ; * - solutions. * . * * When another free library (NTL, IML,...) provides a routine that exists in * LinBox, we want to be able to compare it to our implementation. * * Default parameters can be changed on the command-line, just as in \c * examples/ and \c tests/. */ // vim:syntax=doxygen linbox-1.6.3/benchmarks/benchmark.h000066400000000000000000001012321347646240000172410ustar00rootroot00000000000000/* Copyright (C) 2011 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark.h * @ingroup benchmarks * @brief Common header to ease benchmarking routines. * We provide a class to easily populate and plot files that represent * benchmarks. * * We use gnuplot for the plotting part * or LaTeX to provide tables. A minimum knowledge of \c Gnuplot is a plus but * the \c benchmark-* files should provide enough examples for creating * standard (not too fancy) plots. * * We fall back to plain latex tabulars when gnuplot is not available. We plot * graphs in files whose name is extended by a random 8-char string to avoid * écraser files. * */ #ifndef __LINBOX_benchmarks_benchmark_H #define __LINBOX_benchmarks_benchmark_H // here classes TimeWatcher, PlotStyle, PlotData are declared #include "linbox/linbox-config.h" #include #include "linbox/integer.h" #include "linbox/util/debug.h" #include "tests/test-common.h" #include "linbox/util/timer.h" #include #include #include // setprecision #include #include #ifdef __LINBOX_HAVE_TINYXML2 #include #endif #include "benchmark-utils.h" #include "benchmark-metadata.h" // // TimeWatcher // namespace LinBox { /*! Helper. * This helper has several functions : * - Records the timings * - predict the execution time for the next experiment * - helps producing enough experiments (but not too much and not too time consuming) for producing a valid measure. * . * @warning if the timings are too short, this may not be accurate. * * See member function help for more information. */ class TimeWatcher { private : dvector_t * Points_; //!< Points data. If Points_[i] = x, then Values_[i]=f(x). dvector_t * Values_; //!< Time data. See \p Points_ . size_t MaxRepet_; //!< Maximum number of repetitions of timings size_t MinRepet_; //!< Minimum number of repetitions of timings double MaxTime_; //!< Maximum time to be spent on repetitions (after MinRepet_ iters have been done) double AbortTime_; //!< Time to abort a series of computation. bool aborted_; //!< abort any subsequent computation public: /*! constructor. * Inits the time watcher with a pair of points/values * @param pts vector of points * @param vals vector of times */ TimeWatcher (dvector_t & pts, dvector_t & vals) ; //! Null Constructor. The pointers are intialised to NULL TimeWatcher () ; void init(dvector_t & pts, dvector_t & vals); //! returns the vector of abscissa (points) dvector_t & refX() ; //! returns the vector of ordiantes (values) dvector_t & refY() ; /** Prediction for the next experiment time. * It is assumed that \c predict(0)=0. If Curent_<3, a linear, * then quadratic fit is done. Other wise, a cubic fit is * performed. * @param x the next evaluation point. * @return f(x) where f tries to fit the points : \f$ f(\mathtt{Data\_}[0][0..\mathtt{Current\_}-1]) \approx refY()[0..\mathtt{Current\_}-1]\f$ */ double predict(double x) ; /*! @brief Watches a timer and a number and repet and signals if over. * * We want at least 2 repetions but not more than maxtime spent on timing. * * @param repet number of previous repetitions. Should be 0 on the first time \c keepon is called. * @param tim timer to watch * @param maxtime maximum time (in seconds) until \c watchon tells stop. * @return \c true if we conditions are not met to stop, \c false otherwise. * @pre \c tim should have been started previously ! * */ bool keepon(size_t & repet, double tim, bool usePrediction = false) ; //! size size_t size() const; //! clear the pointers (not the settings) void clear(); } ; // TimeWatcher } // LinBox // // DataSeries // namespace LinBox { /** @brief this structure holds a bunch of timings. * It collects the points, the time spent at each point and a measure * (for instance mflops). * @todo Times and Values could be dmatrix_t (and mergeable) */ struct DataSeries { svector_t PointLabels ; //!< points abscisa, values for the x axis. Used in legend for the X axis. dvector_t Points ; //!< points abscisa, values for the x axis. Used in TimeWatcher (for instance, if PointLabels are the names of sparse matrices, Points would be their number of non zeros, or 1,2,3,... or whatever relevant for predicting time) dvector_t Times ; //!< actual computation times. dvector_t Values ; //!< actual data to be plotted (for instance mflops) svector_t UID ; //!< unique id of a point. //! Constructor DataSeries() ; ~DataSeries() ; #if 0 /** @brief resize * @param n new size * @pre the size before was n-1 */ void resize(const size_t & n); #endif //! Size of the series of measurements. size_t size() const; //! add some new data. void push_back(const std::string & nam, const double & val, const double & x = NAN, const double &y = NAN); // use it but change time // void useMetadata(const MetaData & m) ; }; // DataSeries } // LinBox /* ********************** */ /* Plot structures */ /* ********************** */ // // PlotStyle // namespace LinBox { /*! @brief Represents a table of values to plot (2D). * list of values are reprensented by vectors. the table is a vector * of these vectors. * * @warning NaN, inf are used as missing data. More genenally * we could store data in strings. * @todo Allow for 'speed up against col X' style * @todo make depend on PlotData */ //!@todo setUsingSeries(const svector_t &) class PlotStyle { public: //! What format the plot should be in? struct Term { //! Term type enum Type { png = 100, //!< png. Portable Network Graphics file. pdf = 101, //!< pdf. Portable Document Format actually, this is eps converted to pdf. eps = 102, //!< eps. Encapsulated PostScript. Cool for inclusion in LaTex files. This is the default. epstex = 107, //!< epslatex. Encapsulated PostScript. Cool for inclusion in LaTex files with latex formulas. svg = 103, //!< sgv. Scalable Vector Graphics. tex = 104, //!< tex. Simple tabular. html = 105, //!< html. HTML table. other= 106 //!< don't know yet... } ; }; // enum NoType { other = 0 } ; //! What style of graphic : histogram ? graph ? struct Plot { //! Plot type enum Type { histo = 200, //! histogram plot. This is the default. x ticks are evenly spaced, whatever there value and are labelled with their value. graph = 201, //! standard plot. Plots y_i=f(x) with x in the first colum and y_i in ith column. x-ticks are well spaced. This will not work if the X are not numbers (but strings). other = 202 //! other (ie user supplied). } ; }; struct Line { enum Type { lines = 300, //! lines. histogram = 301, //! histogram (boxes). linespoints= 302, //! lines with points. (default) points = 303, //! only the points. other = 304 //! rien. } ; }; struct Options { enum Type { oblique = 400, other = 401 }; }; /*! @brief Constructor. * By default, creates an histogram representing the data in an eps plot. */ PlotStyle() ; /*! @brief sets the titles in the graph. * @param titre Title of the graph * @param titre_y Title of the y-axis (series) * @param titre_x Title of the x-axis (data points) */ void setTitle ( const std::string & titre , const std::string & titre_y , const std::string & titre_x); /*! @brief Gets the title of the graph. * @return a gnuplot command to set the title of the graph. */ std::string getTitle() const ; /*! @brief Gets the title of points abscissa. * @return a gnuplot command to set the title of the abscissa. */ std::string getTitleX() const ; /*! @brief Gets the title of the series. * @return a gnuplot command to set the title of the ordinate (series). */ std::string getTitleY() const ; /*! @brief get the title string. * @param index can be (0,1,2) */ std::string getRawTitle(int index=0) const ; /*! @brief Sets the output format. * @sa TermType * @param term type */ void setTerm( enum Term::Type term) ; /*! @brief Gets the output format. * @return string for setting the expected output format in gnuplot. * @warning noenhanced allows underscores while enhanced does subscripts. * if we add a (no) enhanced option, we'll have to add a safeFormat(std::string) that replaces \c _ with \_ . * This is tricky and can be done at "post production" stage :-) */ std::string getTerm() const ; /*! @brief Gets the graph output extension. * By default, this is ".eps". * @return a string for this extension, including the sepatating dot. * */ std::string getExt() const ; #if 0 /*! @brief gets the style of the graph. * This is very user-tweakable !! * @return the style for gnuplot. */ const std::string & getStyle() { return "#style\n"+_styleopts_ ; } /*! @brief sets the style of the graph. * This is very user-tweakable !! * @param style the style for gnuplot as a gnuplot command. */ void setStyle(const std::string & style) { _styleopts_ = style ; } #endif /*! @brief sets the legend position. * @param keypos the arguments to key (where the legend should be put) * can be : * * set key {on|off} {default} * {{inside | outside} | {lmargin | rmargin | tmargin | bmargin} | {at }} * {left | right | center} {top | bottom | center} * {vertical | horizontal} {Left | Right} * {{no}reverse} {{no}invert} * {samplen } {spacing } * {width } * {height } * {{no}autotitle {columnheader}} * {title ""} {{no}enhanced} * {{no}box { {linestyle | ls } | {linetype | lt } {linewidth | lw }}} * */ void setKeyPos(const std::string & keypos) ; /*! @brief Gets the legend position. * by default, it is "under". */ std::string getKeyPos() const ; /*! @brief sets the position of the labels on the X absciss. * @param opt * @param more more stuff */ void setXtics ( enum Options::Type opt, const std::string & more="") ; /*! @brief Gets the legend position. * by default, it is 45° inclined (use in on long tics legends). */ const std::string & getXtics() const ; /*! @brief Gets the name of the output graph. * @param basnam the raw name for the output. * @return basnam+extenstion. */ std::string getOutput(const std::string & basnam) const ; /*! @brief Sets the type of plot. * @param type the type. * @sa PlotType * */ void setPlotType(enum Plot::Type type) ; /*! @brief Sets the way dots are linked. * @sa LineType * @param type type */ void setLineType( enum Line::Type type) ; /*! @brief Gets the type of plot. * default is histogram, or if graph is supplied, then the default is linespoints. * Can be totally customized. * @return a string for gnuplot to set the plot type. * @sa PlotType * */ std::string getPlotType(const std::string & extraargs ="") ; /*! @brief adds some style line to the graph. * This is very user-tweakable !! * @param style a style line for gnuplot as a gnuplot command. */ void addPlotType(const std::string & style) ; /*! @brief tells which columns to use. * @param col a column to use. * @param moreargs more stuff */ void setUsingSeries(size_t col, const std::string & moreargs= "") ; /*! @brief adds a column to use * @param col a column to use. * @param moreargs more stuff * @pre \p _usingcols_ is not empty, ie \c setUsingSeries has already been called. */ void addUsingSeries(size_t col, const std::string & moreargs= "") ; /*! @brief tells which columns to use. * @param cols a list of column to use. * @param moreargs more stuff */ void setUsingSeries(std::list cols, const std::string & moreargs= "") ; /*! @brief adds a set of columns to use. * @param cols a list of column to use. * @param moreargs more stuff * @pre \p _usingcols_ is not empty, ie \c setUsingSeries has already been called. */ void addUsingSeries(std::list cols, const std::string & moreargs= "") ; /*! @brief tells which columns to use. * @param cols all colums between \c cols.first and \c cols.second (included) * will be used. * @param moreargs more stuff * */ void setUsingSeries(std::pair cols, const std::string & moreargs= "") ; /*! @brief adds contiguous columns to use. * @param cols all colums between \c cols.first and \c * cols.second will be used. * @param moreargs more stuff * @pre \p _usingcols_ is not empty, ie \c setUsingSeries has * already been called. * */ void addUsingSeries(std::pair cols, const std::string & moreargs= "") ; const std::string & getUsingSeries() const ; private : // int _precision_ ; //!< precision of the output. by default 2. /* Legend. */ std::string _legend_pos_; //!< legend position /* titles */ std::string _title_ ; //!< name of the graph std::string _title_x_ ; //!< title for the points std::string _title_y_ ; //!< title for the series std::string _xtics_ ; //!< format for the x tics. /* units */ // std::string _unit_ ; /* terminal output */ enum Term::Type _term_ ; //!< output data format. // std::string _termopts_ ; /* plotting style */ enum Plot::Type _plot_type_ ; //!< histogram/graph style // std::string _plot_extra_; //!< extra specification for the plot style. default empty. enum Line::Type _line_type_ ; //!< style for the representation of points std::string _styleopts_ ; //!< gp style command. /* columns to use */ std::string _usingcols_ ; //!< columns to be used (gp command) } ; // PlotStyle } // LinBox // // PlotData // namespace LinBox { struct Point { //! x struct Labels { typedef std::string type; }; //! y struct Values { typedef double type; } ; //! numerical value for x struct Points { typedef double type; }; //! y time struct Times { typedef double type; }; } ; /*! @brief The raw data to plot. * Represents the labels for the points (X axis) and the values for * each series of measures (Y axis). * * Members that set/get are named as follows : * - getX(nom,j) return the j'th element of series named nom * - getX(i,j) return the j'th element of series number i * - getCurrentSeriesX(j) return the j'th element of current series * - getCurrentEntryX() return the current element of current series (ie the last one) * - . * * Members are also named as follows : * - getXXX is a const member * - selectXXX is non const and may create/update stuff * - refXXX returns a reference * - setXXX sets something * * @internal The internal representation is a * vector of vector, each series of point being a vector of double. * * @tparam Xkind the X axis is parametrised by \p Xkind (string, int, double...) * The Y axis is always represented by double. * @todo put the legend (title, x, y) in there */ class PlotData { private : std::vector _tableau_ ; //!< data. \c _tableau_[i] represents a series of measurements. A data series is augmented only via the \c push_back method. A series may be accessed by its name, its number or it is the current working series. svector_t _series_label_ ; //!< label for each series of measures. Used in the legend of the plots/tables of points. mutable size_t _curr_series_ ; //!< index of the current series of measurements. mutable TimeWatcher _time_watch_ ; //!< time predictor, helper. See \c TimeWatcher. MetaData _plot_data_ ; //!< information abouth the benchmark MetaDataSeries _meta_data_ ; //!< information about each point private: #ifdef __LINBOX_HAVE_TINYXML2 //! @internal data part of the XML output tinyxml2::XMLElement * saveData(tinyxml2::XMLDocument & doc) ; #endif /** Finds the index of a series by its name. * @param nom name of the series * @return its index */ size_t getIndex(const std::string & nom) const ; /** Finds the index of a series by its name. * @param nom name of the series * @return its index */ size_t selectIndex(const std::string & nom) ; public : /*! Returns the ith series of measurements. * @param i ith series to be returned */ const DataSeries & getSeries(const size_t &i) const ; /*! Returns the ith series of measurements. * @param i ith series to be returned */ const DataSeries & selectSeries(const size_t &i) ; /*! Returns the series of measurements after its name. * @param nom name of series to be returned */ const DataSeries & selectSeries(const std::string &name) ; /*! Returns the current series of measurements. */ const DataSeries & getCurrentSeries() const; /*! Returns the ith series of measurements. * @param i ith series to be returned */ DataSeries & refSeries(const size_t &i) ; /*! Returns the ith series of measurements. * @param i ith series to be returned */ DataSeries & refSeries(const std::string & nom) ; /*! Returns the current series of measurements. */ DataSeries & refCurrentSeries() ; /*! Inits a plot with series of data. * @param nb_pts number of points in each series. * @param nb_srs number of series of points. Default is 1. */ PlotData() ; /*! destructor. */ ~PlotData() ; /*! copy constructor. * @param PD a PlotData to copy. */ PlotData(const PlotData & PD); /** @brief initialize to empty */ void clear() ; /*! merges another plot data to the current one. * (just adds to the end, does not merge series by name yet) */ void merge(const PlotData &PD) ; /*! @brief get the number of series. * @return number of series. */ size_t size() const ; /** @brief gets the current series number. */ size_t getCurrentSeriesNumber() const ; /*! @brief Sets the name of a series. * @param i index of the series * @param nom name of the series */ void setSeriesName(const size_t & i, const std::string & nom) ; // ref Series template std::vector & refSeries(const size_t & i, Pt kind) ; template std::vector & refSeries(const std::string & name, Pt kind) { return refSeries(getIndex(name ), kind ); } // get Series template const std::vector & getSeries(const size_t & i, Pt kind) const ; template const std::vector & getSeries(const std::string & name, Pt kind) const { return getSeries(getIndex(name),kind); } template const std::vector & getCurrentSeries( Pt kind) const { return getSeries(_curr_series_, kind); } template const typename Pt::type & getSeriesEntry(const size_t & i, const size_t & j, Pt kind) const { linbox_check(j const typename Pt::type & getSeriesEntry(const std::string & name, const size_t & j, Pt kind) const { return getSeriesEntry(getIndex(name),j,kind); } template const typename Pt::type & getSeriesEntry(const size_t & i, Pt kind) const { return ( getSeries(i,kind).back() ) ; } template const typename Pt::type & getSeriesEntry(const std::string & name, Pt kind) const { return getSeriesEntry(getIndex(name),kind); } template const typename Pt::type & getCurrentSeriesEntry(const size_t & j, Pt kind) const { return getSeriesEntry(_curr_series_, j, kind); } template const typename Pt::type & getCurrentSeriesEntry( Pt kind) const { return getSeriesEntry(_curr_series_, kind); } // set Series /** Gets the name of a series. * @param i index of the series */ const std::string & getSeriesName(const size_t & i) const ; /** Gets the name of the current series. */ const std::string & getCurrentSeriesName() const ; /*! @brief Sets the name of the current series. * @param nom name of the series */ void setCurrentSeriesName(const std::string & nom) ; /** Inits the watch on a series * @param i index of a series */ void initWatch ( const size_t & i) ; /** Inits the watch to current series */ void initCurrentSeriesWatch () ; /** Creates a new series. * It is created after the last series. * \c getCurrentSeries() points to it. * @param nom name of the new series */ void newSeries(const std::string & nom = "") ; /** Finish a series of measurements. * Nothing is done for the moment. */ void finishSeries() ; /** @brief size of a series. * @param i index of the series */ size_t getSeriesSize(const size_t & i) const ; /** @brief size of the current series. */ size_t getCurrentSeriesSize() const ; /*! goes to the next series of points */ bool selectNextSeries() ; /** selects the first series */ void selectFirstSeries() ; /*! @brief Sets the name of a point. * @param i series number * @param j index for the the point * @param nom name of the point */ template void setSeriesPointLabel(const size_t & i, const size_t & j, const T & nom) { std::string nom_s = fortifyString(toString(nom)); linbox_check(j void setCurrentSeriesEntry(const T & nam, const double & val , const double & xval = NAN, const double & yval = NAN) { std::string nam_s = fortifyString(toString(nam)); return setSeriesEntry(_curr_series_,nam_s,val,xval,yval) ; } /*! gets a reference to the array of data. * @return a reference to the member \c _tableau_ representing the data. */ const std::vector & getTable() const ; /*! gets a reference to the array of data. * @return a reference to the member \c _tableau_ representing the data. */ std::vector & refTable() ; /** @brief Continue for another time measure ? * @see TimeWatcher::keepon * @param repet current number of repetitions for this new measure * @param tim time previously spent on the measures. * @return true if one more measure can be done */ bool keepon(size_t & repet, double tim, bool usePrediction=false) ; void load( const std::string & filename) ; /** @brief saves the data in XML format. * @param filename file name * @param title titles of the data * @param xtitle legend of the X axis * @param ytitle legend of the Y axis. */ void save( const std::string & filename , const std::string & title = "" , const std::string & xtitle = "" , const std::string & ytitle = "") ; void addCurrentEntryMetaData(const MetaData & m) { _meta_data_.push_back(getCurrentEntryId(),m); } /** returns the unique ID of the current series last entry */ const std::string & getCurrentEntryId() const { return (getCurrentSeries().UID).back(); } /** @brief returns the unique ID of the current series j'th entry. * @param j index of the entry. */ const std::string & getCurrentSeriesId(const size_t & j) const { return (getCurrentSeries().UID[j]); } /** @brief returns the unique ID of the i'th series j'th entry. * @param i index of the series. * @param j index of the entry. */ const std::string & getId(const size_t & i, const size_t & j) { return (selectSeries(i).UID[j]); } /** @brief returns the unique ID of the i'th series j'th entry. * @param i index of the series. * @param j index of the entry. */ const std::string & getId(const std::string & name, const size_t & j) { return (selectSeries(name).UID[j]); } }; // PlotData } // LinBox // // PlotGraph // namespace LinBox { /*! @brief The graph (2D). * This class joins a PlotStyle and a PlotData to build up a graph. A * filename should be provided as well, indicating where the output * graph and scripts will be generated. * * @warning the filename will get a random suffix before the extension * so as not to overwrite files "par inadvertance". * @warning don't name anything else than a folder "data" in your working directory. You've been warned. * @todo make depend on PlotStyle (that owns data) */ //!@todo use getUsingSeries in latex/html/csv/xml class PlotGraph { private : PlotData & _data_ ; //!< reference to the data points PlotStyle & _style_ ; //!< reference to a plotting style std::string _filename_ ; //!< name for the output file (without extension). a random \c _XXXXXX suffix will be added to make it unique. std::string _printname_ ; //!< name for the output file (without extension) to be printed. a random \c _XXXXXX suffix makes it unique. dmatrix_t _merge_data_ ; svector_t _merge_points_ ; private : /*! @internal * @brief Appends random suffix. * Appends to \p _filename_ a random string constituted of an * underscore followed by 8 random alnum chars. * @return the concatenation of \c _filename_ and this suffix. */ void _randomName(); //! @internal returns the file name (without extension and uid) const std::string & getFileName() ; //! @bug this supposes the two series have unique measurements for one point. void mergeTwoSeries( svector_t & merge_points , dmatrix_t & merge_data , const svector_t & pts , const dvector_t & dat , const size_t & idx) const ; //! merge all series of points into a vector of absissa points and a vector of vector of data points void mergeSeries(); void print_csv(); void print_dat(); void print_xml(); void print_html() ; /*! @brief Prints data in a latex tabular. */ void print_latex(); /*!@brief Plots the data with gnuplot. * Produces data in a .dat file, creates a .gp gnuplot script and * outputs a graph calling gnuplot. * @warning If gnuplot is not available, fall back to the latex method. */ void print_gnuplot(bool only_data=false); public : /*! @brief Sets a new data structure. * @param data a reference to a PlotData class. */ void setData( PlotData & data ); /*! @brief Gets the data. * @param[in,out] data a reference to a PlotData class. */ PlotData & refData( PlotData & data); /*! @brief Sets a new style structure. * @param style a reference to a PlotStyle class. */ void setStyle( PlotStyle & style ) ; /*! @brief Gets the style. * @param[in,out] style a reference to a PlotStyle class. */ PlotStyle & refStyle( PlotStyle & style) ; PlotStyle & refStyle( ) { return _style_ ; } // not implemented yet void sortSeries() ; // not implemented yet void unique() ; /*! @brief Constructor for the PlotGraph class. * Plots a series of data according to a style. * @param data data to be plot, will be processed by the style * @param style sets parameters to gnuplot to achieve a nice * plot. */ PlotGraph( PlotData & data, PlotStyle & style ); /*! @brief sets the ouput file name. * All output is put in a "data" subfolder. * @warning Since no file is overwritten, this * directory can rapidly get very populated. */ void setOutFilename( const std::string & filename ) ; const std::string & getUsingSeries() ; /*! @brief Gets the plot command line. * @param File the name of/path to the data file (with extension) * @return a gnuplot "plot" command stream. */ std::string getPlotCommand(const std::string & File) ; void print( Tag::Printer pt = Tag::Printer::xml) ; void save() ; void load(const std::string & filename) ; }; // PlotGraph } // LinBox // // Least Squares // #ifdef __LINBOX_HAVE_LAPACK extern "C" { #if 1 // from lapack (not clapack) void dgels_(char *trans, int *m, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, double *work, int *lwork, int *info); void dgelsy_(int *m, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, int *JPVT, double *RCOND, int *RANK, double *work, int *lwork, int *info); void dgelss_(int *m, int *n, int *nrhs, double *a, int *lda, double *b, int *ldb, double *s, double *RCOND, int *RANK, double *work, int *lwork, int *info); #endif #if 0 int clapack_dgels (const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TA, int M, int N, int NRHS, double * A, int lda, double * B, const int ldb ); #endif } #endif // __LINBOX_HAVE_LAPACK // // Curve fitting // namespace LinBox { //! fit X[n-1,n],Y[n-1,n] and return evaluation at x. double fit2(const dvector_t & X, const dvector_t & Y, int n, double x); #ifdef __LINBOX_HAVE_LAPACK //! fits with a degree 3 polynomial and return evaluation at x. double fit_lapack3(const dvector_t &X, const dvector_t &Z, double x); #endif // __LINBOX_HAVE_LAPACK //! fit X[n-2,n],Y[n-2,n] and return evaluation at x. double fit3(const dvector_t & X, const dvector_t & Y,int n, double x); } // LinBox #ifdef LinBoxSrcOnly #include "benchmarks/benchmark.C" #endif #include "benchmarks/benchmark.inl" #endif // __LINBOX_benchmarks_benchmark_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/benchmark.inl000066400000000000000000000077411347646240000176060ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/benchmark.inl * @ingroup benchmarks * @brief Common header to ease benchmarking routines. * We provide a class to easily populate and plot files that represent * benchmarks. * * We use gnuplot for the plotting part * or LaTeX to provide tables. A minimum knowledge of \c Gnuplot is a plus but * the \c benchmark-* files should provide enough examples for creating * standard (not too fancy) plots. * * We fall back to plain latex tabulars when gnuplot is not available. We plot * graphs in files whose name is extended by a random 8-char string to avoid * écraser files. * */ #ifndef __LINBOX_benchmarks_benchmark_INL #define __LINBOX_benchmarks_benchmark_INL #include #include "linbox/integer.h" #include "linbox/util/debug.h" #include "tests/test-common.h" #include "linbox/util/timer.h" #include #include // // Chrono // namespace LinBox { template Chrono::Chrono() : _chrono_(), _times_(0), _total_(0) { _chrono_.clear(); } template Chrono::~Chrono() {} template void Chrono::clear() { _chrono_.clear(); _times_.resize(0); _total_ = 0; } template void Chrono::start() { _chrono_.start(); } template void Chrono::stop() { _chrono_.stop(); double split = _chrono_.userElapsedTime(); _times_.push_back( split ); _total_ += split ; _chrono_.clear(); } template double Chrono::time() const { return _total_ ; } template dvector_t Chrono::times() const { return _times_ ; } } // LinBox // // PlotData // namespace LinBox { // set Series template<> svector_t & PlotData::refSeries(const size_t & i, Point::Labels) { linbox_check(i dvector_t & PlotData::refSeries(const size_t & i, Point::Values) { return (refSeries(i).Values) ; } template<> dvector_t & PlotData::refSeries(const size_t & i, Point::Points) { return (refSeries(i).Points) ; } template<> dvector_t & PlotData::refSeries(const size_t & i, Point::Times) { return (refSeries(i).Times) ; } // get Series template<> const svector_t & PlotData::getSeries(const size_t & i, Point::Labels) const { linbox_check(i const dvector_t & PlotData::getSeries(const size_t & i, Point::Values) const { return (getSeries(i).Values) ; } template<> const dvector_t & PlotData::getSeries(const size_t & i, Point::Points) const { return (getSeries(i).Points) ; } template<> const dvector_t & PlotData::getSeries(const size_t & i, Point::Times) const { return (getSeries(i).Times) ; } } // LinBox #endif // __LINBOX_benchmarks_benchmark_INL // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/block-coppersmith-benchmark.C000066400000000000000000000045221347646240000226230ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include #include #define __LINBOX_USE_OPENMP 1 #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/algorithms/blackbox-block-container.h" #include "linbox/algorithms/block-coppersmith-domain.h" #include "linbox/solutions/det.h" // Computes the minimal polynomial of a sparse matrix (given in Matrix Market Format) // Times BlockCoppersmithDomain using TPL_omp using namespace LinBox; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef SparseMatrix SparseMat; typedef MatrixDomain Domain; typedef typename Domain::OwnMatrix Block; void benchmarkBCD(Field& F, Domain& MD, SparseMat& M, Block& U, Block& V, std::vector& gen, std::vector& deg, int t) { BlackboxBlockContainer blockseq(&M,F,U,V); BlockCoppersmithDomain > BCD(MD,&blockseq,t); double start=omp_get_wtime(); deg=BCD.right_minpoly(gen); double time=omp_get_wtime()-start; std::cout << time << std::endl; } int main(int argc, char** argv) { int earlyTerm; int p; std::string uFname,vFname,mFname; static Argument args[] = { { 'p', "-p P", "Set the field GF(p)", TYPE_INT, &p}, { 't', "-t T", "Early term threshold", TYPE_INT, &earlyTerm}, { 'm', "-m M", "Name of file for matrix M", TYPE_STR, &mFname}, { 'u', "-u U", "Name of file for matrix U", TYPE_STR, &uFname}, { 'v', "-v V", "Name of file for matrix V", TYPE_STR, &vFname}, END_OF_ARGUMENTS }; parseArguments(argc,argv,args); Field F(p); Domain MD(F); SparseMat M(F); Block U(F),V(F); { ifstream iF(mFname); M.read(iF); M.finalize(); iF.close(); } { ifstream iF(uFname); U.read(iF); iF.close(); } { ifstream iF(vFname); V.read(iF); iF.close(); } std::vector gen; std::vector deg; benchmarkBCD(F,MD,M,U,V,gen,deg,earlyTerm); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/data/000077500000000000000000000000001347646240000160505ustar00rootroot00000000000000linbox-1.6.3/benchmarks/data/Makefile.am000066400000000000000000000017101347646240000201030ustar00rootroot00000000000000# Copyright (c) 2013 the LinBox group # Brice Boyer (briceboyer) # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ cleanup : \rm -rf *dat *tex *gp *xml *csv *html *eps linbox-1.6.3/benchmarks/gen-blocks.C000066400000000000000000000105461347646240000172750ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include #include #include #include #include #include #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/blackbox/transpose.h" #include "linbox/vector/vector-domain.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/algorithms/blackbox-block-container.h" #include "linbox/algorithms/block-coppersmith-domain.h" #include "linbox/solutions/det.h" #include "linbox/solutions/rank.h" #include "linbox/solutions/methods.h" #include "linbox/algorithms/wiedemann.h" #include "examples/map-sparse.h" // Generates random dense matrices U and V and sparse matrix M for use // with block-coppersmith-benchmark and invariant-factors-benchmark. // Also computes the min-poly and saves that as well using namespace std; using namespace LinBox; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef SparseMatrix SparseMat; typedef MatrixDomain Domain; typedef typename Domain::OwnMatrix Block; int randRange(int start, int end) { double rval = rand(); static const double NORMALIZING_CONSTANT = 1.0/(1.0+RAND_MAX); double normedRVal = rval*NORMALIZING_CONSTANT; double rangeSize = end-start; int offset = rangeSize*normedRVal; return start+offset; } void randomBlock(Block& block, Field& field, int q, int m, int n) { Element d; for (int i=0;i& gen, std::vector& deg, int t) { BlackboxBlockContainer blockseq(&M,F,U,V); BlockCoppersmithDomain > BCD(MD,&blockseq,t); deg=BCD.right_minpoly(gen); } int main(int argc, char** argv) { int seed=501; int n; int b; int nnz; double sparsity; int t; int q=3; srand(seed); static Argument args[] = { { 'n', "-n N", "Set row/col dimension of test matrix n.", TYPE_INT, &n }, { 'b', "-b B", "Set block size b.", TYPE_INT, &b }, { 's', "-s S", "Set the sparsity [0-1).", TYPE_DOUBLE, &sparsity }, { 'q', "-q Q", "Set the field GF(p)", TYPE_INT, &q}, { 't', "-t T", "Early term threshold", TYPE_INT, &t}, END_OF_ARGUMENTS }; parseArguments (argc, argv, args); nnz=(int)((((double)(n))*n)*sparsity); std::cout << nnz << std::endl; Field F(q); Domain MD(F); SparseMat M(F,n,n); Block U(F,b,n),V(F,n,b); std::vector gen; std::vector deg; randomNonSingular(U,F,q,b,n); randomNonSingular(V,F,q,n,b); std::cerr << "done1" << std::endl; MapSparse sparse(F,n,n); MapSparse::generateSparseNonSingular(sparse,nnz,seed); sparse.copy(M); std::cerr << "done2" << std::endl; { ofstream oF("U"+fileDesc(n,b,sparsity,q)); U.write(oF); oF.close(); } { ofstream oF("V"+fileDesc(n,b,sparsity,q)); V.write(oF); oF.close(); } { ofstream oF("M"+fileDesc(n,b,sparsity,q)); M.write(oF); oF.close(); } std::cerr << "done3" << std::endl; computeMinPoly(MD,M,F,U,V,gen,deg,t); { ofstream oF("MP"+fileDesc(n,b,sparsity,q)); for (int i=0;i 0) { oF << deg[deg.size()-1]; } oF << std::endl; for (int i=0;is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/invariant-factors-benchmark.C000066400000000000000000000105221347646240000226250ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include #include #define __LINBOX_USE_OPENMP 1 #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/algorithms/blackbox-block-container.h" #include "linbox/algorithms/block-coppersmith-domain.h" #include "linbox/solutions/det.h" #include #include #include #include // Computes the invariant factors of a sparse matrix (given in Matrix Market Format) // Effectively times: TPL_omp, BlockCoppersmithDomain and KannanBachem using namespace LinBox; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef SparseMatrix SparseMat; typedef MatrixDomain Domain; typedef typename Domain::OwnMatrix Block; typedef Givaro::Modular BaseDom; typedef Givaro::Poly1Dom PolyDom; typedef GivaroPoly Ring; typedef MatrixDomain PolyMatDom; typedef BlasMatrix PolyMat; int randRange(int start, int end) { double rval = rand(); static const double NORMALIZING_CONSTANT = 1.0/(1.0+RAND_MAX); double normedRVal = rval*NORMALIZING_CONSTANT; double rangeSize = end-start; int offset = rangeSize*normedRVal; return start+offset; } void benchmarkBCD(Field& F, Domain& MD, SparseMat& M, Block& U, Block& V, std::vector& gen, std::vector& deg, int t, int p) { BlackboxBlockContainer blockseq(&M,F,U,V); BlockCoppersmithDomain > BCD(MD,&blockseq,t); double start=omp_get_wtime(); deg=BCD.right_minpoly(gen); BaseDom BD(p); PolyDom PD(BD, "x"); Ring R(PD); PolyMatDom PMD(R); int b=U.rowdim(); int d=gen.size(); PolyMat MM(R,b,b); Ring::Element temp; temp.resize(d); for (int i=0;i SFKB(PMD); BlasVector diag(R,b,R.zero); SFKB.solve(diag,MM); PolyDom::Type_t lcoef; for (size_t i=0;i v(F,n,d),sum(F,n,d),vPrime(F,n,d); for (int i=0;i gen; std::vector deg; benchmarkBCD(F,MD,M,U,V,gen,deg,earlyTerm,p); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/matrix/000077500000000000000000000000001347646240000164435ustar00rootroot00000000000000linbox-1.6.3/benchmarks/matrix/Makefile.am000066400000000000000000000016221347646240000205000ustar00rootroot00000000000000# Copyright (c) 2013 the LinBox group # Brice Boyer (briceboyer) # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ linbox-1.6.3/benchmarks/matrix/bibd_12_5_66x792.sms000066400000000000000000002070171347646240000215710ustar00rootroot0000000000000066 792 M 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 1 1 24 1 1 25 1 1 26 1 1 27 1 1 28 1 1 29 1 1 30 1 1 31 1 1 32 1 1 33 1 1 34 1 1 35 1 1 36 1 1 37 1 1 38 1 1 39 1 1 40 1 1 41 1 1 42 1 1 43 1 1 44 1 1 45 1 1 46 1 1 47 1 1 48 1 1 49 1 1 50 1 1 51 1 1 52 1 1 53 1 1 54 1 1 55 1 1 56 1 1 57 1 1 58 1 1 59 1 1 60 1 1 61 1 1 62 1 1 63 1 1 64 1 1 65 1 1 66 1 1 67 1 1 68 1 1 69 1 1 70 1 1 71 1 1 72 1 1 73 1 1 74 1 1 75 1 1 76 1 1 77 1 1 78 1 1 79 1 1 80 1 1 81 1 1 82 1 1 83 1 1 84 1 1 85 1 1 86 1 1 87 1 1 88 1 1 89 1 1 90 1 1 91 1 1 92 1 1 93 1 1 94 1 1 95 1 1 96 1 1 97 1 1 98 1 1 99 1 1 100 1 1 101 1 1 102 1 1 103 1 1 104 1 1 105 1 1 106 1 1 107 1 1 108 1 1 109 1 1 110 1 1 111 1 1 112 1 1 113 1 1 114 1 1 115 1 1 116 1 1 117 1 1 118 1 1 119 1 1 120 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 2 10 1 2 11 1 2 12 1 2 13 1 2 14 1 2 15 1 2 16 1 2 17 1 2 18 1 2 19 1 2 20 1 2 21 1 2 22 1 2 23 1 2 24 1 2 25 1 2 26 1 2 27 1 2 28 1 2 29 1 2 30 1 2 31 1 2 32 1 2 33 1 2 34 1 2 35 1 2 36 1 2 121 1 2 122 1 2 123 1 2 124 1 2 125 1 2 126 1 2 127 1 2 128 1 2 129 1 2 130 1 2 131 1 2 132 1 2 133 1 2 134 1 2 135 1 2 136 1 2 137 1 2 138 1 2 139 1 2 140 1 2 141 1 2 142 1 2 143 1 2 144 1 2 145 1 2 146 1 2 147 1 2 148 1 2 149 1 2 150 1 2 151 1 2 152 1 2 153 1 2 154 1 2 155 1 2 156 1 2 157 1 2 158 1 2 159 1 2 160 1 2 161 1 2 162 1 2 163 1 2 164 1 2 165 1 2 166 1 2 167 1 2 168 1 2 169 1 2 170 1 2 171 1 2 172 1 2 173 1 2 174 1 2 175 1 2 176 1 2 177 1 2 178 1 2 179 1 2 180 1 2 181 1 2 182 1 2 183 1 2 184 1 2 185 1 2 186 1 2 187 1 2 188 1 2 189 1 2 190 1 2 191 1 2 192 1 2 193 1 2 194 1 2 195 1 2 196 1 2 197 1 2 198 1 2 199 1 2 200 1 2 201 1 2 202 1 2 203 1 2 204 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 3 6 1 3 7 1 3 8 1 3 37 1 3 38 1 3 39 1 3 40 1 3 41 1 3 42 1 3 43 1 3 44 1 3 45 1 3 46 1 3 47 1 3 48 1 3 49 1 3 50 1 3 51 1 3 52 1 3 53 1 3 54 1 3 55 1 3 56 1 3 57 1 3 58 1 3 59 1 3 60 1 3 61 1 3 62 1 3 63 1 3 64 1 3 121 1 3 122 1 3 123 1 3 124 1 3 125 1 3 126 1 3 127 1 3 128 1 3 129 1 3 130 1 3 131 1 3 132 1 3 133 1 3 134 1 3 135 1 3 136 1 3 137 1 3 138 1 3 139 1 3 140 1 3 141 1 3 142 1 3 143 1 3 144 1 3 145 1 3 146 1 3 147 1 3 148 1 3 205 1 3 206 1 3 207 1 3 208 1 3 209 1 3 210 1 3 211 1 3 212 1 3 213 1 3 214 1 3 215 1 3 216 1 3 217 1 3 218 1 3 219 1 3 220 1 3 221 1 3 222 1 3 223 1 3 224 1 3 225 1 3 226 1 3 227 1 3 228 1 3 229 1 3 230 1 3 231 1 3 232 1 3 233 1 3 234 1 3 235 1 3 236 1 3 237 1 3 238 1 3 239 1 3 240 1 3 241 1 3 242 1 3 243 1 3 244 1 3 245 1 3 246 1 3 247 1 3 248 1 3 249 1 3 250 1 3 251 1 3 252 1 3 253 1 3 254 1 3 255 1 3 256 1 3 257 1 3 258 1 3 259 1 3 260 1 4 1 1 4 9 1 4 10 1 4 11 1 4 12 1 4 13 1 4 14 1 4 15 1 4 37 1 4 38 1 4 39 1 4 40 1 4 41 1 4 42 1 4 43 1 4 65 1 4 66 1 4 67 1 4 68 1 4 69 1 4 70 1 4 71 1 4 72 1 4 73 1 4 74 1 4 75 1 4 76 1 4 77 1 4 78 1 4 79 1 4 80 1 4 81 1 4 82 1 4 83 1 4 84 1 4 85 1 4 121 1 4 122 1 4 123 1 4 124 1 4 125 1 4 126 1 4 127 1 4 149 1 4 150 1 4 151 1 4 152 1 4 153 1 4 154 1 4 155 1 4 156 1 4 157 1 4 158 1 4 159 1 4 160 1 4 161 1 4 162 1 4 163 1 4 164 1 4 165 1 4 166 1 4 167 1 4 168 1 4 169 1 4 205 1 4 206 1 4 207 1 4 208 1 4 209 1 4 210 1 4 211 1 4 212 1 4 213 1 4 214 1 4 215 1 4 216 1 4 217 1 4 218 1 4 219 1 4 220 1 4 221 1 4 222 1 4 223 1 4 224 1 4 225 1 4 261 1 4 262 1 4 263 1 4 264 1 4 265 1 4 266 1 4 267 1 4 268 1 4 269 1 4 270 1 4 271 1 4 272 1 4 273 1 4 274 1 4 275 1 4 276 1 4 277 1 4 278 1 4 279 1 4 280 1 4 281 1 4 282 1 4 283 1 4 284 1 4 285 1 4 286 1 4 287 1 4 288 1 4 289 1 4 290 1 4 291 1 4 292 1 4 293 1 4 294 1 4 295 1 5 2 1 5 9 1 5 16 1 5 17 1 5 18 1 5 19 1 5 20 1 5 21 1 5 37 1 5 44 1 5 45 1 5 46 1 5 47 1 5 48 1 5 49 1 5 65 1 5 66 1 5 67 1 5 68 1 5 69 1 5 70 1 5 86 1 5 87 1 5 88 1 5 89 1 5 90 1 5 91 1 5 92 1 5 93 1 5 94 1 5 95 1 5 96 1 5 97 1 5 98 1 5 99 1 5 100 1 5 121 1 5 128 1 5 129 1 5 130 1 5 131 1 5 132 1 5 133 1 5 149 1 5 150 1 5 151 1 5 152 1 5 153 1 5 154 1 5 170 1 5 171 1 5 172 1 5 173 1 5 174 1 5 175 1 5 176 1 5 177 1 5 178 1 5 179 1 5 180 1 5 181 1 5 182 1 5 183 1 5 184 1 5 205 1 5 206 1 5 207 1 5 208 1 5 209 1 5 210 1 5 226 1 5 227 1 5 228 1 5 229 1 5 230 1 5 231 1 5 232 1 5 233 1 5 234 1 5 235 1 5 236 1 5 237 1 5 238 1 5 239 1 5 240 1 5 261 1 5 262 1 5 263 1 5 264 1 5 265 1 5 266 1 5 267 1 5 268 1 5 269 1 5 270 1 5 271 1 5 272 1 5 273 1 5 274 1 5 275 1 5 296 1 5 297 1 5 298 1 5 299 1 5 300 1 5 301 1 5 302 1 5 303 1 5 304 1 5 305 1 5 306 1 5 307 1 5 308 1 5 309 1 5 310 1 5 311 1 5 312 1 5 313 1 5 314 1 5 315 1 6 3 1 6 10 1 6 16 1 6 22 1 6 23 1 6 24 1 6 25 1 6 26 1 6 38 1 6 44 1 6 50 1 6 51 1 6 52 1 6 53 1 6 54 1 6 65 1 6 71 1 6 72 1 6 73 1 6 74 1 6 75 1 6 86 1 6 87 1 6 88 1 6 89 1 6 90 1 6 101 1 6 102 1 6 103 1 6 104 1 6 105 1 6 106 1 6 107 1 6 108 1 6 109 1 6 110 1 6 122 1 6 128 1 6 134 1 6 135 1 6 136 1 6 137 1 6 138 1 6 149 1 6 155 1 6 156 1 6 157 1 6 158 1 6 159 1 6 170 1 6 171 1 6 172 1 6 173 1 6 174 1 6 185 1 6 186 1 6 187 1 6 188 1 6 189 1 6 190 1 6 191 1 6 192 1 6 193 1 6 194 1 6 205 1 6 211 1 6 212 1 6 213 1 6 214 1 6 215 1 6 226 1 6 227 1 6 228 1 6 229 1 6 230 1 6 241 1 6 242 1 6 243 1 6 244 1 6 245 1 6 246 1 6 247 1 6 248 1 6 249 1 6 250 1 6 261 1 6 262 1 6 263 1 6 264 1 6 265 1 6 276 1 6 277 1 6 278 1 6 279 1 6 280 1 6 281 1 6 282 1 6 283 1 6 284 1 6 285 1 6 296 1 6 297 1 6 298 1 6 299 1 6 300 1 6 301 1 6 302 1 6 303 1 6 304 1 6 305 1 6 316 1 6 317 1 6 318 1 6 319 1 6 320 1 6 321 1 6 322 1 6 323 1 6 324 1 6 325 1 7 4 1 7 11 1 7 17 1 7 22 1 7 27 1 7 28 1 7 29 1 7 30 1 7 39 1 7 45 1 7 50 1 7 55 1 7 56 1 7 57 1 7 58 1 7 66 1 7 71 1 7 76 1 7 77 1 7 78 1 7 79 1 7 86 1 7 91 1 7 92 1 7 93 1 7 94 1 7 101 1 7 102 1 7 103 1 7 104 1 7 111 1 7 112 1 7 113 1 7 114 1 7 115 1 7 116 1 7 123 1 7 129 1 7 134 1 7 139 1 7 140 1 7 141 1 7 142 1 7 150 1 7 155 1 7 160 1 7 161 1 7 162 1 7 163 1 7 170 1 7 175 1 7 176 1 7 177 1 7 178 1 7 185 1 7 186 1 7 187 1 7 188 1 7 195 1 7 196 1 7 197 1 7 198 1 7 199 1 7 200 1 7 206 1 7 211 1 7 216 1 7 217 1 7 218 1 7 219 1 7 226 1 7 231 1 7 232 1 7 233 1 7 234 1 7 241 1 7 242 1 7 243 1 7 244 1 7 251 1 7 252 1 7 253 1 7 254 1 7 255 1 7 256 1 7 261 1 7 266 1 7 267 1 7 268 1 7 269 1 7 276 1 7 277 1 7 278 1 7 279 1 7 286 1 7 287 1 7 288 1 7 289 1 7 290 1 7 291 1 7 296 1 7 297 1 7 298 1 7 299 1 7 306 1 7 307 1 7 308 1 7 309 1 7 310 1 7 311 1 7 316 1 7 317 1 7 318 1 7 319 1 7 320 1 7 321 1 7 326 1 7 327 1 7 328 1 7 329 1 8 5 1 8 12 1 8 18 1 8 23 1 8 27 1 8 31 1 8 32 1 8 33 1 8 40 1 8 46 1 8 51 1 8 55 1 8 59 1 8 60 1 8 61 1 8 67 1 8 72 1 8 76 1 8 80 1 8 81 1 8 82 1 8 87 1 8 91 1 8 95 1 8 96 1 8 97 1 8 101 1 8 105 1 8 106 1 8 107 1 8 111 1 8 112 1 8 113 1 8 117 1 8 118 1 8 119 1 8 124 1 8 130 1 8 135 1 8 139 1 8 143 1 8 144 1 8 145 1 8 151 1 8 156 1 8 160 1 8 164 1 8 165 1 8 166 1 8 171 1 8 175 1 8 179 1 8 180 1 8 181 1 8 185 1 8 189 1 8 190 1 8 191 1 8 195 1 8 196 1 8 197 1 8 201 1 8 202 1 8 203 1 8 207 1 8 212 1 8 216 1 8 220 1 8 221 1 8 222 1 8 227 1 8 231 1 8 235 1 8 236 1 8 237 1 8 241 1 8 245 1 8 246 1 8 247 1 8 251 1 8 252 1 8 253 1 8 257 1 8 258 1 8 259 1 8 262 1 8 266 1 8 270 1 8 271 1 8 272 1 8 276 1 8 280 1 8 281 1 8 282 1 8 286 1 8 287 1 8 288 1 8 292 1 8 293 1 8 294 1 8 296 1 8 300 1 8 301 1 8 302 1 8 306 1 8 307 1 8 308 1 8 312 1 8 313 1 8 314 1 8 316 1 8 317 1 8 318 1 8 322 1 8 323 1 8 324 1 8 326 1 8 327 1 8 328 1 8 330 1 9 6 1 9 13 1 9 19 1 9 24 1 9 28 1 9 31 1 9 34 1 9 35 1 9 41 1 9 47 1 9 52 1 9 56 1 9 59 1 9 62 1 9 63 1 9 68 1 9 73 1 9 77 1 9 80 1 9 83 1 9 84 1 9 88 1 9 92 1 9 95 1 9 98 1 9 99 1 9 102 1 9 105 1 9 108 1 9 109 1 9 111 1 9 114 1 9 115 1 9 117 1 9 118 1 9 120 1 9 125 1 9 131 1 9 136 1 9 140 1 9 143 1 9 146 1 9 147 1 9 152 1 9 157 1 9 161 1 9 164 1 9 167 1 9 168 1 9 172 1 9 176 1 9 179 1 9 182 1 9 183 1 9 186 1 9 189 1 9 192 1 9 193 1 9 195 1 9 198 1 9 199 1 9 201 1 9 202 1 9 204 1 9 208 1 9 213 1 9 217 1 9 220 1 9 223 1 9 224 1 9 228 1 9 232 1 9 235 1 9 238 1 9 239 1 9 242 1 9 245 1 9 248 1 9 249 1 9 251 1 9 254 1 9 255 1 9 257 1 9 258 1 9 260 1 9 263 1 9 267 1 9 270 1 9 273 1 9 274 1 9 277 1 9 280 1 9 283 1 9 284 1 9 286 1 9 289 1 9 290 1 9 292 1 9 293 1 9 295 1 9 297 1 9 300 1 9 303 1 9 304 1 9 306 1 9 309 1 9 310 1 9 312 1 9 313 1 9 315 1 9 316 1 9 319 1 9 320 1 9 322 1 9 323 1 9 325 1 9 326 1 9 327 1 9 329 1 9 330 1 10 7 1 10 14 1 10 20 1 10 25 1 10 29 1 10 32 1 10 34 1 10 36 1 10 42 1 10 48 1 10 53 1 10 57 1 10 60 1 10 62 1 10 64 1 10 69 1 10 74 1 10 78 1 10 81 1 10 83 1 10 85 1 10 89 1 10 93 1 10 96 1 10 98 1 10 100 1 10 103 1 10 106 1 10 108 1 10 110 1 10 112 1 10 114 1 10 116 1 10 117 1 10 119 1 10 120 1 10 126 1 10 132 1 10 137 1 10 141 1 10 144 1 10 146 1 10 148 1 10 153 1 10 158 1 10 162 1 10 165 1 10 167 1 10 169 1 10 173 1 10 177 1 10 180 1 10 182 1 10 184 1 10 187 1 10 190 1 10 192 1 10 194 1 10 196 1 10 198 1 10 200 1 10 201 1 10 203 1 10 204 1 10 209 1 10 214 1 10 218 1 10 221 1 10 223 1 10 225 1 10 229 1 10 233 1 10 236 1 10 238 1 10 240 1 10 243 1 10 246 1 10 248 1 10 250 1 10 252 1 10 254 1 10 256 1 10 257 1 10 259 1 10 260 1 10 264 1 10 268 1 10 271 1 10 273 1 10 275 1 10 278 1 10 281 1 10 283 1 10 285 1 10 287 1 10 289 1 10 291 1 10 292 1 10 294 1 10 295 1 10 298 1 10 301 1 10 303 1 10 305 1 10 307 1 10 309 1 10 311 1 10 312 1 10 314 1 10 315 1 10 317 1 10 319 1 10 321 1 10 322 1 10 324 1 10 325 1 10 326 1 10 328 1 10 329 1 10 330 1 11 8 1 11 15 1 11 21 1 11 26 1 11 30 1 11 33 1 11 35 1 11 36 1 11 43 1 11 49 1 11 54 1 11 58 1 11 61 1 11 63 1 11 64 1 11 70 1 11 75 1 11 79 1 11 82 1 11 84 1 11 85 1 11 90 1 11 94 1 11 97 1 11 99 1 11 100 1 11 104 1 11 107 1 11 109 1 11 110 1 11 113 1 11 115 1 11 116 1 11 118 1 11 119 1 11 120 1 11 127 1 11 133 1 11 138 1 11 142 1 11 145 1 11 147 1 11 148 1 11 154 1 11 159 1 11 163 1 11 166 1 11 168 1 11 169 1 11 174 1 11 178 1 11 181 1 11 183 1 11 184 1 11 188 1 11 191 1 11 193 1 11 194 1 11 197 1 11 199 1 11 200 1 11 202 1 11 203 1 11 204 1 11 210 1 11 215 1 11 219 1 11 222 1 11 224 1 11 225 1 11 230 1 11 234 1 11 237 1 11 239 1 11 240 1 11 244 1 11 247 1 11 249 1 11 250 1 11 253 1 11 255 1 11 256 1 11 258 1 11 259 1 11 260 1 11 265 1 11 269 1 11 272 1 11 274 1 11 275 1 11 279 1 11 282 1 11 284 1 11 285 1 11 288 1 11 290 1 11 291 1 11 293 1 11 294 1 11 295 1 11 299 1 11 302 1 11 304 1 11 305 1 11 308 1 11 310 1 11 311 1 11 313 1 11 314 1 11 315 1 11 318 1 11 320 1 11 321 1 11 323 1 11 324 1 11 325 1 11 327 1 11 328 1 11 329 1 11 330 1 12 1 1 12 2 1 12 3 1 12 4 1 12 5 1 12 6 1 12 7 1 12 8 1 12 9 1 12 10 1 12 11 1 12 12 1 12 13 1 12 14 1 12 15 1 12 16 1 12 17 1 12 18 1 12 19 1 12 20 1 12 21 1 12 22 1 12 23 1 12 24 1 12 25 1 12 26 1 12 27 1 12 28 1 12 29 1 12 30 1 12 31 1 12 32 1 12 33 1 12 34 1 12 35 1 12 36 1 12 331 1 12 332 1 12 333 1 12 334 1 12 335 1 12 336 1 12 337 1 12 338 1 12 339 1 12 340 1 12 341 1 12 342 1 12 343 1 12 344 1 12 345 1 12 346 1 12 347 1 12 348 1 12 349 1 12 350 1 12 351 1 12 352 1 12 353 1 12 354 1 12 355 1 12 356 1 12 357 1 12 358 1 12 359 1 12 360 1 12 361 1 12 362 1 12 363 1 12 364 1 12 365 1 12 366 1 12 367 1 12 368 1 12 369 1 12 370 1 12 371 1 12 372 1 12 373 1 12 374 1 12 375 1 12 376 1 12 377 1 12 378 1 12 379 1 12 380 1 12 381 1 12 382 1 12 383 1 12 384 1 12 385 1 12 386 1 12 387 1 12 388 1 12 389 1 12 390 1 12 391 1 12 392 1 12 393 1 12 394 1 12 395 1 12 396 1 12 397 1 12 398 1 12 399 1 12 400 1 12 401 1 12 402 1 12 403 1 12 404 1 12 405 1 12 406 1 12 407 1 12 408 1 12 409 1 12 410 1 12 411 1 12 412 1 12 413 1 12 414 1 13 1 1 13 2 1 13 3 1 13 4 1 13 5 1 13 6 1 13 7 1 13 8 1 13 37 1 13 38 1 13 39 1 13 40 1 13 41 1 13 42 1 13 43 1 13 44 1 13 45 1 13 46 1 13 47 1 13 48 1 13 49 1 13 50 1 13 51 1 13 52 1 13 53 1 13 54 1 13 55 1 13 56 1 13 57 1 13 58 1 13 59 1 13 60 1 13 61 1 13 62 1 13 63 1 13 64 1 13 331 1 13 332 1 13 333 1 13 334 1 13 335 1 13 336 1 13 337 1 13 338 1 13 339 1 13 340 1 13 341 1 13 342 1 13 343 1 13 344 1 13 345 1 13 346 1 13 347 1 13 348 1 13 349 1 13 350 1 13 351 1 13 352 1 13 353 1 13 354 1 13 355 1 13 356 1 13 357 1 13 358 1 13 415 1 13 416 1 13 417 1 13 418 1 13 419 1 13 420 1 13 421 1 13 422 1 13 423 1 13 424 1 13 425 1 13 426 1 13 427 1 13 428 1 13 429 1 13 430 1 13 431 1 13 432 1 13 433 1 13 434 1 13 435 1 13 436 1 13 437 1 13 438 1 13 439 1 13 440 1 13 441 1 13 442 1 13 443 1 13 444 1 13 445 1 13 446 1 13 447 1 13 448 1 13 449 1 13 450 1 13 451 1 13 452 1 13 453 1 13 454 1 13 455 1 13 456 1 13 457 1 13 458 1 13 459 1 13 460 1 13 461 1 13 462 1 13 463 1 13 464 1 13 465 1 13 466 1 13 467 1 13 468 1 13 469 1 13 470 1 14 1 1 14 9 1 14 10 1 14 11 1 14 12 1 14 13 1 14 14 1 14 15 1 14 37 1 14 38 1 14 39 1 14 40 1 14 41 1 14 42 1 14 43 1 14 65 1 14 66 1 14 67 1 14 68 1 14 69 1 14 70 1 14 71 1 14 72 1 14 73 1 14 74 1 14 75 1 14 76 1 14 77 1 14 78 1 14 79 1 14 80 1 14 81 1 14 82 1 14 83 1 14 84 1 14 85 1 14 331 1 14 332 1 14 333 1 14 334 1 14 335 1 14 336 1 14 337 1 14 359 1 14 360 1 14 361 1 14 362 1 14 363 1 14 364 1 14 365 1 14 366 1 14 367 1 14 368 1 14 369 1 14 370 1 14 371 1 14 372 1 14 373 1 14 374 1 14 375 1 14 376 1 14 377 1 14 378 1 14 379 1 14 415 1 14 416 1 14 417 1 14 418 1 14 419 1 14 420 1 14 421 1 14 422 1 14 423 1 14 424 1 14 425 1 14 426 1 14 427 1 14 428 1 14 429 1 14 430 1 14 431 1 14 432 1 14 433 1 14 434 1 14 435 1 14 471 1 14 472 1 14 473 1 14 474 1 14 475 1 14 476 1 14 477 1 14 478 1 14 479 1 14 480 1 14 481 1 14 482 1 14 483 1 14 484 1 14 485 1 14 486 1 14 487 1 14 488 1 14 489 1 14 490 1 14 491 1 14 492 1 14 493 1 14 494 1 14 495 1 14 496 1 14 497 1 14 498 1 14 499 1 14 500 1 14 501 1 14 502 1 14 503 1 14 504 1 14 505 1 15 2 1 15 9 1 15 16 1 15 17 1 15 18 1 15 19 1 15 20 1 15 21 1 15 37 1 15 44 1 15 45 1 15 46 1 15 47 1 15 48 1 15 49 1 15 65 1 15 66 1 15 67 1 15 68 1 15 69 1 15 70 1 15 86 1 15 87 1 15 88 1 15 89 1 15 90 1 15 91 1 15 92 1 15 93 1 15 94 1 15 95 1 15 96 1 15 97 1 15 98 1 15 99 1 15 100 1 15 331 1 15 338 1 15 339 1 15 340 1 15 341 1 15 342 1 15 343 1 15 359 1 15 360 1 15 361 1 15 362 1 15 363 1 15 364 1 15 380 1 15 381 1 15 382 1 15 383 1 15 384 1 15 385 1 15 386 1 15 387 1 15 388 1 15 389 1 15 390 1 15 391 1 15 392 1 15 393 1 15 394 1 15 415 1 15 416 1 15 417 1 15 418 1 15 419 1 15 420 1 15 436 1 15 437 1 15 438 1 15 439 1 15 440 1 15 441 1 15 442 1 15 443 1 15 444 1 15 445 1 15 446 1 15 447 1 15 448 1 15 449 1 15 450 1 15 471 1 15 472 1 15 473 1 15 474 1 15 475 1 15 476 1 15 477 1 15 478 1 15 479 1 15 480 1 15 481 1 15 482 1 15 483 1 15 484 1 15 485 1 15 506 1 15 507 1 15 508 1 15 509 1 15 510 1 15 511 1 15 512 1 15 513 1 15 514 1 15 515 1 15 516 1 15 517 1 15 518 1 15 519 1 15 520 1 15 521 1 15 522 1 15 523 1 15 524 1 15 525 1 16 3 1 16 10 1 16 16 1 16 22 1 16 23 1 16 24 1 16 25 1 16 26 1 16 38 1 16 44 1 16 50 1 16 51 1 16 52 1 16 53 1 16 54 1 16 65 1 16 71 1 16 72 1 16 73 1 16 74 1 16 75 1 16 86 1 16 87 1 16 88 1 16 89 1 16 90 1 16 101 1 16 102 1 16 103 1 16 104 1 16 105 1 16 106 1 16 107 1 16 108 1 16 109 1 16 110 1 16 332 1 16 338 1 16 344 1 16 345 1 16 346 1 16 347 1 16 348 1 16 359 1 16 365 1 16 366 1 16 367 1 16 368 1 16 369 1 16 380 1 16 381 1 16 382 1 16 383 1 16 384 1 16 395 1 16 396 1 16 397 1 16 398 1 16 399 1 16 400 1 16 401 1 16 402 1 16 403 1 16 404 1 16 415 1 16 421 1 16 422 1 16 423 1 16 424 1 16 425 1 16 436 1 16 437 1 16 438 1 16 439 1 16 440 1 16 451 1 16 452 1 16 453 1 16 454 1 16 455 1 16 456 1 16 457 1 16 458 1 16 459 1 16 460 1 16 471 1 16 472 1 16 473 1 16 474 1 16 475 1 16 486 1 16 487 1 16 488 1 16 489 1 16 490 1 16 491 1 16 492 1 16 493 1 16 494 1 16 495 1 16 506 1 16 507 1 16 508 1 16 509 1 16 510 1 16 511 1 16 512 1 16 513 1 16 514 1 16 515 1 16 526 1 16 527 1 16 528 1 16 529 1 16 530 1 16 531 1 16 532 1 16 533 1 16 534 1 16 535 1 17 4 1 17 11 1 17 17 1 17 22 1 17 27 1 17 28 1 17 29 1 17 30 1 17 39 1 17 45 1 17 50 1 17 55 1 17 56 1 17 57 1 17 58 1 17 66 1 17 71 1 17 76 1 17 77 1 17 78 1 17 79 1 17 86 1 17 91 1 17 92 1 17 93 1 17 94 1 17 101 1 17 102 1 17 103 1 17 104 1 17 111 1 17 112 1 17 113 1 17 114 1 17 115 1 17 116 1 17 333 1 17 339 1 17 344 1 17 349 1 17 350 1 17 351 1 17 352 1 17 360 1 17 365 1 17 370 1 17 371 1 17 372 1 17 373 1 17 380 1 17 385 1 17 386 1 17 387 1 17 388 1 17 395 1 17 396 1 17 397 1 17 398 1 17 405 1 17 406 1 17 407 1 17 408 1 17 409 1 17 410 1 17 416 1 17 421 1 17 426 1 17 427 1 17 428 1 17 429 1 17 436 1 17 441 1 17 442 1 17 443 1 17 444 1 17 451 1 17 452 1 17 453 1 17 454 1 17 461 1 17 462 1 17 463 1 17 464 1 17 465 1 17 466 1 17 471 1 17 476 1 17 477 1 17 478 1 17 479 1 17 486 1 17 487 1 17 488 1 17 489 1 17 496 1 17 497 1 17 498 1 17 499 1 17 500 1 17 501 1 17 506 1 17 507 1 17 508 1 17 509 1 17 516 1 17 517 1 17 518 1 17 519 1 17 520 1 17 521 1 17 526 1 17 527 1 17 528 1 17 529 1 17 530 1 17 531 1 17 536 1 17 537 1 17 538 1 17 539 1 18 5 1 18 12 1 18 18 1 18 23 1 18 27 1 18 31 1 18 32 1 18 33 1 18 40 1 18 46 1 18 51 1 18 55 1 18 59 1 18 60 1 18 61 1 18 67 1 18 72 1 18 76 1 18 80 1 18 81 1 18 82 1 18 87 1 18 91 1 18 95 1 18 96 1 18 97 1 18 101 1 18 105 1 18 106 1 18 107 1 18 111 1 18 112 1 18 113 1 18 117 1 18 118 1 18 119 1 18 334 1 18 340 1 18 345 1 18 349 1 18 353 1 18 354 1 18 355 1 18 361 1 18 366 1 18 370 1 18 374 1 18 375 1 18 376 1 18 381 1 18 385 1 18 389 1 18 390 1 18 391 1 18 395 1 18 399 1 18 400 1 18 401 1 18 405 1 18 406 1 18 407 1 18 411 1 18 412 1 18 413 1 18 417 1 18 422 1 18 426 1 18 430 1 18 431 1 18 432 1 18 437 1 18 441 1 18 445 1 18 446 1 18 447 1 18 451 1 18 455 1 18 456 1 18 457 1 18 461 1 18 462 1 18 463 1 18 467 1 18 468 1 18 469 1 18 472 1 18 476 1 18 480 1 18 481 1 18 482 1 18 486 1 18 490 1 18 491 1 18 492 1 18 496 1 18 497 1 18 498 1 18 502 1 18 503 1 18 504 1 18 506 1 18 510 1 18 511 1 18 512 1 18 516 1 18 517 1 18 518 1 18 522 1 18 523 1 18 524 1 18 526 1 18 527 1 18 528 1 18 532 1 18 533 1 18 534 1 18 536 1 18 537 1 18 538 1 18 540 1 19 6 1 19 13 1 19 19 1 19 24 1 19 28 1 19 31 1 19 34 1 19 35 1 19 41 1 19 47 1 19 52 1 19 56 1 19 59 1 19 62 1 19 63 1 19 68 1 19 73 1 19 77 1 19 80 1 19 83 1 19 84 1 19 88 1 19 92 1 19 95 1 19 98 1 19 99 1 19 102 1 19 105 1 19 108 1 19 109 1 19 111 1 19 114 1 19 115 1 19 117 1 19 118 1 19 120 1 19 335 1 19 341 1 19 346 1 19 350 1 19 353 1 19 356 1 19 357 1 19 362 1 19 367 1 19 371 1 19 374 1 19 377 1 19 378 1 19 382 1 19 386 1 19 389 1 19 392 1 19 393 1 19 396 1 19 399 1 19 402 1 19 403 1 19 405 1 19 408 1 19 409 1 19 411 1 19 412 1 19 414 1 19 418 1 19 423 1 19 427 1 19 430 1 19 433 1 19 434 1 19 438 1 19 442 1 19 445 1 19 448 1 19 449 1 19 452 1 19 455 1 19 458 1 19 459 1 19 461 1 19 464 1 19 465 1 19 467 1 19 468 1 19 470 1 19 473 1 19 477 1 19 480 1 19 483 1 19 484 1 19 487 1 19 490 1 19 493 1 19 494 1 19 496 1 19 499 1 19 500 1 19 502 1 19 503 1 19 505 1 19 507 1 19 510 1 19 513 1 19 514 1 19 516 1 19 519 1 19 520 1 19 522 1 19 523 1 19 525 1 19 526 1 19 529 1 19 530 1 19 532 1 19 533 1 19 535 1 19 536 1 19 537 1 19 539 1 19 540 1 20 7 1 20 14 1 20 20 1 20 25 1 20 29 1 20 32 1 20 34 1 20 36 1 20 42 1 20 48 1 20 53 1 20 57 1 20 60 1 20 62 1 20 64 1 20 69 1 20 74 1 20 78 1 20 81 1 20 83 1 20 85 1 20 89 1 20 93 1 20 96 1 20 98 1 20 100 1 20 103 1 20 106 1 20 108 1 20 110 1 20 112 1 20 114 1 20 116 1 20 117 1 20 119 1 20 120 1 20 336 1 20 342 1 20 347 1 20 351 1 20 354 1 20 356 1 20 358 1 20 363 1 20 368 1 20 372 1 20 375 1 20 377 1 20 379 1 20 383 1 20 387 1 20 390 1 20 392 1 20 394 1 20 397 1 20 400 1 20 402 1 20 404 1 20 406 1 20 408 1 20 410 1 20 411 1 20 413 1 20 414 1 20 419 1 20 424 1 20 428 1 20 431 1 20 433 1 20 435 1 20 439 1 20 443 1 20 446 1 20 448 1 20 450 1 20 453 1 20 456 1 20 458 1 20 460 1 20 462 1 20 464 1 20 466 1 20 467 1 20 469 1 20 470 1 20 474 1 20 478 1 20 481 1 20 483 1 20 485 1 20 488 1 20 491 1 20 493 1 20 495 1 20 497 1 20 499 1 20 501 1 20 502 1 20 504 1 20 505 1 20 508 1 20 511 1 20 513 1 20 515 1 20 517 1 20 519 1 20 521 1 20 522 1 20 524 1 20 525 1 20 527 1 20 529 1 20 531 1 20 532 1 20 534 1 20 535 1 20 536 1 20 538 1 20 539 1 20 540 1 21 8 1 21 15 1 21 21 1 21 26 1 21 30 1 21 33 1 21 35 1 21 36 1 21 43 1 21 49 1 21 54 1 21 58 1 21 61 1 21 63 1 21 64 1 21 70 1 21 75 1 21 79 1 21 82 1 21 84 1 21 85 1 21 90 1 21 94 1 21 97 1 21 99 1 21 100 1 21 104 1 21 107 1 21 109 1 21 110 1 21 113 1 21 115 1 21 116 1 21 118 1 21 119 1 21 120 1 21 337 1 21 343 1 21 348 1 21 352 1 21 355 1 21 357 1 21 358 1 21 364 1 21 369 1 21 373 1 21 376 1 21 378 1 21 379 1 21 384 1 21 388 1 21 391 1 21 393 1 21 394 1 21 398 1 21 401 1 21 403 1 21 404 1 21 407 1 21 409 1 21 410 1 21 412 1 21 413 1 21 414 1 21 420 1 21 425 1 21 429 1 21 432 1 21 434 1 21 435 1 21 440 1 21 444 1 21 447 1 21 449 1 21 450 1 21 454 1 21 457 1 21 459 1 21 460 1 21 463 1 21 465 1 21 466 1 21 468 1 21 469 1 21 470 1 21 475 1 21 479 1 21 482 1 21 484 1 21 485 1 21 489 1 21 492 1 21 494 1 21 495 1 21 498 1 21 500 1 21 501 1 21 503 1 21 504 1 21 505 1 21 509 1 21 512 1 21 514 1 21 515 1 21 518 1 21 520 1 21 521 1 21 523 1 21 524 1 21 525 1 21 528 1 21 530 1 21 531 1 21 533 1 21 534 1 21 535 1 21 537 1 21 538 1 21 539 1 21 540 1 22 1 1 22 2 1 22 3 1 22 4 1 22 5 1 22 6 1 22 7 1 22 8 1 22 121 1 22 122 1 22 123 1 22 124 1 22 125 1 22 126 1 22 127 1 22 128 1 22 129 1 22 130 1 22 131 1 22 132 1 22 133 1 22 134 1 22 135 1 22 136 1 22 137 1 22 138 1 22 139 1 22 140 1 22 141 1 22 142 1 22 143 1 22 144 1 22 145 1 22 146 1 22 147 1 22 148 1 22 331 1 22 332 1 22 333 1 22 334 1 22 335 1 22 336 1 22 337 1 22 338 1 22 339 1 22 340 1 22 341 1 22 342 1 22 343 1 22 344 1 22 345 1 22 346 1 22 347 1 22 348 1 22 349 1 22 350 1 22 351 1 22 352 1 22 353 1 22 354 1 22 355 1 22 356 1 22 357 1 22 358 1 22 541 1 22 542 1 22 543 1 22 544 1 22 545 1 22 546 1 22 547 1 22 548 1 22 549 1 22 550 1 22 551 1 22 552 1 22 553 1 22 554 1 22 555 1 22 556 1 22 557 1 22 558 1 22 559 1 22 560 1 22 561 1 22 562 1 22 563 1 22 564 1 22 565 1 22 566 1 22 567 1 22 568 1 22 569 1 22 570 1 22 571 1 22 572 1 22 573 1 22 574 1 22 575 1 22 576 1 22 577 1 22 578 1 22 579 1 22 580 1 22 581 1 22 582 1 22 583 1 22 584 1 22 585 1 22 586 1 22 587 1 22 588 1 22 589 1 22 590 1 22 591 1 22 592 1 22 593 1 22 594 1 22 595 1 22 596 1 23 1 1 23 9 1 23 10 1 23 11 1 23 12 1 23 13 1 23 14 1 23 15 1 23 121 1 23 122 1 23 123 1 23 124 1 23 125 1 23 126 1 23 127 1 23 149 1 23 150 1 23 151 1 23 152 1 23 153 1 23 154 1 23 155 1 23 156 1 23 157 1 23 158 1 23 159 1 23 160 1 23 161 1 23 162 1 23 163 1 23 164 1 23 165 1 23 166 1 23 167 1 23 168 1 23 169 1 23 331 1 23 332 1 23 333 1 23 334 1 23 335 1 23 336 1 23 337 1 23 359 1 23 360 1 23 361 1 23 362 1 23 363 1 23 364 1 23 365 1 23 366 1 23 367 1 23 368 1 23 369 1 23 370 1 23 371 1 23 372 1 23 373 1 23 374 1 23 375 1 23 376 1 23 377 1 23 378 1 23 379 1 23 541 1 23 542 1 23 543 1 23 544 1 23 545 1 23 546 1 23 547 1 23 548 1 23 549 1 23 550 1 23 551 1 23 552 1 23 553 1 23 554 1 23 555 1 23 556 1 23 557 1 23 558 1 23 559 1 23 560 1 23 561 1 23 597 1 23 598 1 23 599 1 23 600 1 23 601 1 23 602 1 23 603 1 23 604 1 23 605 1 23 606 1 23 607 1 23 608 1 23 609 1 23 610 1 23 611 1 23 612 1 23 613 1 23 614 1 23 615 1 23 616 1 23 617 1 23 618 1 23 619 1 23 620 1 23 621 1 23 622 1 23 623 1 23 624 1 23 625 1 23 626 1 23 627 1 23 628 1 23 629 1 23 630 1 23 631 1 24 2 1 24 9 1 24 16 1 24 17 1 24 18 1 24 19 1 24 20 1 24 21 1 24 121 1 24 128 1 24 129 1 24 130 1 24 131 1 24 132 1 24 133 1 24 149 1 24 150 1 24 151 1 24 152 1 24 153 1 24 154 1 24 170 1 24 171 1 24 172 1 24 173 1 24 174 1 24 175 1 24 176 1 24 177 1 24 178 1 24 179 1 24 180 1 24 181 1 24 182 1 24 183 1 24 184 1 24 331 1 24 338 1 24 339 1 24 340 1 24 341 1 24 342 1 24 343 1 24 359 1 24 360 1 24 361 1 24 362 1 24 363 1 24 364 1 24 380 1 24 381 1 24 382 1 24 383 1 24 384 1 24 385 1 24 386 1 24 387 1 24 388 1 24 389 1 24 390 1 24 391 1 24 392 1 24 393 1 24 394 1 24 541 1 24 542 1 24 543 1 24 544 1 24 545 1 24 546 1 24 562 1 24 563 1 24 564 1 24 565 1 24 566 1 24 567 1 24 568 1 24 569 1 24 570 1 24 571 1 24 572 1 24 573 1 24 574 1 24 575 1 24 576 1 24 597 1 24 598 1 24 599 1 24 600 1 24 601 1 24 602 1 24 603 1 24 604 1 24 605 1 24 606 1 24 607 1 24 608 1 24 609 1 24 610 1 24 611 1 24 632 1 24 633 1 24 634 1 24 635 1 24 636 1 24 637 1 24 638 1 24 639 1 24 640 1 24 641 1 24 642 1 24 643 1 24 644 1 24 645 1 24 646 1 24 647 1 24 648 1 24 649 1 24 650 1 24 651 1 25 3 1 25 10 1 25 16 1 25 22 1 25 23 1 25 24 1 25 25 1 25 26 1 25 122 1 25 128 1 25 134 1 25 135 1 25 136 1 25 137 1 25 138 1 25 149 1 25 155 1 25 156 1 25 157 1 25 158 1 25 159 1 25 170 1 25 171 1 25 172 1 25 173 1 25 174 1 25 185 1 25 186 1 25 187 1 25 188 1 25 189 1 25 190 1 25 191 1 25 192 1 25 193 1 25 194 1 25 332 1 25 338 1 25 344 1 25 345 1 25 346 1 25 347 1 25 348 1 25 359 1 25 365 1 25 366 1 25 367 1 25 368 1 25 369 1 25 380 1 25 381 1 25 382 1 25 383 1 25 384 1 25 395 1 25 396 1 25 397 1 25 398 1 25 399 1 25 400 1 25 401 1 25 402 1 25 403 1 25 404 1 25 541 1 25 547 1 25 548 1 25 549 1 25 550 1 25 551 1 25 562 1 25 563 1 25 564 1 25 565 1 25 566 1 25 577 1 25 578 1 25 579 1 25 580 1 25 581 1 25 582 1 25 583 1 25 584 1 25 585 1 25 586 1 25 597 1 25 598 1 25 599 1 25 600 1 25 601 1 25 612 1 25 613 1 25 614 1 25 615 1 25 616 1 25 617 1 25 618 1 25 619 1 25 620 1 25 621 1 25 632 1 25 633 1 25 634 1 25 635 1 25 636 1 25 637 1 25 638 1 25 639 1 25 640 1 25 641 1 25 652 1 25 653 1 25 654 1 25 655 1 25 656 1 25 657 1 25 658 1 25 659 1 25 660 1 25 661 1 26 4 1 26 11 1 26 17 1 26 22 1 26 27 1 26 28 1 26 29 1 26 30 1 26 123 1 26 129 1 26 134 1 26 139 1 26 140 1 26 141 1 26 142 1 26 150 1 26 155 1 26 160 1 26 161 1 26 162 1 26 163 1 26 170 1 26 175 1 26 176 1 26 177 1 26 178 1 26 185 1 26 186 1 26 187 1 26 188 1 26 195 1 26 196 1 26 197 1 26 198 1 26 199 1 26 200 1 26 333 1 26 339 1 26 344 1 26 349 1 26 350 1 26 351 1 26 352 1 26 360 1 26 365 1 26 370 1 26 371 1 26 372 1 26 373 1 26 380 1 26 385 1 26 386 1 26 387 1 26 388 1 26 395 1 26 396 1 26 397 1 26 398 1 26 405 1 26 406 1 26 407 1 26 408 1 26 409 1 26 410 1 26 542 1 26 547 1 26 552 1 26 553 1 26 554 1 26 555 1 26 562 1 26 567 1 26 568 1 26 569 1 26 570 1 26 577 1 26 578 1 26 579 1 26 580 1 26 587 1 26 588 1 26 589 1 26 590 1 26 591 1 26 592 1 26 597 1 26 602 1 26 603 1 26 604 1 26 605 1 26 612 1 26 613 1 26 614 1 26 615 1 26 622 1 26 623 1 26 624 1 26 625 1 26 626 1 26 627 1 26 632 1 26 633 1 26 634 1 26 635 1 26 642 1 26 643 1 26 644 1 26 645 1 26 646 1 26 647 1 26 652 1 26 653 1 26 654 1 26 655 1 26 656 1 26 657 1 26 662 1 26 663 1 26 664 1 26 665 1 27 5 1 27 12 1 27 18 1 27 23 1 27 27 1 27 31 1 27 32 1 27 33 1 27 124 1 27 130 1 27 135 1 27 139 1 27 143 1 27 144 1 27 145 1 27 151 1 27 156 1 27 160 1 27 164 1 27 165 1 27 166 1 27 171 1 27 175 1 27 179 1 27 180 1 27 181 1 27 185 1 27 189 1 27 190 1 27 191 1 27 195 1 27 196 1 27 197 1 27 201 1 27 202 1 27 203 1 27 334 1 27 340 1 27 345 1 27 349 1 27 353 1 27 354 1 27 355 1 27 361 1 27 366 1 27 370 1 27 374 1 27 375 1 27 376 1 27 381 1 27 385 1 27 389 1 27 390 1 27 391 1 27 395 1 27 399 1 27 400 1 27 401 1 27 405 1 27 406 1 27 407 1 27 411 1 27 412 1 27 413 1 27 543 1 27 548 1 27 552 1 27 556 1 27 557 1 27 558 1 27 563 1 27 567 1 27 571 1 27 572 1 27 573 1 27 577 1 27 581 1 27 582 1 27 583 1 27 587 1 27 588 1 27 589 1 27 593 1 27 594 1 27 595 1 27 598 1 27 602 1 27 606 1 27 607 1 27 608 1 27 612 1 27 616 1 27 617 1 27 618 1 27 622 1 27 623 1 27 624 1 27 628 1 27 629 1 27 630 1 27 632 1 27 636 1 27 637 1 27 638 1 27 642 1 27 643 1 27 644 1 27 648 1 27 649 1 27 650 1 27 652 1 27 653 1 27 654 1 27 658 1 27 659 1 27 660 1 27 662 1 27 663 1 27 664 1 27 666 1 28 6 1 28 13 1 28 19 1 28 24 1 28 28 1 28 31 1 28 34 1 28 35 1 28 125 1 28 131 1 28 136 1 28 140 1 28 143 1 28 146 1 28 147 1 28 152 1 28 157 1 28 161 1 28 164 1 28 167 1 28 168 1 28 172 1 28 176 1 28 179 1 28 182 1 28 183 1 28 186 1 28 189 1 28 192 1 28 193 1 28 195 1 28 198 1 28 199 1 28 201 1 28 202 1 28 204 1 28 335 1 28 341 1 28 346 1 28 350 1 28 353 1 28 356 1 28 357 1 28 362 1 28 367 1 28 371 1 28 374 1 28 377 1 28 378 1 28 382 1 28 386 1 28 389 1 28 392 1 28 393 1 28 396 1 28 399 1 28 402 1 28 403 1 28 405 1 28 408 1 28 409 1 28 411 1 28 412 1 28 414 1 28 544 1 28 549 1 28 553 1 28 556 1 28 559 1 28 560 1 28 564 1 28 568 1 28 571 1 28 574 1 28 575 1 28 578 1 28 581 1 28 584 1 28 585 1 28 587 1 28 590 1 28 591 1 28 593 1 28 594 1 28 596 1 28 599 1 28 603 1 28 606 1 28 609 1 28 610 1 28 613 1 28 616 1 28 619 1 28 620 1 28 622 1 28 625 1 28 626 1 28 628 1 28 629 1 28 631 1 28 633 1 28 636 1 28 639 1 28 640 1 28 642 1 28 645 1 28 646 1 28 648 1 28 649 1 28 651 1 28 652 1 28 655 1 28 656 1 28 658 1 28 659 1 28 661 1 28 662 1 28 663 1 28 665 1 28 666 1 29 7 1 29 14 1 29 20 1 29 25 1 29 29 1 29 32 1 29 34 1 29 36 1 29 126 1 29 132 1 29 137 1 29 141 1 29 144 1 29 146 1 29 148 1 29 153 1 29 158 1 29 162 1 29 165 1 29 167 1 29 169 1 29 173 1 29 177 1 29 180 1 29 182 1 29 184 1 29 187 1 29 190 1 29 192 1 29 194 1 29 196 1 29 198 1 29 200 1 29 201 1 29 203 1 29 204 1 29 336 1 29 342 1 29 347 1 29 351 1 29 354 1 29 356 1 29 358 1 29 363 1 29 368 1 29 372 1 29 375 1 29 377 1 29 379 1 29 383 1 29 387 1 29 390 1 29 392 1 29 394 1 29 397 1 29 400 1 29 402 1 29 404 1 29 406 1 29 408 1 29 410 1 29 411 1 29 413 1 29 414 1 29 545 1 29 550 1 29 554 1 29 557 1 29 559 1 29 561 1 29 565 1 29 569 1 29 572 1 29 574 1 29 576 1 29 579 1 29 582 1 29 584 1 29 586 1 29 588 1 29 590 1 29 592 1 29 593 1 29 595 1 29 596 1 29 600 1 29 604 1 29 607 1 29 609 1 29 611 1 29 614 1 29 617 1 29 619 1 29 621 1 29 623 1 29 625 1 29 627 1 29 628 1 29 630 1 29 631 1 29 634 1 29 637 1 29 639 1 29 641 1 29 643 1 29 645 1 29 647 1 29 648 1 29 650 1 29 651 1 29 653 1 29 655 1 29 657 1 29 658 1 29 660 1 29 661 1 29 662 1 29 664 1 29 665 1 29 666 1 30 8 1 30 15 1 30 21 1 30 26 1 30 30 1 30 33 1 30 35 1 30 36 1 30 127 1 30 133 1 30 138 1 30 142 1 30 145 1 30 147 1 30 148 1 30 154 1 30 159 1 30 163 1 30 166 1 30 168 1 30 169 1 30 174 1 30 178 1 30 181 1 30 183 1 30 184 1 30 188 1 30 191 1 30 193 1 30 194 1 30 197 1 30 199 1 30 200 1 30 202 1 30 203 1 30 204 1 30 337 1 30 343 1 30 348 1 30 352 1 30 355 1 30 357 1 30 358 1 30 364 1 30 369 1 30 373 1 30 376 1 30 378 1 30 379 1 30 384 1 30 388 1 30 391 1 30 393 1 30 394 1 30 398 1 30 401 1 30 403 1 30 404 1 30 407 1 30 409 1 30 410 1 30 412 1 30 413 1 30 414 1 30 546 1 30 551 1 30 555 1 30 558 1 30 560 1 30 561 1 30 566 1 30 570 1 30 573 1 30 575 1 30 576 1 30 580 1 30 583 1 30 585 1 30 586 1 30 589 1 30 591 1 30 592 1 30 594 1 30 595 1 30 596 1 30 601 1 30 605 1 30 608 1 30 610 1 30 611 1 30 615 1 30 618 1 30 620 1 30 621 1 30 624 1 30 626 1 30 627 1 30 629 1 30 630 1 30 631 1 30 635 1 30 638 1 30 640 1 30 641 1 30 644 1 30 646 1 30 647 1 30 649 1 30 650 1 30 651 1 30 654 1 30 656 1 30 657 1 30 659 1 30 660 1 30 661 1 30 663 1 30 664 1 30 665 1 30 666 1 31 1 1 31 37 1 31 38 1 31 39 1 31 40 1 31 41 1 31 42 1 31 43 1 31 121 1 31 122 1 31 123 1 31 124 1 31 125 1 31 126 1 31 127 1 31 205 1 31 206 1 31 207 1 31 208 1 31 209 1 31 210 1 31 211 1 31 212 1 31 213 1 31 214 1 31 215 1 31 216 1 31 217 1 31 218 1 31 219 1 31 220 1 31 221 1 31 222 1 31 223 1 31 224 1 31 225 1 31 331 1 31 332 1 31 333 1 31 334 1 31 335 1 31 336 1 31 337 1 31 415 1 31 416 1 31 417 1 31 418 1 31 419 1 31 420 1 31 421 1 31 422 1 31 423 1 31 424 1 31 425 1 31 426 1 31 427 1 31 428 1 31 429 1 31 430 1 31 431 1 31 432 1 31 433 1 31 434 1 31 435 1 31 541 1 31 542 1 31 543 1 31 544 1 31 545 1 31 546 1 31 547 1 31 548 1 31 549 1 31 550 1 31 551 1 31 552 1 31 553 1 31 554 1 31 555 1 31 556 1 31 557 1 31 558 1 31 559 1 31 560 1 31 561 1 31 667 1 31 668 1 31 669 1 31 670 1 31 671 1 31 672 1 31 673 1 31 674 1 31 675 1 31 676 1 31 677 1 31 678 1 31 679 1 31 680 1 31 681 1 31 682 1 31 683 1 31 684 1 31 685 1 31 686 1 31 687 1 31 688 1 31 689 1 31 690 1 31 691 1 31 692 1 31 693 1 31 694 1 31 695 1 31 696 1 31 697 1 31 698 1 31 699 1 31 700 1 31 701 1 32 2 1 32 37 1 32 44 1 32 45 1 32 46 1 32 47 1 32 48 1 32 49 1 32 121 1 32 128 1 32 129 1 32 130 1 32 131 1 32 132 1 32 133 1 32 205 1 32 206 1 32 207 1 32 208 1 32 209 1 32 210 1 32 226 1 32 227 1 32 228 1 32 229 1 32 230 1 32 231 1 32 232 1 32 233 1 32 234 1 32 235 1 32 236 1 32 237 1 32 238 1 32 239 1 32 240 1 32 331 1 32 338 1 32 339 1 32 340 1 32 341 1 32 342 1 32 343 1 32 415 1 32 416 1 32 417 1 32 418 1 32 419 1 32 420 1 32 436 1 32 437 1 32 438 1 32 439 1 32 440 1 32 441 1 32 442 1 32 443 1 32 444 1 32 445 1 32 446 1 32 447 1 32 448 1 32 449 1 32 450 1 32 541 1 32 542 1 32 543 1 32 544 1 32 545 1 32 546 1 32 562 1 32 563 1 32 564 1 32 565 1 32 566 1 32 567 1 32 568 1 32 569 1 32 570 1 32 571 1 32 572 1 32 573 1 32 574 1 32 575 1 32 576 1 32 667 1 32 668 1 32 669 1 32 670 1 32 671 1 32 672 1 32 673 1 32 674 1 32 675 1 32 676 1 32 677 1 32 678 1 32 679 1 32 680 1 32 681 1 32 702 1 32 703 1 32 704 1 32 705 1 32 706 1 32 707 1 32 708 1 32 709 1 32 710 1 32 711 1 32 712 1 32 713 1 32 714 1 32 715 1 32 716 1 32 717 1 32 718 1 32 719 1 32 720 1 32 721 1 33 3 1 33 38 1 33 44 1 33 50 1 33 51 1 33 52 1 33 53 1 33 54 1 33 122 1 33 128 1 33 134 1 33 135 1 33 136 1 33 137 1 33 138 1 33 205 1 33 211 1 33 212 1 33 213 1 33 214 1 33 215 1 33 226 1 33 227 1 33 228 1 33 229 1 33 230 1 33 241 1 33 242 1 33 243 1 33 244 1 33 245 1 33 246 1 33 247 1 33 248 1 33 249 1 33 250 1 33 332 1 33 338 1 33 344 1 33 345 1 33 346 1 33 347 1 33 348 1 33 415 1 33 421 1 33 422 1 33 423 1 33 424 1 33 425 1 33 436 1 33 437 1 33 438 1 33 439 1 33 440 1 33 451 1 33 452 1 33 453 1 33 454 1 33 455 1 33 456 1 33 457 1 33 458 1 33 459 1 33 460 1 33 541 1 33 547 1 33 548 1 33 549 1 33 550 1 33 551 1 33 562 1 33 563 1 33 564 1 33 565 1 33 566 1 33 577 1 33 578 1 33 579 1 33 580 1 33 581 1 33 582 1 33 583 1 33 584 1 33 585 1 33 586 1 33 667 1 33 668 1 33 669 1 33 670 1 33 671 1 33 682 1 33 683 1 33 684 1 33 685 1 33 686 1 33 687 1 33 688 1 33 689 1 33 690 1 33 691 1 33 702 1 33 703 1 33 704 1 33 705 1 33 706 1 33 707 1 33 708 1 33 709 1 33 710 1 33 711 1 33 722 1 33 723 1 33 724 1 33 725 1 33 726 1 33 727 1 33 728 1 33 729 1 33 730 1 33 731 1 34 4 1 34 39 1 34 45 1 34 50 1 34 55 1 34 56 1 34 57 1 34 58 1 34 123 1 34 129 1 34 134 1 34 139 1 34 140 1 34 141 1 34 142 1 34 206 1 34 211 1 34 216 1 34 217 1 34 218 1 34 219 1 34 226 1 34 231 1 34 232 1 34 233 1 34 234 1 34 241 1 34 242 1 34 243 1 34 244 1 34 251 1 34 252 1 34 253 1 34 254 1 34 255 1 34 256 1 34 333 1 34 339 1 34 344 1 34 349 1 34 350 1 34 351 1 34 352 1 34 416 1 34 421 1 34 426 1 34 427 1 34 428 1 34 429 1 34 436 1 34 441 1 34 442 1 34 443 1 34 444 1 34 451 1 34 452 1 34 453 1 34 454 1 34 461 1 34 462 1 34 463 1 34 464 1 34 465 1 34 466 1 34 542 1 34 547 1 34 552 1 34 553 1 34 554 1 34 555 1 34 562 1 34 567 1 34 568 1 34 569 1 34 570 1 34 577 1 34 578 1 34 579 1 34 580 1 34 587 1 34 588 1 34 589 1 34 590 1 34 591 1 34 592 1 34 667 1 34 672 1 34 673 1 34 674 1 34 675 1 34 682 1 34 683 1 34 684 1 34 685 1 34 692 1 34 693 1 34 694 1 34 695 1 34 696 1 34 697 1 34 702 1 34 703 1 34 704 1 34 705 1 34 712 1 34 713 1 34 714 1 34 715 1 34 716 1 34 717 1 34 722 1 34 723 1 34 724 1 34 725 1 34 726 1 34 727 1 34 732 1 34 733 1 34 734 1 34 735 1 35 5 1 35 40 1 35 46 1 35 51 1 35 55 1 35 59 1 35 60 1 35 61 1 35 124 1 35 130 1 35 135 1 35 139 1 35 143 1 35 144 1 35 145 1 35 207 1 35 212 1 35 216 1 35 220 1 35 221 1 35 222 1 35 227 1 35 231 1 35 235 1 35 236 1 35 237 1 35 241 1 35 245 1 35 246 1 35 247 1 35 251 1 35 252 1 35 253 1 35 257 1 35 258 1 35 259 1 35 334 1 35 340 1 35 345 1 35 349 1 35 353 1 35 354 1 35 355 1 35 417 1 35 422 1 35 426 1 35 430 1 35 431 1 35 432 1 35 437 1 35 441 1 35 445 1 35 446 1 35 447 1 35 451 1 35 455 1 35 456 1 35 457 1 35 461 1 35 462 1 35 463 1 35 467 1 35 468 1 35 469 1 35 543 1 35 548 1 35 552 1 35 556 1 35 557 1 35 558 1 35 563 1 35 567 1 35 571 1 35 572 1 35 573 1 35 577 1 35 581 1 35 582 1 35 583 1 35 587 1 35 588 1 35 589 1 35 593 1 35 594 1 35 595 1 35 668 1 35 672 1 35 676 1 35 677 1 35 678 1 35 682 1 35 686 1 35 687 1 35 688 1 35 692 1 35 693 1 35 694 1 35 698 1 35 699 1 35 700 1 35 702 1 35 706 1 35 707 1 35 708 1 35 712 1 35 713 1 35 714 1 35 718 1 35 719 1 35 720 1 35 722 1 35 723 1 35 724 1 35 728 1 35 729 1 35 730 1 35 732 1 35 733 1 35 734 1 35 736 1 36 6 1 36 41 1 36 47 1 36 52 1 36 56 1 36 59 1 36 62 1 36 63 1 36 125 1 36 131 1 36 136 1 36 140 1 36 143 1 36 146 1 36 147 1 36 208 1 36 213 1 36 217 1 36 220 1 36 223 1 36 224 1 36 228 1 36 232 1 36 235 1 36 238 1 36 239 1 36 242 1 36 245 1 36 248 1 36 249 1 36 251 1 36 254 1 36 255 1 36 257 1 36 258 1 36 260 1 36 335 1 36 341 1 36 346 1 36 350 1 36 353 1 36 356 1 36 357 1 36 418 1 36 423 1 36 427 1 36 430 1 36 433 1 36 434 1 36 438 1 36 442 1 36 445 1 36 448 1 36 449 1 36 452 1 36 455 1 36 458 1 36 459 1 36 461 1 36 464 1 36 465 1 36 467 1 36 468 1 36 470 1 36 544 1 36 549 1 36 553 1 36 556 1 36 559 1 36 560 1 36 564 1 36 568 1 36 571 1 36 574 1 36 575 1 36 578 1 36 581 1 36 584 1 36 585 1 36 587 1 36 590 1 36 591 1 36 593 1 36 594 1 36 596 1 36 669 1 36 673 1 36 676 1 36 679 1 36 680 1 36 683 1 36 686 1 36 689 1 36 690 1 36 692 1 36 695 1 36 696 1 36 698 1 36 699 1 36 701 1 36 703 1 36 706 1 36 709 1 36 710 1 36 712 1 36 715 1 36 716 1 36 718 1 36 719 1 36 721 1 36 722 1 36 725 1 36 726 1 36 728 1 36 729 1 36 731 1 36 732 1 36 733 1 36 735 1 36 736 1 37 7 1 37 42 1 37 48 1 37 53 1 37 57 1 37 60 1 37 62 1 37 64 1 37 126 1 37 132 1 37 137 1 37 141 1 37 144 1 37 146 1 37 148 1 37 209 1 37 214 1 37 218 1 37 221 1 37 223 1 37 225 1 37 229 1 37 233 1 37 236 1 37 238 1 37 240 1 37 243 1 37 246 1 37 248 1 37 250 1 37 252 1 37 254 1 37 256 1 37 257 1 37 259 1 37 260 1 37 336 1 37 342 1 37 347 1 37 351 1 37 354 1 37 356 1 37 358 1 37 419 1 37 424 1 37 428 1 37 431 1 37 433 1 37 435 1 37 439 1 37 443 1 37 446 1 37 448 1 37 450 1 37 453 1 37 456 1 37 458 1 37 460 1 37 462 1 37 464 1 37 466 1 37 467 1 37 469 1 37 470 1 37 545 1 37 550 1 37 554 1 37 557 1 37 559 1 37 561 1 37 565 1 37 569 1 37 572 1 37 574 1 37 576 1 37 579 1 37 582 1 37 584 1 37 586 1 37 588 1 37 590 1 37 592 1 37 593 1 37 595 1 37 596 1 37 670 1 37 674 1 37 677 1 37 679 1 37 681 1 37 684 1 37 687 1 37 689 1 37 691 1 37 693 1 37 695 1 37 697 1 37 698 1 37 700 1 37 701 1 37 704 1 37 707 1 37 709 1 37 711 1 37 713 1 37 715 1 37 717 1 37 718 1 37 720 1 37 721 1 37 723 1 37 725 1 37 727 1 37 728 1 37 730 1 37 731 1 37 732 1 37 734 1 37 735 1 37 736 1 38 8 1 38 43 1 38 49 1 38 54 1 38 58 1 38 61 1 38 63 1 38 64 1 38 127 1 38 133 1 38 138 1 38 142 1 38 145 1 38 147 1 38 148 1 38 210 1 38 215 1 38 219 1 38 222 1 38 224 1 38 225 1 38 230 1 38 234 1 38 237 1 38 239 1 38 240 1 38 244 1 38 247 1 38 249 1 38 250 1 38 253 1 38 255 1 38 256 1 38 258 1 38 259 1 38 260 1 38 337 1 38 343 1 38 348 1 38 352 1 38 355 1 38 357 1 38 358 1 38 420 1 38 425 1 38 429 1 38 432 1 38 434 1 38 435 1 38 440 1 38 444 1 38 447 1 38 449 1 38 450 1 38 454 1 38 457 1 38 459 1 38 460 1 38 463 1 38 465 1 38 466 1 38 468 1 38 469 1 38 470 1 38 546 1 38 551 1 38 555 1 38 558 1 38 560 1 38 561 1 38 566 1 38 570 1 38 573 1 38 575 1 38 576 1 38 580 1 38 583 1 38 585 1 38 586 1 38 589 1 38 591 1 38 592 1 38 594 1 38 595 1 38 596 1 38 671 1 38 675 1 38 678 1 38 680 1 38 681 1 38 685 1 38 688 1 38 690 1 38 691 1 38 694 1 38 696 1 38 697 1 38 699 1 38 700 1 38 701 1 38 705 1 38 708 1 38 710 1 38 711 1 38 714 1 38 716 1 38 717 1 38 719 1 38 720 1 38 721 1 38 724 1 38 726 1 38 727 1 38 729 1 38 730 1 38 731 1 38 733 1 38 734 1 38 735 1 38 736 1 39 9 1 39 37 1 39 65 1 39 66 1 39 67 1 39 68 1 39 69 1 39 70 1 39 121 1 39 149 1 39 150 1 39 151 1 39 152 1 39 153 1 39 154 1 39 205 1 39 206 1 39 207 1 39 208 1 39 209 1 39 210 1 39 261 1 39 262 1 39 263 1 39 264 1 39 265 1 39 266 1 39 267 1 39 268 1 39 269 1 39 270 1 39 271 1 39 272 1 39 273 1 39 274 1 39 275 1 39 331 1 39 359 1 39 360 1 39 361 1 39 362 1 39 363 1 39 364 1 39 415 1 39 416 1 39 417 1 39 418 1 39 419 1 39 420 1 39 471 1 39 472 1 39 473 1 39 474 1 39 475 1 39 476 1 39 477 1 39 478 1 39 479 1 39 480 1 39 481 1 39 482 1 39 483 1 39 484 1 39 485 1 39 541 1 39 542 1 39 543 1 39 544 1 39 545 1 39 546 1 39 597 1 39 598 1 39 599 1 39 600 1 39 601 1 39 602 1 39 603 1 39 604 1 39 605 1 39 606 1 39 607 1 39 608 1 39 609 1 39 610 1 39 611 1 39 667 1 39 668 1 39 669 1 39 670 1 39 671 1 39 672 1 39 673 1 39 674 1 39 675 1 39 676 1 39 677 1 39 678 1 39 679 1 39 680 1 39 681 1 39 737 1 39 738 1 39 739 1 39 740 1 39 741 1 39 742 1 39 743 1 39 744 1 39 745 1 39 746 1 39 747 1 39 748 1 39 749 1 39 750 1 39 751 1 39 752 1 39 753 1 39 754 1 39 755 1 39 756 1 40 10 1 40 38 1 40 65 1 40 71 1 40 72 1 40 73 1 40 74 1 40 75 1 40 122 1 40 149 1 40 155 1 40 156 1 40 157 1 40 158 1 40 159 1 40 205 1 40 211 1 40 212 1 40 213 1 40 214 1 40 215 1 40 261 1 40 262 1 40 263 1 40 264 1 40 265 1 40 276 1 40 277 1 40 278 1 40 279 1 40 280 1 40 281 1 40 282 1 40 283 1 40 284 1 40 285 1 40 332 1 40 359 1 40 365 1 40 366 1 40 367 1 40 368 1 40 369 1 40 415 1 40 421 1 40 422 1 40 423 1 40 424 1 40 425 1 40 471 1 40 472 1 40 473 1 40 474 1 40 475 1 40 486 1 40 487 1 40 488 1 40 489 1 40 490 1 40 491 1 40 492 1 40 493 1 40 494 1 40 495 1 40 541 1 40 547 1 40 548 1 40 549 1 40 550 1 40 551 1 40 597 1 40 598 1 40 599 1 40 600 1 40 601 1 40 612 1 40 613 1 40 614 1 40 615 1 40 616 1 40 617 1 40 618 1 40 619 1 40 620 1 40 621 1 40 667 1 40 668 1 40 669 1 40 670 1 40 671 1 40 682 1 40 683 1 40 684 1 40 685 1 40 686 1 40 687 1 40 688 1 40 689 1 40 690 1 40 691 1 40 737 1 40 738 1 40 739 1 40 740 1 40 741 1 40 742 1 40 743 1 40 744 1 40 745 1 40 746 1 40 757 1 40 758 1 40 759 1 40 760 1 40 761 1 40 762 1 40 763 1 40 764 1 40 765 1 40 766 1 41 11 1 41 39 1 41 66 1 41 71 1 41 76 1 41 77 1 41 78 1 41 79 1 41 123 1 41 150 1 41 155 1 41 160 1 41 161 1 41 162 1 41 163 1 41 206 1 41 211 1 41 216 1 41 217 1 41 218 1 41 219 1 41 261 1 41 266 1 41 267 1 41 268 1 41 269 1 41 276 1 41 277 1 41 278 1 41 279 1 41 286 1 41 287 1 41 288 1 41 289 1 41 290 1 41 291 1 41 333 1 41 360 1 41 365 1 41 370 1 41 371 1 41 372 1 41 373 1 41 416 1 41 421 1 41 426 1 41 427 1 41 428 1 41 429 1 41 471 1 41 476 1 41 477 1 41 478 1 41 479 1 41 486 1 41 487 1 41 488 1 41 489 1 41 496 1 41 497 1 41 498 1 41 499 1 41 500 1 41 501 1 41 542 1 41 547 1 41 552 1 41 553 1 41 554 1 41 555 1 41 597 1 41 602 1 41 603 1 41 604 1 41 605 1 41 612 1 41 613 1 41 614 1 41 615 1 41 622 1 41 623 1 41 624 1 41 625 1 41 626 1 41 627 1 41 667 1 41 672 1 41 673 1 41 674 1 41 675 1 41 682 1 41 683 1 41 684 1 41 685 1 41 692 1 41 693 1 41 694 1 41 695 1 41 696 1 41 697 1 41 737 1 41 738 1 41 739 1 41 740 1 41 747 1 41 748 1 41 749 1 41 750 1 41 751 1 41 752 1 41 757 1 41 758 1 41 759 1 41 760 1 41 761 1 41 762 1 41 767 1 41 768 1 41 769 1 41 770 1 42 12 1 42 40 1 42 67 1 42 72 1 42 76 1 42 80 1 42 81 1 42 82 1 42 124 1 42 151 1 42 156 1 42 160 1 42 164 1 42 165 1 42 166 1 42 207 1 42 212 1 42 216 1 42 220 1 42 221 1 42 222 1 42 262 1 42 266 1 42 270 1 42 271 1 42 272 1 42 276 1 42 280 1 42 281 1 42 282 1 42 286 1 42 287 1 42 288 1 42 292 1 42 293 1 42 294 1 42 334 1 42 361 1 42 366 1 42 370 1 42 374 1 42 375 1 42 376 1 42 417 1 42 422 1 42 426 1 42 430 1 42 431 1 42 432 1 42 472 1 42 476 1 42 480 1 42 481 1 42 482 1 42 486 1 42 490 1 42 491 1 42 492 1 42 496 1 42 497 1 42 498 1 42 502 1 42 503 1 42 504 1 42 543 1 42 548 1 42 552 1 42 556 1 42 557 1 42 558 1 42 598 1 42 602 1 42 606 1 42 607 1 42 608 1 42 612 1 42 616 1 42 617 1 42 618 1 42 622 1 42 623 1 42 624 1 42 628 1 42 629 1 42 630 1 42 668 1 42 672 1 42 676 1 42 677 1 42 678 1 42 682 1 42 686 1 42 687 1 42 688 1 42 692 1 42 693 1 42 694 1 42 698 1 42 699 1 42 700 1 42 737 1 42 741 1 42 742 1 42 743 1 42 747 1 42 748 1 42 749 1 42 753 1 42 754 1 42 755 1 42 757 1 42 758 1 42 759 1 42 763 1 42 764 1 42 765 1 42 767 1 42 768 1 42 769 1 42 771 1 43 13 1 43 41 1 43 68 1 43 73 1 43 77 1 43 80 1 43 83 1 43 84 1 43 125 1 43 152 1 43 157 1 43 161 1 43 164 1 43 167 1 43 168 1 43 208 1 43 213 1 43 217 1 43 220 1 43 223 1 43 224 1 43 263 1 43 267 1 43 270 1 43 273 1 43 274 1 43 277 1 43 280 1 43 283 1 43 284 1 43 286 1 43 289 1 43 290 1 43 292 1 43 293 1 43 295 1 43 335 1 43 362 1 43 367 1 43 371 1 43 374 1 43 377 1 43 378 1 43 418 1 43 423 1 43 427 1 43 430 1 43 433 1 43 434 1 43 473 1 43 477 1 43 480 1 43 483 1 43 484 1 43 487 1 43 490 1 43 493 1 43 494 1 43 496 1 43 499 1 43 500 1 43 502 1 43 503 1 43 505 1 43 544 1 43 549 1 43 553 1 43 556 1 43 559 1 43 560 1 43 599 1 43 603 1 43 606 1 43 609 1 43 610 1 43 613 1 43 616 1 43 619 1 43 620 1 43 622 1 43 625 1 43 626 1 43 628 1 43 629 1 43 631 1 43 669 1 43 673 1 43 676 1 43 679 1 43 680 1 43 683 1 43 686 1 43 689 1 43 690 1 43 692 1 43 695 1 43 696 1 43 698 1 43 699 1 43 701 1 43 738 1 43 741 1 43 744 1 43 745 1 43 747 1 43 750 1 43 751 1 43 753 1 43 754 1 43 756 1 43 757 1 43 760 1 43 761 1 43 763 1 43 764 1 43 766 1 43 767 1 43 768 1 43 770 1 43 771 1 44 14 1 44 42 1 44 69 1 44 74 1 44 78 1 44 81 1 44 83 1 44 85 1 44 126 1 44 153 1 44 158 1 44 162 1 44 165 1 44 167 1 44 169 1 44 209 1 44 214 1 44 218 1 44 221 1 44 223 1 44 225 1 44 264 1 44 268 1 44 271 1 44 273 1 44 275 1 44 278 1 44 281 1 44 283 1 44 285 1 44 287 1 44 289 1 44 291 1 44 292 1 44 294 1 44 295 1 44 336 1 44 363 1 44 368 1 44 372 1 44 375 1 44 377 1 44 379 1 44 419 1 44 424 1 44 428 1 44 431 1 44 433 1 44 435 1 44 474 1 44 478 1 44 481 1 44 483 1 44 485 1 44 488 1 44 491 1 44 493 1 44 495 1 44 497 1 44 499 1 44 501 1 44 502 1 44 504 1 44 505 1 44 545 1 44 550 1 44 554 1 44 557 1 44 559 1 44 561 1 44 600 1 44 604 1 44 607 1 44 609 1 44 611 1 44 614 1 44 617 1 44 619 1 44 621 1 44 623 1 44 625 1 44 627 1 44 628 1 44 630 1 44 631 1 44 670 1 44 674 1 44 677 1 44 679 1 44 681 1 44 684 1 44 687 1 44 689 1 44 691 1 44 693 1 44 695 1 44 697 1 44 698 1 44 700 1 44 701 1 44 739 1 44 742 1 44 744 1 44 746 1 44 748 1 44 750 1 44 752 1 44 753 1 44 755 1 44 756 1 44 758 1 44 760 1 44 762 1 44 763 1 44 765 1 44 766 1 44 767 1 44 769 1 44 770 1 44 771 1 45 15 1 45 43 1 45 70 1 45 75 1 45 79 1 45 82 1 45 84 1 45 85 1 45 127 1 45 154 1 45 159 1 45 163 1 45 166 1 45 168 1 45 169 1 45 210 1 45 215 1 45 219 1 45 222 1 45 224 1 45 225 1 45 265 1 45 269 1 45 272 1 45 274 1 45 275 1 45 279 1 45 282 1 45 284 1 45 285 1 45 288 1 45 290 1 45 291 1 45 293 1 45 294 1 45 295 1 45 337 1 45 364 1 45 369 1 45 373 1 45 376 1 45 378 1 45 379 1 45 420 1 45 425 1 45 429 1 45 432 1 45 434 1 45 435 1 45 475 1 45 479 1 45 482 1 45 484 1 45 485 1 45 489 1 45 492 1 45 494 1 45 495 1 45 498 1 45 500 1 45 501 1 45 503 1 45 504 1 45 505 1 45 546 1 45 551 1 45 555 1 45 558 1 45 560 1 45 561 1 45 601 1 45 605 1 45 608 1 45 610 1 45 611 1 45 615 1 45 618 1 45 620 1 45 621 1 45 624 1 45 626 1 45 627 1 45 629 1 45 630 1 45 631 1 45 671 1 45 675 1 45 678 1 45 680 1 45 681 1 45 685 1 45 688 1 45 690 1 45 691 1 45 694 1 45 696 1 45 697 1 45 699 1 45 700 1 45 701 1 45 740 1 45 743 1 45 745 1 45 746 1 45 749 1 45 751 1 45 752 1 45 754 1 45 755 1 45 756 1 45 759 1 45 761 1 45 762 1 45 764 1 45 765 1 45 766 1 45 768 1 45 769 1 45 770 1 45 771 1 46 16 1 46 44 1 46 65 1 46 86 1 46 87 1 46 88 1 46 89 1 46 90 1 46 128 1 46 149 1 46 170 1 46 171 1 46 172 1 46 173 1 46 174 1 46 205 1 46 226 1 46 227 1 46 228 1 46 229 1 46 230 1 46 261 1 46 262 1 46 263 1 46 264 1 46 265 1 46 296 1 46 297 1 46 298 1 46 299 1 46 300 1 46 301 1 46 302 1 46 303 1 46 304 1 46 305 1 46 338 1 46 359 1 46 380 1 46 381 1 46 382 1 46 383 1 46 384 1 46 415 1 46 436 1 46 437 1 46 438 1 46 439 1 46 440 1 46 471 1 46 472 1 46 473 1 46 474 1 46 475 1 46 506 1 46 507 1 46 508 1 46 509 1 46 510 1 46 511 1 46 512 1 46 513 1 46 514 1 46 515 1 46 541 1 46 562 1 46 563 1 46 564 1 46 565 1 46 566 1 46 597 1 46 598 1 46 599 1 46 600 1 46 601 1 46 632 1 46 633 1 46 634 1 46 635 1 46 636 1 46 637 1 46 638 1 46 639 1 46 640 1 46 641 1 46 667 1 46 668 1 46 669 1 46 670 1 46 671 1 46 702 1 46 703 1 46 704 1 46 705 1 46 706 1 46 707 1 46 708 1 46 709 1 46 710 1 46 711 1 46 737 1 46 738 1 46 739 1 46 740 1 46 741 1 46 742 1 46 743 1 46 744 1 46 745 1 46 746 1 46 772 1 46 773 1 46 774 1 46 775 1 46 776 1 46 777 1 46 778 1 46 779 1 46 780 1 46 781 1 47 17 1 47 45 1 47 66 1 47 86 1 47 91 1 47 92 1 47 93 1 47 94 1 47 129 1 47 150 1 47 170 1 47 175 1 47 176 1 47 177 1 47 178 1 47 206 1 47 226 1 47 231 1 47 232 1 47 233 1 47 234 1 47 261 1 47 266 1 47 267 1 47 268 1 47 269 1 47 296 1 47 297 1 47 298 1 47 299 1 47 306 1 47 307 1 47 308 1 47 309 1 47 310 1 47 311 1 47 339 1 47 360 1 47 380 1 47 385 1 47 386 1 47 387 1 47 388 1 47 416 1 47 436 1 47 441 1 47 442 1 47 443 1 47 444 1 47 471 1 47 476 1 47 477 1 47 478 1 47 479 1 47 506 1 47 507 1 47 508 1 47 509 1 47 516 1 47 517 1 47 518 1 47 519 1 47 520 1 47 521 1 47 542 1 47 562 1 47 567 1 47 568 1 47 569 1 47 570 1 47 597 1 47 602 1 47 603 1 47 604 1 47 605 1 47 632 1 47 633 1 47 634 1 47 635 1 47 642 1 47 643 1 47 644 1 47 645 1 47 646 1 47 647 1 47 667 1 47 672 1 47 673 1 47 674 1 47 675 1 47 702 1 47 703 1 47 704 1 47 705 1 47 712 1 47 713 1 47 714 1 47 715 1 47 716 1 47 717 1 47 737 1 47 738 1 47 739 1 47 740 1 47 747 1 47 748 1 47 749 1 47 750 1 47 751 1 47 752 1 47 772 1 47 773 1 47 774 1 47 775 1 47 776 1 47 777 1 47 782 1 47 783 1 47 784 1 47 785 1 48 18 1 48 46 1 48 67 1 48 87 1 48 91 1 48 95 1 48 96 1 48 97 1 48 130 1 48 151 1 48 171 1 48 175 1 48 179 1 48 180 1 48 181 1 48 207 1 48 227 1 48 231 1 48 235 1 48 236 1 48 237 1 48 262 1 48 266 1 48 270 1 48 271 1 48 272 1 48 296 1 48 300 1 48 301 1 48 302 1 48 306 1 48 307 1 48 308 1 48 312 1 48 313 1 48 314 1 48 340 1 48 361 1 48 381 1 48 385 1 48 389 1 48 390 1 48 391 1 48 417 1 48 437 1 48 441 1 48 445 1 48 446 1 48 447 1 48 472 1 48 476 1 48 480 1 48 481 1 48 482 1 48 506 1 48 510 1 48 511 1 48 512 1 48 516 1 48 517 1 48 518 1 48 522 1 48 523 1 48 524 1 48 543 1 48 563 1 48 567 1 48 571 1 48 572 1 48 573 1 48 598 1 48 602 1 48 606 1 48 607 1 48 608 1 48 632 1 48 636 1 48 637 1 48 638 1 48 642 1 48 643 1 48 644 1 48 648 1 48 649 1 48 650 1 48 668 1 48 672 1 48 676 1 48 677 1 48 678 1 48 702 1 48 706 1 48 707 1 48 708 1 48 712 1 48 713 1 48 714 1 48 718 1 48 719 1 48 720 1 48 737 1 48 741 1 48 742 1 48 743 1 48 747 1 48 748 1 48 749 1 48 753 1 48 754 1 48 755 1 48 772 1 48 773 1 48 774 1 48 778 1 48 779 1 48 780 1 48 782 1 48 783 1 48 784 1 48 786 1 49 19 1 49 47 1 49 68 1 49 88 1 49 92 1 49 95 1 49 98 1 49 99 1 49 131 1 49 152 1 49 172 1 49 176 1 49 179 1 49 182 1 49 183 1 49 208 1 49 228 1 49 232 1 49 235 1 49 238 1 49 239 1 49 263 1 49 267 1 49 270 1 49 273 1 49 274 1 49 297 1 49 300 1 49 303 1 49 304 1 49 306 1 49 309 1 49 310 1 49 312 1 49 313 1 49 315 1 49 341 1 49 362 1 49 382 1 49 386 1 49 389 1 49 392 1 49 393 1 49 418 1 49 438 1 49 442 1 49 445 1 49 448 1 49 449 1 49 473 1 49 477 1 49 480 1 49 483 1 49 484 1 49 507 1 49 510 1 49 513 1 49 514 1 49 516 1 49 519 1 49 520 1 49 522 1 49 523 1 49 525 1 49 544 1 49 564 1 49 568 1 49 571 1 49 574 1 49 575 1 49 599 1 49 603 1 49 606 1 49 609 1 49 610 1 49 633 1 49 636 1 49 639 1 49 640 1 49 642 1 49 645 1 49 646 1 49 648 1 49 649 1 49 651 1 49 669 1 49 673 1 49 676 1 49 679 1 49 680 1 49 703 1 49 706 1 49 709 1 49 710 1 49 712 1 49 715 1 49 716 1 49 718 1 49 719 1 49 721 1 49 738 1 49 741 1 49 744 1 49 745 1 49 747 1 49 750 1 49 751 1 49 753 1 49 754 1 49 756 1 49 772 1 49 775 1 49 776 1 49 778 1 49 779 1 49 781 1 49 782 1 49 783 1 49 785 1 49 786 1 50 20 1 50 48 1 50 69 1 50 89 1 50 93 1 50 96 1 50 98 1 50 100 1 50 132 1 50 153 1 50 173 1 50 177 1 50 180 1 50 182 1 50 184 1 50 209 1 50 229 1 50 233 1 50 236 1 50 238 1 50 240 1 50 264 1 50 268 1 50 271 1 50 273 1 50 275 1 50 298 1 50 301 1 50 303 1 50 305 1 50 307 1 50 309 1 50 311 1 50 312 1 50 314 1 50 315 1 50 342 1 50 363 1 50 383 1 50 387 1 50 390 1 50 392 1 50 394 1 50 419 1 50 439 1 50 443 1 50 446 1 50 448 1 50 450 1 50 474 1 50 478 1 50 481 1 50 483 1 50 485 1 50 508 1 50 511 1 50 513 1 50 515 1 50 517 1 50 519 1 50 521 1 50 522 1 50 524 1 50 525 1 50 545 1 50 565 1 50 569 1 50 572 1 50 574 1 50 576 1 50 600 1 50 604 1 50 607 1 50 609 1 50 611 1 50 634 1 50 637 1 50 639 1 50 641 1 50 643 1 50 645 1 50 647 1 50 648 1 50 650 1 50 651 1 50 670 1 50 674 1 50 677 1 50 679 1 50 681 1 50 704 1 50 707 1 50 709 1 50 711 1 50 713 1 50 715 1 50 717 1 50 718 1 50 720 1 50 721 1 50 739 1 50 742 1 50 744 1 50 746 1 50 748 1 50 750 1 50 752 1 50 753 1 50 755 1 50 756 1 50 773 1 50 775 1 50 777 1 50 778 1 50 780 1 50 781 1 50 782 1 50 784 1 50 785 1 50 786 1 51 21 1 51 49 1 51 70 1 51 90 1 51 94 1 51 97 1 51 99 1 51 100 1 51 133 1 51 154 1 51 174 1 51 178 1 51 181 1 51 183 1 51 184 1 51 210 1 51 230 1 51 234 1 51 237 1 51 239 1 51 240 1 51 265 1 51 269 1 51 272 1 51 274 1 51 275 1 51 299 1 51 302 1 51 304 1 51 305 1 51 308 1 51 310 1 51 311 1 51 313 1 51 314 1 51 315 1 51 343 1 51 364 1 51 384 1 51 388 1 51 391 1 51 393 1 51 394 1 51 420 1 51 440 1 51 444 1 51 447 1 51 449 1 51 450 1 51 475 1 51 479 1 51 482 1 51 484 1 51 485 1 51 509 1 51 512 1 51 514 1 51 515 1 51 518 1 51 520 1 51 521 1 51 523 1 51 524 1 51 525 1 51 546 1 51 566 1 51 570 1 51 573 1 51 575 1 51 576 1 51 601 1 51 605 1 51 608 1 51 610 1 51 611 1 51 635 1 51 638 1 51 640 1 51 641 1 51 644 1 51 646 1 51 647 1 51 649 1 51 650 1 51 651 1 51 671 1 51 675 1 51 678 1 51 680 1 51 681 1 51 705 1 51 708 1 51 710 1 51 711 1 51 714 1 51 716 1 51 717 1 51 719 1 51 720 1 51 721 1 51 740 1 51 743 1 51 745 1 51 746 1 51 749 1 51 751 1 51 752 1 51 754 1 51 755 1 51 756 1 51 774 1 51 776 1 51 777 1 51 779 1 51 780 1 51 781 1 51 783 1 51 784 1 51 785 1 51 786 1 52 22 1 52 50 1 52 71 1 52 86 1 52 101 1 52 102 1 52 103 1 52 104 1 52 134 1 52 155 1 52 170 1 52 185 1 52 186 1 52 187 1 52 188 1 52 211 1 52 226 1 52 241 1 52 242 1 52 243 1 52 244 1 52 261 1 52 276 1 52 277 1 52 278 1 52 279 1 52 296 1 52 297 1 52 298 1 52 299 1 52 316 1 52 317 1 52 318 1 52 319 1 52 320 1 52 321 1 52 344 1 52 365 1 52 380 1 52 395 1 52 396 1 52 397 1 52 398 1 52 421 1 52 436 1 52 451 1 52 452 1 52 453 1 52 454 1 52 471 1 52 486 1 52 487 1 52 488 1 52 489 1 52 506 1 52 507 1 52 508 1 52 509 1 52 526 1 52 527 1 52 528 1 52 529 1 52 530 1 52 531 1 52 547 1 52 562 1 52 577 1 52 578 1 52 579 1 52 580 1 52 597 1 52 612 1 52 613 1 52 614 1 52 615 1 52 632 1 52 633 1 52 634 1 52 635 1 52 652 1 52 653 1 52 654 1 52 655 1 52 656 1 52 657 1 52 667 1 52 682 1 52 683 1 52 684 1 52 685 1 52 702 1 52 703 1 52 704 1 52 705 1 52 722 1 52 723 1 52 724 1 52 725 1 52 726 1 52 727 1 52 737 1 52 738 1 52 739 1 52 740 1 52 757 1 52 758 1 52 759 1 52 760 1 52 761 1 52 762 1 52 772 1 52 773 1 52 774 1 52 775 1 52 776 1 52 777 1 52 787 1 52 788 1 52 789 1 52 790 1 53 23 1 53 51 1 53 72 1 53 87 1 53 101 1 53 105 1 53 106 1 53 107 1 53 135 1 53 156 1 53 171 1 53 185 1 53 189 1 53 190 1 53 191 1 53 212 1 53 227 1 53 241 1 53 245 1 53 246 1 53 247 1 53 262 1 53 276 1 53 280 1 53 281 1 53 282 1 53 296 1 53 300 1 53 301 1 53 302 1 53 316 1 53 317 1 53 318 1 53 322 1 53 323 1 53 324 1 53 345 1 53 366 1 53 381 1 53 395 1 53 399 1 53 400 1 53 401 1 53 422 1 53 437 1 53 451 1 53 455 1 53 456 1 53 457 1 53 472 1 53 486 1 53 490 1 53 491 1 53 492 1 53 506 1 53 510 1 53 511 1 53 512 1 53 526 1 53 527 1 53 528 1 53 532 1 53 533 1 53 534 1 53 548 1 53 563 1 53 577 1 53 581 1 53 582 1 53 583 1 53 598 1 53 612 1 53 616 1 53 617 1 53 618 1 53 632 1 53 636 1 53 637 1 53 638 1 53 652 1 53 653 1 53 654 1 53 658 1 53 659 1 53 660 1 53 668 1 53 682 1 53 686 1 53 687 1 53 688 1 53 702 1 53 706 1 53 707 1 53 708 1 53 722 1 53 723 1 53 724 1 53 728 1 53 729 1 53 730 1 53 737 1 53 741 1 53 742 1 53 743 1 53 757 1 53 758 1 53 759 1 53 763 1 53 764 1 53 765 1 53 772 1 53 773 1 53 774 1 53 778 1 53 779 1 53 780 1 53 787 1 53 788 1 53 789 1 53 791 1 54 24 1 54 52 1 54 73 1 54 88 1 54 102 1 54 105 1 54 108 1 54 109 1 54 136 1 54 157 1 54 172 1 54 186 1 54 189 1 54 192 1 54 193 1 54 213 1 54 228 1 54 242 1 54 245 1 54 248 1 54 249 1 54 263 1 54 277 1 54 280 1 54 283 1 54 284 1 54 297 1 54 300 1 54 303 1 54 304 1 54 316 1 54 319 1 54 320 1 54 322 1 54 323 1 54 325 1 54 346 1 54 367 1 54 382 1 54 396 1 54 399 1 54 402 1 54 403 1 54 423 1 54 438 1 54 452 1 54 455 1 54 458 1 54 459 1 54 473 1 54 487 1 54 490 1 54 493 1 54 494 1 54 507 1 54 510 1 54 513 1 54 514 1 54 526 1 54 529 1 54 530 1 54 532 1 54 533 1 54 535 1 54 549 1 54 564 1 54 578 1 54 581 1 54 584 1 54 585 1 54 599 1 54 613 1 54 616 1 54 619 1 54 620 1 54 633 1 54 636 1 54 639 1 54 640 1 54 652 1 54 655 1 54 656 1 54 658 1 54 659 1 54 661 1 54 669 1 54 683 1 54 686 1 54 689 1 54 690 1 54 703 1 54 706 1 54 709 1 54 710 1 54 722 1 54 725 1 54 726 1 54 728 1 54 729 1 54 731 1 54 738 1 54 741 1 54 744 1 54 745 1 54 757 1 54 760 1 54 761 1 54 763 1 54 764 1 54 766 1 54 772 1 54 775 1 54 776 1 54 778 1 54 779 1 54 781 1 54 787 1 54 788 1 54 790 1 54 791 1 55 25 1 55 53 1 55 74 1 55 89 1 55 103 1 55 106 1 55 108 1 55 110 1 55 137 1 55 158 1 55 173 1 55 187 1 55 190 1 55 192 1 55 194 1 55 214 1 55 229 1 55 243 1 55 246 1 55 248 1 55 250 1 55 264 1 55 278 1 55 281 1 55 283 1 55 285 1 55 298 1 55 301 1 55 303 1 55 305 1 55 317 1 55 319 1 55 321 1 55 322 1 55 324 1 55 325 1 55 347 1 55 368 1 55 383 1 55 397 1 55 400 1 55 402 1 55 404 1 55 424 1 55 439 1 55 453 1 55 456 1 55 458 1 55 460 1 55 474 1 55 488 1 55 491 1 55 493 1 55 495 1 55 508 1 55 511 1 55 513 1 55 515 1 55 527 1 55 529 1 55 531 1 55 532 1 55 534 1 55 535 1 55 550 1 55 565 1 55 579 1 55 582 1 55 584 1 55 586 1 55 600 1 55 614 1 55 617 1 55 619 1 55 621 1 55 634 1 55 637 1 55 639 1 55 641 1 55 653 1 55 655 1 55 657 1 55 658 1 55 660 1 55 661 1 55 670 1 55 684 1 55 687 1 55 689 1 55 691 1 55 704 1 55 707 1 55 709 1 55 711 1 55 723 1 55 725 1 55 727 1 55 728 1 55 730 1 55 731 1 55 739 1 55 742 1 55 744 1 55 746 1 55 758 1 55 760 1 55 762 1 55 763 1 55 765 1 55 766 1 55 773 1 55 775 1 55 777 1 55 778 1 55 780 1 55 781 1 55 787 1 55 789 1 55 790 1 55 791 1 56 26 1 56 54 1 56 75 1 56 90 1 56 104 1 56 107 1 56 109 1 56 110 1 56 138 1 56 159 1 56 174 1 56 188 1 56 191 1 56 193 1 56 194 1 56 215 1 56 230 1 56 244 1 56 247 1 56 249 1 56 250 1 56 265 1 56 279 1 56 282 1 56 284 1 56 285 1 56 299 1 56 302 1 56 304 1 56 305 1 56 318 1 56 320 1 56 321 1 56 323 1 56 324 1 56 325 1 56 348 1 56 369 1 56 384 1 56 398 1 56 401 1 56 403 1 56 404 1 56 425 1 56 440 1 56 454 1 56 457 1 56 459 1 56 460 1 56 475 1 56 489 1 56 492 1 56 494 1 56 495 1 56 509 1 56 512 1 56 514 1 56 515 1 56 528 1 56 530 1 56 531 1 56 533 1 56 534 1 56 535 1 56 551 1 56 566 1 56 580 1 56 583 1 56 585 1 56 586 1 56 601 1 56 615 1 56 618 1 56 620 1 56 621 1 56 635 1 56 638 1 56 640 1 56 641 1 56 654 1 56 656 1 56 657 1 56 659 1 56 660 1 56 661 1 56 671 1 56 685 1 56 688 1 56 690 1 56 691 1 56 705 1 56 708 1 56 710 1 56 711 1 56 724 1 56 726 1 56 727 1 56 729 1 56 730 1 56 731 1 56 740 1 56 743 1 56 745 1 56 746 1 56 759 1 56 761 1 56 762 1 56 764 1 56 765 1 56 766 1 56 774 1 56 776 1 56 777 1 56 779 1 56 780 1 56 781 1 56 788 1 56 789 1 56 790 1 56 791 1 57 27 1 57 55 1 57 76 1 57 91 1 57 101 1 57 111 1 57 112 1 57 113 1 57 139 1 57 160 1 57 175 1 57 185 1 57 195 1 57 196 1 57 197 1 57 216 1 57 231 1 57 241 1 57 251 1 57 252 1 57 253 1 57 266 1 57 276 1 57 286 1 57 287 1 57 288 1 57 296 1 57 306 1 57 307 1 57 308 1 57 316 1 57 317 1 57 318 1 57 326 1 57 327 1 57 328 1 57 349 1 57 370 1 57 385 1 57 395 1 57 405 1 57 406 1 57 407 1 57 426 1 57 441 1 57 451 1 57 461 1 57 462 1 57 463 1 57 476 1 57 486 1 57 496 1 57 497 1 57 498 1 57 506 1 57 516 1 57 517 1 57 518 1 57 526 1 57 527 1 57 528 1 57 536 1 57 537 1 57 538 1 57 552 1 57 567 1 57 577 1 57 587 1 57 588 1 57 589 1 57 602 1 57 612 1 57 622 1 57 623 1 57 624 1 57 632 1 57 642 1 57 643 1 57 644 1 57 652 1 57 653 1 57 654 1 57 662 1 57 663 1 57 664 1 57 672 1 57 682 1 57 692 1 57 693 1 57 694 1 57 702 1 57 712 1 57 713 1 57 714 1 57 722 1 57 723 1 57 724 1 57 732 1 57 733 1 57 734 1 57 737 1 57 747 1 57 748 1 57 749 1 57 757 1 57 758 1 57 759 1 57 767 1 57 768 1 57 769 1 57 772 1 57 773 1 57 774 1 57 782 1 57 783 1 57 784 1 57 787 1 57 788 1 57 789 1 57 792 1 58 28 1 58 56 1 58 77 1 58 92 1 58 102 1 58 111 1 58 114 1 58 115 1 58 140 1 58 161 1 58 176 1 58 186 1 58 195 1 58 198 1 58 199 1 58 217 1 58 232 1 58 242 1 58 251 1 58 254 1 58 255 1 58 267 1 58 277 1 58 286 1 58 289 1 58 290 1 58 297 1 58 306 1 58 309 1 58 310 1 58 316 1 58 319 1 58 320 1 58 326 1 58 327 1 58 329 1 58 350 1 58 371 1 58 386 1 58 396 1 58 405 1 58 408 1 58 409 1 58 427 1 58 442 1 58 452 1 58 461 1 58 464 1 58 465 1 58 477 1 58 487 1 58 496 1 58 499 1 58 500 1 58 507 1 58 516 1 58 519 1 58 520 1 58 526 1 58 529 1 58 530 1 58 536 1 58 537 1 58 539 1 58 553 1 58 568 1 58 578 1 58 587 1 58 590 1 58 591 1 58 603 1 58 613 1 58 622 1 58 625 1 58 626 1 58 633 1 58 642 1 58 645 1 58 646 1 58 652 1 58 655 1 58 656 1 58 662 1 58 663 1 58 665 1 58 673 1 58 683 1 58 692 1 58 695 1 58 696 1 58 703 1 58 712 1 58 715 1 58 716 1 58 722 1 58 725 1 58 726 1 58 732 1 58 733 1 58 735 1 58 738 1 58 747 1 58 750 1 58 751 1 58 757 1 58 760 1 58 761 1 58 767 1 58 768 1 58 770 1 58 772 1 58 775 1 58 776 1 58 782 1 58 783 1 58 785 1 58 787 1 58 788 1 58 790 1 58 792 1 59 29 1 59 57 1 59 78 1 59 93 1 59 103 1 59 112 1 59 114 1 59 116 1 59 141 1 59 162 1 59 177 1 59 187 1 59 196 1 59 198 1 59 200 1 59 218 1 59 233 1 59 243 1 59 252 1 59 254 1 59 256 1 59 268 1 59 278 1 59 287 1 59 289 1 59 291 1 59 298 1 59 307 1 59 309 1 59 311 1 59 317 1 59 319 1 59 321 1 59 326 1 59 328 1 59 329 1 59 351 1 59 372 1 59 387 1 59 397 1 59 406 1 59 408 1 59 410 1 59 428 1 59 443 1 59 453 1 59 462 1 59 464 1 59 466 1 59 478 1 59 488 1 59 497 1 59 499 1 59 501 1 59 508 1 59 517 1 59 519 1 59 521 1 59 527 1 59 529 1 59 531 1 59 536 1 59 538 1 59 539 1 59 554 1 59 569 1 59 579 1 59 588 1 59 590 1 59 592 1 59 604 1 59 614 1 59 623 1 59 625 1 59 627 1 59 634 1 59 643 1 59 645 1 59 647 1 59 653 1 59 655 1 59 657 1 59 662 1 59 664 1 59 665 1 59 674 1 59 684 1 59 693 1 59 695 1 59 697 1 59 704 1 59 713 1 59 715 1 59 717 1 59 723 1 59 725 1 59 727 1 59 732 1 59 734 1 59 735 1 59 739 1 59 748 1 59 750 1 59 752 1 59 758 1 59 760 1 59 762 1 59 767 1 59 769 1 59 770 1 59 773 1 59 775 1 59 777 1 59 782 1 59 784 1 59 785 1 59 787 1 59 789 1 59 790 1 59 792 1 60 30 1 60 58 1 60 79 1 60 94 1 60 104 1 60 113 1 60 115 1 60 116 1 60 142 1 60 163 1 60 178 1 60 188 1 60 197 1 60 199 1 60 200 1 60 219 1 60 234 1 60 244 1 60 253 1 60 255 1 60 256 1 60 269 1 60 279 1 60 288 1 60 290 1 60 291 1 60 299 1 60 308 1 60 310 1 60 311 1 60 318 1 60 320 1 60 321 1 60 327 1 60 328 1 60 329 1 60 352 1 60 373 1 60 388 1 60 398 1 60 407 1 60 409 1 60 410 1 60 429 1 60 444 1 60 454 1 60 463 1 60 465 1 60 466 1 60 479 1 60 489 1 60 498 1 60 500 1 60 501 1 60 509 1 60 518 1 60 520 1 60 521 1 60 528 1 60 530 1 60 531 1 60 537 1 60 538 1 60 539 1 60 555 1 60 570 1 60 580 1 60 589 1 60 591 1 60 592 1 60 605 1 60 615 1 60 624 1 60 626 1 60 627 1 60 635 1 60 644 1 60 646 1 60 647 1 60 654 1 60 656 1 60 657 1 60 663 1 60 664 1 60 665 1 60 675 1 60 685 1 60 694 1 60 696 1 60 697 1 60 705 1 60 714 1 60 716 1 60 717 1 60 724 1 60 726 1 60 727 1 60 733 1 60 734 1 60 735 1 60 740 1 60 749 1 60 751 1 60 752 1 60 759 1 60 761 1 60 762 1 60 768 1 60 769 1 60 770 1 60 774 1 60 776 1 60 777 1 60 783 1 60 784 1 60 785 1 60 788 1 60 789 1 60 790 1 60 792 1 61 31 1 61 59 1 61 80 1 61 95 1 61 105 1 61 111 1 61 117 1 61 118 1 61 143 1 61 164 1 61 179 1 61 189 1 61 195 1 61 201 1 61 202 1 61 220 1 61 235 1 61 245 1 61 251 1 61 257 1 61 258 1 61 270 1 61 280 1 61 286 1 61 292 1 61 293 1 61 300 1 61 306 1 61 312 1 61 313 1 61 316 1 61 322 1 61 323 1 61 326 1 61 327 1 61 330 1 61 353 1 61 374 1 61 389 1 61 399 1 61 405 1 61 411 1 61 412 1 61 430 1 61 445 1 61 455 1 61 461 1 61 467 1 61 468 1 61 480 1 61 490 1 61 496 1 61 502 1 61 503 1 61 510 1 61 516 1 61 522 1 61 523 1 61 526 1 61 532 1 61 533 1 61 536 1 61 537 1 61 540 1 61 556 1 61 571 1 61 581 1 61 587 1 61 593 1 61 594 1 61 606 1 61 616 1 61 622 1 61 628 1 61 629 1 61 636 1 61 642 1 61 648 1 61 649 1 61 652 1 61 658 1 61 659 1 61 662 1 61 663 1 61 666 1 61 676 1 61 686 1 61 692 1 61 698 1 61 699 1 61 706 1 61 712 1 61 718 1 61 719 1 61 722 1 61 728 1 61 729 1 61 732 1 61 733 1 61 736 1 61 741 1 61 747 1 61 753 1 61 754 1 61 757 1 61 763 1 61 764 1 61 767 1 61 768 1 61 771 1 61 772 1 61 778 1 61 779 1 61 782 1 61 783 1 61 786 1 61 787 1 61 788 1 61 791 1 61 792 1 62 32 1 62 60 1 62 81 1 62 96 1 62 106 1 62 112 1 62 117 1 62 119 1 62 144 1 62 165 1 62 180 1 62 190 1 62 196 1 62 201 1 62 203 1 62 221 1 62 236 1 62 246 1 62 252 1 62 257 1 62 259 1 62 271 1 62 281 1 62 287 1 62 292 1 62 294 1 62 301 1 62 307 1 62 312 1 62 314 1 62 317 1 62 322 1 62 324 1 62 326 1 62 328 1 62 330 1 62 354 1 62 375 1 62 390 1 62 400 1 62 406 1 62 411 1 62 413 1 62 431 1 62 446 1 62 456 1 62 462 1 62 467 1 62 469 1 62 481 1 62 491 1 62 497 1 62 502 1 62 504 1 62 511 1 62 517 1 62 522 1 62 524 1 62 527 1 62 532 1 62 534 1 62 536 1 62 538 1 62 540 1 62 557 1 62 572 1 62 582 1 62 588 1 62 593 1 62 595 1 62 607 1 62 617 1 62 623 1 62 628 1 62 630 1 62 637 1 62 643 1 62 648 1 62 650 1 62 653 1 62 658 1 62 660 1 62 662 1 62 664 1 62 666 1 62 677 1 62 687 1 62 693 1 62 698 1 62 700 1 62 707 1 62 713 1 62 718 1 62 720 1 62 723 1 62 728 1 62 730 1 62 732 1 62 734 1 62 736 1 62 742 1 62 748 1 62 753 1 62 755 1 62 758 1 62 763 1 62 765 1 62 767 1 62 769 1 62 771 1 62 773 1 62 778 1 62 780 1 62 782 1 62 784 1 62 786 1 62 787 1 62 789 1 62 791 1 62 792 1 63 33 1 63 61 1 63 82 1 63 97 1 63 107 1 63 113 1 63 118 1 63 119 1 63 145 1 63 166 1 63 181 1 63 191 1 63 197 1 63 202 1 63 203 1 63 222 1 63 237 1 63 247 1 63 253 1 63 258 1 63 259 1 63 272 1 63 282 1 63 288 1 63 293 1 63 294 1 63 302 1 63 308 1 63 313 1 63 314 1 63 318 1 63 323 1 63 324 1 63 327 1 63 328 1 63 330 1 63 355 1 63 376 1 63 391 1 63 401 1 63 407 1 63 412 1 63 413 1 63 432 1 63 447 1 63 457 1 63 463 1 63 468 1 63 469 1 63 482 1 63 492 1 63 498 1 63 503 1 63 504 1 63 512 1 63 518 1 63 523 1 63 524 1 63 528 1 63 533 1 63 534 1 63 537 1 63 538 1 63 540 1 63 558 1 63 573 1 63 583 1 63 589 1 63 594 1 63 595 1 63 608 1 63 618 1 63 624 1 63 629 1 63 630 1 63 638 1 63 644 1 63 649 1 63 650 1 63 654 1 63 659 1 63 660 1 63 663 1 63 664 1 63 666 1 63 678 1 63 688 1 63 694 1 63 699 1 63 700 1 63 708 1 63 714 1 63 719 1 63 720 1 63 724 1 63 729 1 63 730 1 63 733 1 63 734 1 63 736 1 63 743 1 63 749 1 63 754 1 63 755 1 63 759 1 63 764 1 63 765 1 63 768 1 63 769 1 63 771 1 63 774 1 63 779 1 63 780 1 63 783 1 63 784 1 63 786 1 63 788 1 63 789 1 63 791 1 63 792 1 64 34 1 64 62 1 64 83 1 64 98 1 64 108 1 64 114 1 64 117 1 64 120 1 64 146 1 64 167 1 64 182 1 64 192 1 64 198 1 64 201 1 64 204 1 64 223 1 64 238 1 64 248 1 64 254 1 64 257 1 64 260 1 64 273 1 64 283 1 64 289 1 64 292 1 64 295 1 64 303 1 64 309 1 64 312 1 64 315 1 64 319 1 64 322 1 64 325 1 64 326 1 64 329 1 64 330 1 64 356 1 64 377 1 64 392 1 64 402 1 64 408 1 64 411 1 64 414 1 64 433 1 64 448 1 64 458 1 64 464 1 64 467 1 64 470 1 64 483 1 64 493 1 64 499 1 64 502 1 64 505 1 64 513 1 64 519 1 64 522 1 64 525 1 64 529 1 64 532 1 64 535 1 64 536 1 64 539 1 64 540 1 64 559 1 64 574 1 64 584 1 64 590 1 64 593 1 64 596 1 64 609 1 64 619 1 64 625 1 64 628 1 64 631 1 64 639 1 64 645 1 64 648 1 64 651 1 64 655 1 64 658 1 64 661 1 64 662 1 64 665 1 64 666 1 64 679 1 64 689 1 64 695 1 64 698 1 64 701 1 64 709 1 64 715 1 64 718 1 64 721 1 64 725 1 64 728 1 64 731 1 64 732 1 64 735 1 64 736 1 64 744 1 64 750 1 64 753 1 64 756 1 64 760 1 64 763 1 64 766 1 64 767 1 64 770 1 64 771 1 64 775 1 64 778 1 64 781 1 64 782 1 64 785 1 64 786 1 64 787 1 64 790 1 64 791 1 64 792 1 65 35 1 65 63 1 65 84 1 65 99 1 65 109 1 65 115 1 65 118 1 65 120 1 65 147 1 65 168 1 65 183 1 65 193 1 65 199 1 65 202 1 65 204 1 65 224 1 65 239 1 65 249 1 65 255 1 65 258 1 65 260 1 65 274 1 65 284 1 65 290 1 65 293 1 65 295 1 65 304 1 65 310 1 65 313 1 65 315 1 65 320 1 65 323 1 65 325 1 65 327 1 65 329 1 65 330 1 65 357 1 65 378 1 65 393 1 65 403 1 65 409 1 65 412 1 65 414 1 65 434 1 65 449 1 65 459 1 65 465 1 65 468 1 65 470 1 65 484 1 65 494 1 65 500 1 65 503 1 65 505 1 65 514 1 65 520 1 65 523 1 65 525 1 65 530 1 65 533 1 65 535 1 65 537 1 65 539 1 65 540 1 65 560 1 65 575 1 65 585 1 65 591 1 65 594 1 65 596 1 65 610 1 65 620 1 65 626 1 65 629 1 65 631 1 65 640 1 65 646 1 65 649 1 65 651 1 65 656 1 65 659 1 65 661 1 65 663 1 65 665 1 65 666 1 65 680 1 65 690 1 65 696 1 65 699 1 65 701 1 65 710 1 65 716 1 65 719 1 65 721 1 65 726 1 65 729 1 65 731 1 65 733 1 65 735 1 65 736 1 65 745 1 65 751 1 65 754 1 65 756 1 65 761 1 65 764 1 65 766 1 65 768 1 65 770 1 65 771 1 65 776 1 65 779 1 65 781 1 65 783 1 65 785 1 65 786 1 65 788 1 65 790 1 65 791 1 65 792 1 66 36 1 66 64 1 66 85 1 66 100 1 66 110 1 66 116 1 66 119 1 66 120 1 66 148 1 66 169 1 66 184 1 66 194 1 66 200 1 66 203 1 66 204 1 66 225 1 66 240 1 66 250 1 66 256 1 66 259 1 66 260 1 66 275 1 66 285 1 66 291 1 66 294 1 66 295 1 66 305 1 66 311 1 66 314 1 66 315 1 66 321 1 66 324 1 66 325 1 66 328 1 66 329 1 66 330 1 66 358 1 66 379 1 66 394 1 66 404 1 66 410 1 66 413 1 66 414 1 66 435 1 66 450 1 66 460 1 66 466 1 66 469 1 66 470 1 66 485 1 66 495 1 66 501 1 66 504 1 66 505 1 66 515 1 66 521 1 66 524 1 66 525 1 66 531 1 66 534 1 66 535 1 66 538 1 66 539 1 66 540 1 66 561 1 66 576 1 66 586 1 66 592 1 66 595 1 66 596 1 66 611 1 66 621 1 66 627 1 66 630 1 66 631 1 66 641 1 66 647 1 66 650 1 66 651 1 66 657 1 66 660 1 66 661 1 66 664 1 66 665 1 66 666 1 66 681 1 66 691 1 66 697 1 66 700 1 66 701 1 66 711 1 66 717 1 66 720 1 66 721 1 66 727 1 66 730 1 66 731 1 66 734 1 66 735 1 66 736 1 66 746 1 66 752 1 66 755 1 66 756 1 66 762 1 66 765 1 66 766 1 66 769 1 66 770 1 66 771 1 66 777 1 66 780 1 66 781 1 66 784 1 66 785 1 66 786 1 66 789 1 66 790 1 66 791 1 66 792 1 0 0 0 linbox-1.6.3/benchmarks/matrix/bibd_12_5_66x792.sms.gz000066400000000000000000000456731347646240000222200ustar00rootroot00000000000000 .Rbibd_12_5_66x792.smsE[DO+v&g#ns(+*b;k˼)Ey߿o~s<5HX#b5BH#e#e=RH#e=RH9#匔3RH9#匔3RHb#FGF)6RlH#GWǎ)>R|H#%FJ))1RbHɑ#%GJ)9RR7өtj?Oөtj?Oө=:GڣS{tjNѩ=:G?Ua#e=RH#e=RH9#匔3RH9˦ڪ^ΥMyU^]zқ^ yz?w$HIIIѱggggg猔C/y!y!y!y)y)y)y)y)y)y\brJ^I^K^K^K^K^K^K^K^K^3ۙ?MfOSQy*yJ߿oMy7f#$nh#F)>R|HqjH#GJ)1Rbڼ[ף+]5u-]UG:yG:yG:yG:yG:yG:yG:yG:yG:ys]Cԕ~jt%yK-ے߭߭߭߭߭߭߭߭߭߭߭߭߭&֌ݚ[svknڭi5o&ݚ]{:ioYl?fYl?ʹLʹLʹLʹ1lL%ST1lL%ST1lL%ST1lL%ST1lL%ST1LiLf4Ӥ&4ii2BUȴ V!*dZLi2BUȴ V!*dZLi2BUȴ V!f4Ӥ&4iI3MiLf4Ӥ&4iI3MiLf4Ӥ&4iUjV{ڻrzڻM{5fښC[hkmMy5fTښK[ik6mMKJJJZZZZZުo>Ʀcl>Ʀ飙>+J>+J裙>飙>飙>鳷[-|>{ go᳷jV)=RZ"Z]kt-EХ.tK5]RM2\Psj.Ce 52\Psj.CeTӥ.tK5]Z\kr-^˵x/Z\kr-^˵x/jTӥ.tK5]RMjTӥ.tK5]w$ٚ%[dk͓Ӥm]䩟ϒ%yK= g,1ˋbvy12F7cL41AcL݌YcĘ%1fIYct3F7ct3F7ct3amCІ=amCІ=amCfHICh Y! 4d4.кZCbHICJRҐ4 ~B' ~B' ~BJZCbh] u1!% )iHICJCa" Y!0d,ECaHICJRҐ4ޅֻzZB]h w.ޅֻ4!% )iHICJRҐ*E:+u-]%oKޖ<Ϳ#;ҹ.2ǘY9s4%%%%ǘY9s4g/ sV%ͱMsl46QҜE2gY$sɔ4)%MNRdS)Y,eԦVДm`jVДӔq2NSiJIS+ejL2)%M)iJISG#ԑC!u:rH)%M)4eӔVJZ)S+eJISJRҔamXjچamXJIS+ejL2)%M)iJISFfL)#3ed̔4)%M12VʘZSJRҔ4)%WyOVƮYBkfYc,5JZs6Ss6Ss6Sc,5JZW+k%1ZkbV̒#ґuȺ,3ҙLLdޖVВvbiXZAKJZ2[Kfkl-)ii,%%-)itW:+biX)VВ֒Z2[KJZZ1K+fi,)iIIKJZ:)DJ+hIIKfkl-%%-b%%-J;ҎbV̒%3dԒbV̒Wn}:{ ܞ%GI{J|9u=Kh:{ ܞ%GI{pzpz ܞ%GI{={ RҖ2c[JZ9[+gKI[J:j=[mkm)i렴uP{ RMe޶VЖdkm)iˌm-%m-%mη-󶵂u|:idk/ZA[J2c[flKI[+gkl)iKI[-󶵂l%[+hKI[flˌm)ikl-%m)i8eƶؖVRҖ-%m-%m-%m)ikm)r.?}CO*-?}{O_Ӈf?}Oӷ柾2/?>fc?>>Oe٣[EN:eVHvn)/^Zi4e2ܢ6]7:|BDY=ಃ:8b >3 /8Ђ +ࣂ? .(8,af+Y8,aB|#63a*HSAV-YY)Ӕ=Mӂ2M<)) qQL*ÒR&f&n{7qϛiMo:\찴~:@~|pÒO1I{=kbtY`;q@o5Rk8LZ2gj}1$hIҒ%YK–-[%oS/ے%oKޖ-y[#yJޑ#y'=#3C=P&dC}A!ِlH6$ɎdG#ٿv"ّHv$;Ɂ@r 9_"9H$'ɉDr"9HN$'ɅBr!\H.$ ɅBr#Hn$7ɍFr#%~?l*3 4PCEmt 75~ZkxjqZ㫵䬵䭵䮵䯵䰵䱵䲵䳵䴵䵵䶵䷵丵乵亵仵伵併侵俵µõĵŵƵus9q@薯_C79Ρ{sCGN:ҡtCOW,g}e͈o͠oF}#y#y#y#y# &$3Xca1Mo~MT$Sdf+ca1Xca c, &1sk]cS/$Ɂe.U1U޴IlKlMlOlQlSlUlWlYl[l]l_lalclelglilklmlolqlslulwlyl{l}l,[\k,k,k,k,k,k,k,k,k,k,#`0#`0#`0#`0#`0#z 7ް S z zccǘ>Br!\Hn$7ɍFr#Hn$$X 8<㔶+΀5u-]u]iKiKiKiKiKjKjK.jK>jKNjK^jKnjK~jKjKjKjKjKjKjKjKjKkKkK.kK>kKNkK^kKnk? %8˽;˽;˽;PC %8Pc:Ʈc:Ʈc:Ʈc:Ʈc:Ʈc:Ʈc:Ʈc:PC %8P:;:;:;:;:;:;:;:;PC %8PC %8PC %8PC gH@$p@2 3(Π8(o$o$o$O35:O!n#n%n'n)n+n-n/n1n3n5n7n9n;n=n?nAnCnEnGnInKc6k@=#3! !0 0 0r! r~5د`Wj_ ~5 LL! r!0;0;0;0;0; r! `UV`UV`UV`UV`UVr! r! r:&'K8Kל댽<\|<\|<\|n4222+Y[`H!'d_!!OlOl  rH!!cX*9JcX*1rHlOlO!   !rH!G'd죓}tN!   !rH!1=1=1=!rH!   !rH!!.Sfֵ߭:<\|<\|<\|o @~̢u_4-6, d8+NMDa0P/ }A/(9AaAA9PLt( /vPC/(ž <(̃<(ȡ $8I+ }A/(9AaAA9Plߋ{}/ȡ0 0 r(ȡ bP]@A9PyP9P>Nw]{b9.y...9.y...9 .y . . .9!.y!.!.!.9".y".".".9#.y#6ZPx%jth/ΠwK=MDc046&1rh#`hȡ)4;;rhȡX,4`hȡ9lMDc044GАCShv 94vBc'4АCsl"!戠9"h BShȡ;!#`hȡ)4;;rhȡ9hȡ;!-CC 94C: \Ǎ$rN  zxN;`|[n1eLxj0ǍCa&1h΄;,-<@LPi4&LĠt1njIf1͌5&-MW찴YtN.u3w4rLxmadxg>`=NNNn]m^m_m`mambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmx Gȍ#rq8Bn!7Gȍ#rq8Bn!7Gȍ#rq8Bn!7Gȍ#ry5tjЩSCN >9SCN :5tjЩ5t$Ɂ@r 9H$ɉDr"9HN$'ɉDr!\H.$ ɅBr!Hn$7ɍFwiOWy(6V8Ł-lq`[PX`hpxȇЇ؇臇Jn\%7WɍUr*y5Pɑ`X `X Qn(7n7ʍƍjxᡆ$:h$7ɍd]Nv- 0XԍEXԍEXԍEXԍEXԍEXԍEXԍEX 0` - 0` - 0` - 0`?:L`-`PA %`PlHF+J]˨vEvvŊvkN0¡ g}Op ]8c/8c/8C]8tЅCN(b'؉F#v;NHb'&cSbyqP^p^p^rbqܸXn\,/h$7ɍdz:st8t ]8tЅC]8c;c;c;c;c;tЅC]8t ЅC]8tЅC]8tЅCKɎdG2(Zh33ɳŜN!B.=ױG`TtGApd][`lC@XX]tE@A4 y<HD$B;BudFN.mCu]vuhס]v5_G@2j?"`lCu"!!."آ[`lу-zE"!!."???.";!;!;!.".(ZOL6)BN;X"4=$9HQEr#&Lj#1*H8!1*Hvn"M$t  ]$tE ITd*H'GbTyS) v.8!9NH 0]ЮCdB$&DbBqܸa^(Зd ]$ qBr ]$d7&HLĄHL.H"9KcĨH"M$d7EbB$&DbB$tEBy@r$t  ]$tEwH!.HLĄHL.HWLEiQ*ypBqYP[¨(P|c((GaTtQ5g֣0* (¨(_. [%kk}@'耢zF|P[¨1A:ЮCdTE1Px-O-UL֣0* (bQ]G QCaTtQ/EA-Q]tQ[¨(8j( bQ/ (l–(袠԰0* (–(l. (N (l–(袠bQEAQQEWQf댢hYr̼W=o1fs@l=KdsP4[ƨh"P4[ƨh9lQEs  ]4;,>pc怢z4F]x%@`2SЮC֣1*p|P5US:l(GcT4t|h(GcT4tH6[ƨh9h.GCQEs@l=@z4FEC)DcT4t8h.GcT4tќB4FEC͎ƨh1*hv ]4FEC ]4FEC-kAoxܫnOڥl>U+֏DW?2YHY#GՏT?SP1*LTrNj2ELS)T6>Sぢ6s ;e9k(iЮC:k(O[ +.Zzj>v\ t(Ø}(LQ2 CPSAos(()^^Qq4tQ1*!h @ƨxP`t T/C<9kr*=Q~أGbR=ټ؀K^lvtv|vvvK|`6 diΦ9l3R؀0W8I: ߭07 54jhp!{F47H9Fs gJ>偯pPUcHv$;ɎdG#ّHIH@T8pn@r"9\H.$ ɅBr!\H.$7ɍFr#Hn$7[``Tvwxyar~Ip,_/\r~k_/p8r~Ig_/,H؍؍؍؍؍΃Oy>$ >d > (Fʄp¡ .\N2z's@Ã3A|"y._lKt'8 y!'q%###/])C]8tP1QЅs'8 8s>d%'e2ELQ2aS NT g7&pLDŽpL.p9p.1!¡ .p;8tЅC  ЅC]\jt:P{Q`zc"zFE@5: ?$5l[ Rr_ +N}B;{ʨ"!%h.఑ؓ.]f-F9F+]D`KtEw>$isW8=(9/(e2|m^n<`6p+U?e2E^*l"00*"l.Nl"`E@QE>:LQ(IY)ȉNq-9:L(GbT$t|HM1 R+_S[4GtHc|owP 0= "cGrPJ]o1fr@A4 xv2eFVCjv ]$FEB1fr@l=p|@ODr@l=p|3)e2|mnpSA+ʨH"9LQEr  ]$;."d ]$QEH"1*H.GBQEBQEB5~/bޫʅh8,(GaTtQ|(1 `e9lN3K$[n ؀@2-4eӖMc64g>Dr"9%YR[- ~nQC 5ԗ̳9 ,ni~`p"M>Dr!\H.$Ke9lN3} ۮ j `)&6 M0myu61<Ji7Kc4le+\i!j6@0sI?'dC2Ꙩgz&Ꙩg:y+뫱/uzt5]Un^*ts{[( _\` AaZ3 (ըɅBr!$y^@s/=ќ4(Cc18L$P?ɍFrK ($Fp)n0|./`&3! A9H3y!y#~%`P/03! LfBA?sA?_ɏ?{k) Xu zj Up40 7L n; ӄM6شbe2ELQ+-_, ) 0 7L püFv2eh.]4eZe&{p4\5 7L p40/c;)%QDr߮۞oga[v_ K& G[?/}*3 b @il( MشaӈM+MmN [荈Fn#qHm6jn.Ǒ2 .]FvɈ#bV@͙݇vӈi4h4/@r y6$2L`J=&#bϻhzUfNgixf^@gL`L`V5ゃvtb><`=/#bcDlbVg~n2ng)hqdWřHjz~X="G/}@C Ï_}y@r88:nx4aӆM#6_5q_\&T#9i4B_/ Hm6s_@ FvYq88X8Qk#&i4Bh3FTL#ki4X!+FJ#.҈Bi4O1' ? LqS^A$$A$A/|qtt eC^k`MS_5q_88ͯMM9M9MMM9M3<vYaf:˼ha_>\ TІM#6Ya00+ V2߫> _>>A#:pvYP&>@pRliæVh_8f_>ˍ*3<`62 .]FtH> g_8f_>y8#0*8@ zi|H.p9t)传(\3IL`* \: )݇cV8|> Ǭp g_8f_8f_8|הܔܔܔܔܔܔ>uCGB4̡6u>5 ($pH%Hn$$p܈i$17I̍$Fq#{=4ÍFo#Ƿmd62qLF&n#md62q_`f!p0be>@5`!uFDK#$H:38foLHfB2sI?'sI:'uNY6H@.1L2̍dn$s#+L5j$`>眐DQH 5@GH 8T|w&%1=H"ዄ/n$Y?>03y͍F^s#>n$7 N#Hm6~iFrn#9Hm$6sɹFr 08CL gtޙd$; a/ii4BZ> o:L2|@'UMT5lΘPf}e/H""٘$GCILH"ዄ/H"?P$=0Ĵ|22F# W'Ȭ(8,2p/ #0"p˼L&I2Ir}eTƼ$4'iNW94GƤؘ|QEQQE_\הiJ_nJ_nJ_nJ_nJ_~ƉH B8q^gݒ>p44 wLVEh _4DcM4|p4ύFHM#i7ҎiǍFqÛp44 wLHm6Rx)F o#Hm68/ q>SL`z>̊/jyQ zLA-)WŴep41 wLk̊/-Fh&k዆/ZNۆ[il.ie;}^ _4DcM4|EhƬh++C+++++Oί.pSR(\~3_/S PǣOB/&<8ȝLN&r't;|Np'dvz;YNVo'x+CЫIU&UMjҫIa\%ݛ4'HCLL&R2D{`Z[ 88֩_>nUXP)/wͩ@<}ue22g C}L~x톜9o](jѫ1lP)))s~}Nq'`I0~0uselP xxxٛLd'_trlL9x1 yAPuHbv%P>I}Нd>H9Fę f8~:82[έּ(*3N4N'WӉռ x*Ux(*3',ʈ3q?)Cwtr_Gyv9tBn:q5N\ %q^x3^sPfS!g܀9LC tj:q5DNNrNjI<$I9q+!NN'>tp:6pN8M'3Ӊtc:1 9gМǹMd3qؘ qg8ԲIcw~yap߭49_ɼ08806)gVaUapֺ xEQhtvC~:6pw 9 3|8806)gVaUap3sۼ[SFP烞z>xi0tAB 豠dUap)`8806)td:a2(O3rP+YU<UaXgaM 080/ PPWuى8`z]VTq)<t[/N:;Ǽp8o Zed^8g8 Ǽp8N&u'K I|;wҜ_@:;bn> FI;Ǽp8o; 3 Ǽp8ـ8gɭ$Pwbn:YҝNt'͹exs: ˝NVr'I=dw2;ƝD$\ &Ыxɼp89 hV5d^8D <>/I+q8MwtPl@p 3p 3ΈIh1#_w X 9;x̋3BG-K$3 540/qt7 *"8#P WvZ;8#xt^Hh'B 2-H`^ko:lUqF`^pF9t?S 8N'z{A XQ ;iǝA׉3輀s5M&v"o:07g97ޤ9ډo>q*/̋3qt\;Nǣ|2g(D|y{ޮ6 W~~AJ3Rɍ^=kw>/0`qz-<w:P  ܢ斩vIBwr;/@d n4hܪR_`iS  íí-eNu'覓AqtR;yΝgŗՂ3IapQpFc ge8qFag#{~wm3 B`/HyFc^4AV 9z3V^'DTy.qF' @Z"i81/ qtn>g4Ey8mg4ј g8#=~([)qsq 9zלg\t\01/X*3E66v2t:2UC5<#HFR_sq9j9ϸw9:8 t4ip$+@e\\AB zP=H ҞiσAn y< Yʃ,A* y9?yv"2"iEҊ1/ cc^At (guHbv"P>E}2tB2{LIq:ZmVX xk32K+ܿP&2p {]q:2[[[j@L&'?`ч 9FAHn4y>:8ҫP: t8_Inntn%>@a`rJ.>A}&7y2Fs#cgЊI+^Mz5i|b y^ f"Q/e,fow tB2p"Sסq Ezڀ[!.(OH8#ˡ|OKA 8g󶒗3뒯oPG횼EA$ h|b}@3.P'V?$@m7he2L36hysLq#Vu3Q3q`@Z`ȣ['$GŁ3n]p(c@/_ΞPyj8gTq^g@(3(y@4i38 uAT}@Uu@q!8{^`18e[ q8pƁ3~]8{^@Ue^8g -g8{Ξe1X)L]I+|2Nna3p ?x15#旫)0eJxAp$n$Gv8=/81S%y= Zg3x}>23L6 ?P1yo]<\A&$y= Zg3x}>@4i =eL՘:\A&x{KN0A}j 6gyQ_gP&F"i̖`&s5s2[dg~m^g%=ȉ1\AD g3p >g Hg3^ԧ(S,2 3n~Nm:sur@ gr#^*$GvDPIg3D u9o+y>; ӱ3p| 8Õ1yo 3yM , g3 s^: t4GvΞ$@gpfNLcb[t8e(qs8{>pp!?-8@()C+V$Hz5Uqq>A0 g38{:A|(ԧz&%p ?sD5I| -5|AIx{F$ؓ|Q?Ii~x{^0 $iyZpksksk j4ByT/HnvFjOF(4dFgI=I@x{^@: g=o j84/HUu=/`Wf1?jP|2tH3|E$s5\ ?iEҊI+^Mz5Q72L~}&3|@ nga"%= Clinbox-1.6.3/benchmarks/matrix/bibd_13_6_78x1716.sms000066400000000000000000007204211347646240000216520ustar00rootroot0000000000000078 1716 M 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 1 1 24 1 1 25 1 1 26 1 1 27 1 1 28 1 1 29 1 1 30 1 1 31 1 1 32 1 1 33 1 1 34 1 1 35 1 1 36 1 1 37 1 1 38 1 1 39 1 1 40 1 1 41 1 1 42 1 1 43 1 1 44 1 1 45 1 1 46 1 1 47 1 1 48 1 1 49 1 1 50 1 1 51 1 1 52 1 1 53 1 1 54 1 1 55 1 1 56 1 1 57 1 1 58 1 1 59 1 1 60 1 1 61 1 1 62 1 1 63 1 1 64 1 1 65 1 1 66 1 1 67 1 1 68 1 1 69 1 1 70 1 1 71 1 1 72 1 1 73 1 1 74 1 1 75 1 1 76 1 1 77 1 1 78 1 1 79 1 1 80 1 1 81 1 1 82 1 1 83 1 1 84 1 1 85 1 1 86 1 1 87 1 1 88 1 1 89 1 1 90 1 1 91 1 1 92 1 1 93 1 1 94 1 1 95 1 1 96 1 1 97 1 1 98 1 1 99 1 1 100 1 1 101 1 1 102 1 1 103 1 1 104 1 1 105 1 1 106 1 1 107 1 1 108 1 1 109 1 1 110 1 1 111 1 1 112 1 1 113 1 1 114 1 1 115 1 1 116 1 1 117 1 1 118 1 1 119 1 1 120 1 1 121 1 1 122 1 1 123 1 1 124 1 1 125 1 1 126 1 1 127 1 1 128 1 1 129 1 1 130 1 1 131 1 1 132 1 1 133 1 1 134 1 1 135 1 1 136 1 1 137 1 1 138 1 1 139 1 1 140 1 1 141 1 1 142 1 1 143 1 1 144 1 1 145 1 1 146 1 1 147 1 1 148 1 1 149 1 1 150 1 1 151 1 1 152 1 1 153 1 1 154 1 1 155 1 1 156 1 1 157 1 1 158 1 1 159 1 1 160 1 1 161 1 1 162 1 1 163 1 1 164 1 1 165 1 1 166 1 1 167 1 1 168 1 1 169 1 1 170 1 1 171 1 1 172 1 1 173 1 1 174 1 1 175 1 1 176 1 1 177 1 1 178 1 1 179 1 1 180 1 1 181 1 1 182 1 1 183 1 1 184 1 1 185 1 1 186 1 1 187 1 1 188 1 1 189 1 1 190 1 1 191 1 1 192 1 1 193 1 1 194 1 1 195 1 1 196 1 1 197 1 1 198 1 1 199 1 1 200 1 1 201 1 1 202 1 1 203 1 1 204 1 1 205 1 1 206 1 1 207 1 1 208 1 1 209 1 1 210 1 1 211 1 1 212 1 1 213 1 1 214 1 1 215 1 1 216 1 1 217 1 1 218 1 1 219 1 1 220 1 1 221 1 1 222 1 1 223 1 1 224 1 1 225 1 1 226 1 1 227 1 1 228 1 1 229 1 1 230 1 1 231 1 1 232 1 1 233 1 1 234 1 1 235 1 1 236 1 1 237 1 1 238 1 1 239 1 1 240 1 1 241 1 1 242 1 1 243 1 1 244 1 1 245 1 1 246 1 1 247 1 1 248 1 1 249 1 1 250 1 1 251 1 1 252 1 1 253 1 1 254 1 1 255 1 1 256 1 1 257 1 1 258 1 1 259 1 1 260 1 1 261 1 1 262 1 1 263 1 1 264 1 1 265 1 1 266 1 1 267 1 1 268 1 1 269 1 1 270 1 1 271 1 1 272 1 1 273 1 1 274 1 1 275 1 1 276 1 1 277 1 1 278 1 1 279 1 1 280 1 1 281 1 1 282 1 1 283 1 1 284 1 1 285 1 1 286 1 1 287 1 1 288 1 1 289 1 1 290 1 1 291 1 1 292 1 1 293 1 1 294 1 1 295 1 1 296 1 1 297 1 1 298 1 1 299 1 1 300 1 1 301 1 1 302 1 1 303 1 1 304 1 1 305 1 1 306 1 1 307 1 1 308 1 1 309 1 1 310 1 1 311 1 1 312 1 1 313 1 1 314 1 1 315 1 1 316 1 1 317 1 1 318 1 1 319 1 1 320 1 1 321 1 1 322 1 1 323 1 1 324 1 1 325 1 1 326 1 1 327 1 1 328 1 1 329 1 1 330 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 2 10 1 2 11 1 2 12 1 2 13 1 2 14 1 2 15 1 2 16 1 2 17 1 2 18 1 2 19 1 2 20 1 2 21 1 2 22 1 2 23 1 2 24 1 2 25 1 2 26 1 2 27 1 2 28 1 2 29 1 2 30 1 2 31 1 2 32 1 2 33 1 2 34 1 2 35 1 2 36 1 2 37 1 2 38 1 2 39 1 2 40 1 2 41 1 2 42 1 2 43 1 2 44 1 2 45 1 2 46 1 2 47 1 2 48 1 2 49 1 2 50 1 2 51 1 2 52 1 2 53 1 2 54 1 2 55 1 2 56 1 2 57 1 2 58 1 2 59 1 2 60 1 2 61 1 2 62 1 2 63 1 2 64 1 2 65 1 2 66 1 2 67 1 2 68 1 2 69 1 2 70 1 2 71 1 2 72 1 2 73 1 2 74 1 2 75 1 2 76 1 2 77 1 2 78 1 2 79 1 2 80 1 2 81 1 2 82 1 2 83 1 2 84 1 2 85 1 2 86 1 2 87 1 2 88 1 2 89 1 2 90 1 2 91 1 2 92 1 2 93 1 2 94 1 2 95 1 2 96 1 2 97 1 2 98 1 2 99 1 2 100 1 2 101 1 2 102 1 2 103 1 2 104 1 2 105 1 2 106 1 2 107 1 2 108 1 2 109 1 2 110 1 2 111 1 2 112 1 2 113 1 2 114 1 2 115 1 2 116 1 2 117 1 2 118 1 2 119 1 2 120 1 2 331 1 2 332 1 2 333 1 2 334 1 2 335 1 2 336 1 2 337 1 2 338 1 2 339 1 2 340 1 2 341 1 2 342 1 2 343 1 2 344 1 2 345 1 2 346 1 2 347 1 2 348 1 2 349 1 2 350 1 2 351 1 2 352 1 2 353 1 2 354 1 2 355 1 2 356 1 2 357 1 2 358 1 2 359 1 2 360 1 2 361 1 2 362 1 2 363 1 2 364 1 2 365 1 2 366 1 2 367 1 2 368 1 2 369 1 2 370 1 2 371 1 2 372 1 2 373 1 2 374 1 2 375 1 2 376 1 2 377 1 2 378 1 2 379 1 2 380 1 2 381 1 2 382 1 2 383 1 2 384 1 2 385 1 2 386 1 2 387 1 2 388 1 2 389 1 2 390 1 2 391 1 2 392 1 2 393 1 2 394 1 2 395 1 2 396 1 2 397 1 2 398 1 2 399 1 2 400 1 2 401 1 2 402 1 2 403 1 2 404 1 2 405 1 2 406 1 2 407 1 2 408 1 2 409 1 2 410 1 2 411 1 2 412 1 2 413 1 2 414 1 2 415 1 2 416 1 2 417 1 2 418 1 2 419 1 2 420 1 2 421 1 2 422 1 2 423 1 2 424 1 2 425 1 2 426 1 2 427 1 2 428 1 2 429 1 2 430 1 2 431 1 2 432 1 2 433 1 2 434 1 2 435 1 2 436 1 2 437 1 2 438 1 2 439 1 2 440 1 2 441 1 2 442 1 2 443 1 2 444 1 2 445 1 2 446 1 2 447 1 2 448 1 2 449 1 2 450 1 2 451 1 2 452 1 2 453 1 2 454 1 2 455 1 2 456 1 2 457 1 2 458 1 2 459 1 2 460 1 2 461 1 2 462 1 2 463 1 2 464 1 2 465 1 2 466 1 2 467 1 2 468 1 2 469 1 2 470 1 2 471 1 2 472 1 2 473 1 2 474 1 2 475 1 2 476 1 2 477 1 2 478 1 2 479 1 2 480 1 2 481 1 2 482 1 2 483 1 2 484 1 2 485 1 2 486 1 2 487 1 2 488 1 2 489 1 2 490 1 2 491 1 2 492 1 2 493 1 2 494 1 2 495 1 2 496 1 2 497 1 2 498 1 2 499 1 2 500 1 2 501 1 2 502 1 2 503 1 2 504 1 2 505 1 2 506 1 2 507 1 2 508 1 2 509 1 2 510 1 2 511 1 2 512 1 2 513 1 2 514 1 2 515 1 2 516 1 2 517 1 2 518 1 2 519 1 2 520 1 2 521 1 2 522 1 2 523 1 2 524 1 2 525 1 2 526 1 2 527 1 2 528 1 2 529 1 2 530 1 2 531 1 2 532 1 2 533 1 2 534 1 2 535 1 2 536 1 2 537 1 2 538 1 2 539 1 2 540 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 3 6 1 3 7 1 3 8 1 3 9 1 3 10 1 3 11 1 3 12 1 3 13 1 3 14 1 3 15 1 3 16 1 3 17 1 3 18 1 3 19 1 3 20 1 3 21 1 3 22 1 3 23 1 3 24 1 3 25 1 3 26 1 3 27 1 3 28 1 3 29 1 3 30 1 3 31 1 3 32 1 3 33 1 3 34 1 3 35 1 3 36 1 3 121 1 3 122 1 3 123 1 3 124 1 3 125 1 3 126 1 3 127 1 3 128 1 3 129 1 3 130 1 3 131 1 3 132 1 3 133 1 3 134 1 3 135 1 3 136 1 3 137 1 3 138 1 3 139 1 3 140 1 3 141 1 3 142 1 3 143 1 3 144 1 3 145 1 3 146 1 3 147 1 3 148 1 3 149 1 3 150 1 3 151 1 3 152 1 3 153 1 3 154 1 3 155 1 3 156 1 3 157 1 3 158 1 3 159 1 3 160 1 3 161 1 3 162 1 3 163 1 3 164 1 3 165 1 3 166 1 3 167 1 3 168 1 3 169 1 3 170 1 3 171 1 3 172 1 3 173 1 3 174 1 3 175 1 3 176 1 3 177 1 3 178 1 3 179 1 3 180 1 3 181 1 3 182 1 3 183 1 3 184 1 3 185 1 3 186 1 3 187 1 3 188 1 3 189 1 3 190 1 3 191 1 3 192 1 3 193 1 3 194 1 3 195 1 3 196 1 3 197 1 3 198 1 3 199 1 3 200 1 3 201 1 3 202 1 3 203 1 3 204 1 3 331 1 3 332 1 3 333 1 3 334 1 3 335 1 3 336 1 3 337 1 3 338 1 3 339 1 3 340 1 3 341 1 3 342 1 3 343 1 3 344 1 3 345 1 3 346 1 3 347 1 3 348 1 3 349 1 3 350 1 3 351 1 3 352 1 3 353 1 3 354 1 3 355 1 3 356 1 3 357 1 3 358 1 3 359 1 3 360 1 3 361 1 3 362 1 3 363 1 3 364 1 3 365 1 3 366 1 3 367 1 3 368 1 3 369 1 3 370 1 3 371 1 3 372 1 3 373 1 3 374 1 3 375 1 3 376 1 3 377 1 3 378 1 3 379 1 3 380 1 3 381 1 3 382 1 3 383 1 3 384 1 3 385 1 3 386 1 3 387 1 3 388 1 3 389 1 3 390 1 3 391 1 3 392 1 3 393 1 3 394 1 3 395 1 3 396 1 3 397 1 3 398 1 3 399 1 3 400 1 3 401 1 3 402 1 3 403 1 3 404 1 3 405 1 3 406 1 3 407 1 3 408 1 3 409 1 3 410 1 3 411 1 3 412 1 3 413 1 3 414 1 3 541 1 3 542 1 3 543 1 3 544 1 3 545 1 3 546 1 3 547 1 3 548 1 3 549 1 3 550 1 3 551 1 3 552 1 3 553 1 3 554 1 3 555 1 3 556 1 3 557 1 3 558 1 3 559 1 3 560 1 3 561 1 3 562 1 3 563 1 3 564 1 3 565 1 3 566 1 3 567 1 3 568 1 3 569 1 3 570 1 3 571 1 3 572 1 3 573 1 3 574 1 3 575 1 3 576 1 3 577 1 3 578 1 3 579 1 3 580 1 3 581 1 3 582 1 3 583 1 3 584 1 3 585 1 3 586 1 3 587 1 3 588 1 3 589 1 3 590 1 3 591 1 3 592 1 3 593 1 3 594 1 3 595 1 3 596 1 3 597 1 3 598 1 3 599 1 3 600 1 3 601 1 3 602 1 3 603 1 3 604 1 3 605 1 3 606 1 3 607 1 3 608 1 3 609 1 3 610 1 3 611 1 3 612 1 3 613 1 3 614 1 3 615 1 3 616 1 3 617 1 3 618 1 3 619 1 3 620 1 3 621 1 3 622 1 3 623 1 3 624 1 3 625 1 3 626 1 3 627 1 3 628 1 3 629 1 3 630 1 3 631 1 3 632 1 3 633 1 3 634 1 3 635 1 3 636 1 3 637 1 3 638 1 3 639 1 3 640 1 3 641 1 3 642 1 3 643 1 3 644 1 3 645 1 3 646 1 3 647 1 3 648 1 3 649 1 3 650 1 3 651 1 3 652 1 3 653 1 3 654 1 3 655 1 3 656 1 3 657 1 3 658 1 3 659 1 3 660 1 3 661 1 3 662 1 3 663 1 3 664 1 3 665 1 3 666 1 4 1 1 4 2 1 4 3 1 4 4 1 4 5 1 4 6 1 4 7 1 4 8 1 4 37 1 4 38 1 4 39 1 4 40 1 4 41 1 4 42 1 4 43 1 4 44 1 4 45 1 4 46 1 4 47 1 4 48 1 4 49 1 4 50 1 4 51 1 4 52 1 4 53 1 4 54 1 4 55 1 4 56 1 4 57 1 4 58 1 4 59 1 4 60 1 4 61 1 4 62 1 4 63 1 4 64 1 4 121 1 4 122 1 4 123 1 4 124 1 4 125 1 4 126 1 4 127 1 4 128 1 4 129 1 4 130 1 4 131 1 4 132 1 4 133 1 4 134 1 4 135 1 4 136 1 4 137 1 4 138 1 4 139 1 4 140 1 4 141 1 4 142 1 4 143 1 4 144 1 4 145 1 4 146 1 4 147 1 4 148 1 4 205 1 4 206 1 4 207 1 4 208 1 4 209 1 4 210 1 4 211 1 4 212 1 4 213 1 4 214 1 4 215 1 4 216 1 4 217 1 4 218 1 4 219 1 4 220 1 4 221 1 4 222 1 4 223 1 4 224 1 4 225 1 4 226 1 4 227 1 4 228 1 4 229 1 4 230 1 4 231 1 4 232 1 4 233 1 4 234 1 4 235 1 4 236 1 4 237 1 4 238 1 4 239 1 4 240 1 4 241 1 4 242 1 4 243 1 4 244 1 4 245 1 4 246 1 4 247 1 4 248 1 4 249 1 4 250 1 4 251 1 4 252 1 4 253 1 4 254 1 4 255 1 4 256 1 4 257 1 4 258 1 4 259 1 4 260 1 4 331 1 4 332 1 4 333 1 4 334 1 4 335 1 4 336 1 4 337 1 4 338 1 4 339 1 4 340 1 4 341 1 4 342 1 4 343 1 4 344 1 4 345 1 4 346 1 4 347 1 4 348 1 4 349 1 4 350 1 4 351 1 4 352 1 4 353 1 4 354 1 4 355 1 4 356 1 4 357 1 4 358 1 4 415 1 4 416 1 4 417 1 4 418 1 4 419 1 4 420 1 4 421 1 4 422 1 4 423 1 4 424 1 4 425 1 4 426 1 4 427 1 4 428 1 4 429 1 4 430 1 4 431 1 4 432 1 4 433 1 4 434 1 4 435 1 4 436 1 4 437 1 4 438 1 4 439 1 4 440 1 4 441 1 4 442 1 4 443 1 4 444 1 4 445 1 4 446 1 4 447 1 4 448 1 4 449 1 4 450 1 4 451 1 4 452 1 4 453 1 4 454 1 4 455 1 4 456 1 4 457 1 4 458 1 4 459 1 4 460 1 4 461 1 4 462 1 4 463 1 4 464 1 4 465 1 4 466 1 4 467 1 4 468 1 4 469 1 4 470 1 4 541 1 4 542 1 4 543 1 4 544 1 4 545 1 4 546 1 4 547 1 4 548 1 4 549 1 4 550 1 4 551 1 4 552 1 4 553 1 4 554 1 4 555 1 4 556 1 4 557 1 4 558 1 4 559 1 4 560 1 4 561 1 4 562 1 4 563 1 4 564 1 4 565 1 4 566 1 4 567 1 4 568 1 4 569 1 4 570 1 4 571 1 4 572 1 4 573 1 4 574 1 4 575 1 4 576 1 4 577 1 4 578 1 4 579 1 4 580 1 4 581 1 4 582 1 4 583 1 4 584 1 4 585 1 4 586 1 4 587 1 4 588 1 4 589 1 4 590 1 4 591 1 4 592 1 4 593 1 4 594 1 4 595 1 4 596 1 4 667 1 4 668 1 4 669 1 4 670 1 4 671 1 4 672 1 4 673 1 4 674 1 4 675 1 4 676 1 4 677 1 4 678 1 4 679 1 4 680 1 4 681 1 4 682 1 4 683 1 4 684 1 4 685 1 4 686 1 4 687 1 4 688 1 4 689 1 4 690 1 4 691 1 4 692 1 4 693 1 4 694 1 4 695 1 4 696 1 4 697 1 4 698 1 4 699 1 4 700 1 4 701 1 4 702 1 4 703 1 4 704 1 4 705 1 4 706 1 4 707 1 4 708 1 4 709 1 4 710 1 4 711 1 4 712 1 4 713 1 4 714 1 4 715 1 4 716 1 4 717 1 4 718 1 4 719 1 4 720 1 4 721 1 4 722 1 4 723 1 4 724 1 4 725 1 4 726 1 4 727 1 4 728 1 4 729 1 4 730 1 4 731 1 4 732 1 4 733 1 4 734 1 4 735 1 4 736 1 5 1 1 5 9 1 5 10 1 5 11 1 5 12 1 5 13 1 5 14 1 5 15 1 5 37 1 5 38 1 5 39 1 5 40 1 5 41 1 5 42 1 5 43 1 5 65 1 5 66 1 5 67 1 5 68 1 5 69 1 5 70 1 5 71 1 5 72 1 5 73 1 5 74 1 5 75 1 5 76 1 5 77 1 5 78 1 5 79 1 5 80 1 5 81 1 5 82 1 5 83 1 5 84 1 5 85 1 5 121 1 5 122 1 5 123 1 5 124 1 5 125 1 5 126 1 5 127 1 5 149 1 5 150 1 5 151 1 5 152 1 5 153 1 5 154 1 5 155 1 5 156 1 5 157 1 5 158 1 5 159 1 5 160 1 5 161 1 5 162 1 5 163 1 5 164 1 5 165 1 5 166 1 5 167 1 5 168 1 5 169 1 5 205 1 5 206 1 5 207 1 5 208 1 5 209 1 5 210 1 5 211 1 5 212 1 5 213 1 5 214 1 5 215 1 5 216 1 5 217 1 5 218 1 5 219 1 5 220 1 5 221 1 5 222 1 5 223 1 5 224 1 5 225 1 5 261 1 5 262 1 5 263 1 5 264 1 5 265 1 5 266 1 5 267 1 5 268 1 5 269 1 5 270 1 5 271 1 5 272 1 5 273 1 5 274 1 5 275 1 5 276 1 5 277 1 5 278 1 5 279 1 5 280 1 5 281 1 5 282 1 5 283 1 5 284 1 5 285 1 5 286 1 5 287 1 5 288 1 5 289 1 5 290 1 5 291 1 5 292 1 5 293 1 5 294 1 5 295 1 5 331 1 5 332 1 5 333 1 5 334 1 5 335 1 5 336 1 5 337 1 5 359 1 5 360 1 5 361 1 5 362 1 5 363 1 5 364 1 5 365 1 5 366 1 5 367 1 5 368 1 5 369 1 5 370 1 5 371 1 5 372 1 5 373 1 5 374 1 5 375 1 5 376 1 5 377 1 5 378 1 5 379 1 5 415 1 5 416 1 5 417 1 5 418 1 5 419 1 5 420 1 5 421 1 5 422 1 5 423 1 5 424 1 5 425 1 5 426 1 5 427 1 5 428 1 5 429 1 5 430 1 5 431 1 5 432 1 5 433 1 5 434 1 5 435 1 5 471 1 5 472 1 5 473 1 5 474 1 5 475 1 5 476 1 5 477 1 5 478 1 5 479 1 5 480 1 5 481 1 5 482 1 5 483 1 5 484 1 5 485 1 5 486 1 5 487 1 5 488 1 5 489 1 5 490 1 5 491 1 5 492 1 5 493 1 5 494 1 5 495 1 5 496 1 5 497 1 5 498 1 5 499 1 5 500 1 5 501 1 5 502 1 5 503 1 5 504 1 5 505 1 5 541 1 5 542 1 5 543 1 5 544 1 5 545 1 5 546 1 5 547 1 5 548 1 5 549 1 5 550 1 5 551 1 5 552 1 5 553 1 5 554 1 5 555 1 5 556 1 5 557 1 5 558 1 5 559 1 5 560 1 5 561 1 5 597 1 5 598 1 5 599 1 5 600 1 5 601 1 5 602 1 5 603 1 5 604 1 5 605 1 5 606 1 5 607 1 5 608 1 5 609 1 5 610 1 5 611 1 5 612 1 5 613 1 5 614 1 5 615 1 5 616 1 5 617 1 5 618 1 5 619 1 5 620 1 5 621 1 5 622 1 5 623 1 5 624 1 5 625 1 5 626 1 5 627 1 5 628 1 5 629 1 5 630 1 5 631 1 5 667 1 5 668 1 5 669 1 5 670 1 5 671 1 5 672 1 5 673 1 5 674 1 5 675 1 5 676 1 5 677 1 5 678 1 5 679 1 5 680 1 5 681 1 5 682 1 5 683 1 5 684 1 5 685 1 5 686 1 5 687 1 5 688 1 5 689 1 5 690 1 5 691 1 5 692 1 5 693 1 5 694 1 5 695 1 5 696 1 5 697 1 5 698 1 5 699 1 5 700 1 5 701 1 5 737 1 5 738 1 5 739 1 5 740 1 5 741 1 5 742 1 5 743 1 5 744 1 5 745 1 5 746 1 5 747 1 5 748 1 5 749 1 5 750 1 5 751 1 5 752 1 5 753 1 5 754 1 5 755 1 5 756 1 5 757 1 5 758 1 5 759 1 5 760 1 5 761 1 5 762 1 5 763 1 5 764 1 5 765 1 5 766 1 5 767 1 5 768 1 5 769 1 5 770 1 5 771 1 6 2 1 6 9 1 6 16 1 6 17 1 6 18 1 6 19 1 6 20 1 6 21 1 6 37 1 6 44 1 6 45 1 6 46 1 6 47 1 6 48 1 6 49 1 6 65 1 6 66 1 6 67 1 6 68 1 6 69 1 6 70 1 6 86 1 6 87 1 6 88 1 6 89 1 6 90 1 6 91 1 6 92 1 6 93 1 6 94 1 6 95 1 6 96 1 6 97 1 6 98 1 6 99 1 6 100 1 6 121 1 6 128 1 6 129 1 6 130 1 6 131 1 6 132 1 6 133 1 6 149 1 6 150 1 6 151 1 6 152 1 6 153 1 6 154 1 6 170 1 6 171 1 6 172 1 6 173 1 6 174 1 6 175 1 6 176 1 6 177 1 6 178 1 6 179 1 6 180 1 6 181 1 6 182 1 6 183 1 6 184 1 6 205 1 6 206 1 6 207 1 6 208 1 6 209 1 6 210 1 6 226 1 6 227 1 6 228 1 6 229 1 6 230 1 6 231 1 6 232 1 6 233 1 6 234 1 6 235 1 6 236 1 6 237 1 6 238 1 6 239 1 6 240 1 6 261 1 6 262 1 6 263 1 6 264 1 6 265 1 6 266 1 6 267 1 6 268 1 6 269 1 6 270 1 6 271 1 6 272 1 6 273 1 6 274 1 6 275 1 6 296 1 6 297 1 6 298 1 6 299 1 6 300 1 6 301 1 6 302 1 6 303 1 6 304 1 6 305 1 6 306 1 6 307 1 6 308 1 6 309 1 6 310 1 6 311 1 6 312 1 6 313 1 6 314 1 6 315 1 6 331 1 6 338 1 6 339 1 6 340 1 6 341 1 6 342 1 6 343 1 6 359 1 6 360 1 6 361 1 6 362 1 6 363 1 6 364 1 6 380 1 6 381 1 6 382 1 6 383 1 6 384 1 6 385 1 6 386 1 6 387 1 6 388 1 6 389 1 6 390 1 6 391 1 6 392 1 6 393 1 6 394 1 6 415 1 6 416 1 6 417 1 6 418 1 6 419 1 6 420 1 6 436 1 6 437 1 6 438 1 6 439 1 6 440 1 6 441 1 6 442 1 6 443 1 6 444 1 6 445 1 6 446 1 6 447 1 6 448 1 6 449 1 6 450 1 6 471 1 6 472 1 6 473 1 6 474 1 6 475 1 6 476 1 6 477 1 6 478 1 6 479 1 6 480 1 6 481 1 6 482 1 6 483 1 6 484 1 6 485 1 6 506 1 6 507 1 6 508 1 6 509 1 6 510 1 6 511 1 6 512 1 6 513 1 6 514 1 6 515 1 6 516 1 6 517 1 6 518 1 6 519 1 6 520 1 6 521 1 6 522 1 6 523 1 6 524 1 6 525 1 6 541 1 6 542 1 6 543 1 6 544 1 6 545 1 6 546 1 6 562 1 6 563 1 6 564 1 6 565 1 6 566 1 6 567 1 6 568 1 6 569 1 6 570 1 6 571 1 6 572 1 6 573 1 6 574 1 6 575 1 6 576 1 6 597 1 6 598 1 6 599 1 6 600 1 6 601 1 6 602 1 6 603 1 6 604 1 6 605 1 6 606 1 6 607 1 6 608 1 6 609 1 6 610 1 6 611 1 6 632 1 6 633 1 6 634 1 6 635 1 6 636 1 6 637 1 6 638 1 6 639 1 6 640 1 6 641 1 6 642 1 6 643 1 6 644 1 6 645 1 6 646 1 6 647 1 6 648 1 6 649 1 6 650 1 6 651 1 6 667 1 6 668 1 6 669 1 6 670 1 6 671 1 6 672 1 6 673 1 6 674 1 6 675 1 6 676 1 6 677 1 6 678 1 6 679 1 6 680 1 6 681 1 6 702 1 6 703 1 6 704 1 6 705 1 6 706 1 6 707 1 6 708 1 6 709 1 6 710 1 6 711 1 6 712 1 6 713 1 6 714 1 6 715 1 6 716 1 6 717 1 6 718 1 6 719 1 6 720 1 6 721 1 6 737 1 6 738 1 6 739 1 6 740 1 6 741 1 6 742 1 6 743 1 6 744 1 6 745 1 6 746 1 6 747 1 6 748 1 6 749 1 6 750 1 6 751 1 6 752 1 6 753 1 6 754 1 6 755 1 6 756 1 6 772 1 6 773 1 6 774 1 6 775 1 6 776 1 6 777 1 6 778 1 6 779 1 6 780 1 6 781 1 6 782 1 6 783 1 6 784 1 6 785 1 6 786 1 7 3 1 7 10 1 7 16 1 7 22 1 7 23 1 7 24 1 7 25 1 7 26 1 7 38 1 7 44 1 7 50 1 7 51 1 7 52 1 7 53 1 7 54 1 7 65 1 7 71 1 7 72 1 7 73 1 7 74 1 7 75 1 7 86 1 7 87 1 7 88 1 7 89 1 7 90 1 7 101 1 7 102 1 7 103 1 7 104 1 7 105 1 7 106 1 7 107 1 7 108 1 7 109 1 7 110 1 7 122 1 7 128 1 7 134 1 7 135 1 7 136 1 7 137 1 7 138 1 7 149 1 7 155 1 7 156 1 7 157 1 7 158 1 7 159 1 7 170 1 7 171 1 7 172 1 7 173 1 7 174 1 7 185 1 7 186 1 7 187 1 7 188 1 7 189 1 7 190 1 7 191 1 7 192 1 7 193 1 7 194 1 7 205 1 7 211 1 7 212 1 7 213 1 7 214 1 7 215 1 7 226 1 7 227 1 7 228 1 7 229 1 7 230 1 7 241 1 7 242 1 7 243 1 7 244 1 7 245 1 7 246 1 7 247 1 7 248 1 7 249 1 7 250 1 7 261 1 7 262 1 7 263 1 7 264 1 7 265 1 7 276 1 7 277 1 7 278 1 7 279 1 7 280 1 7 281 1 7 282 1 7 283 1 7 284 1 7 285 1 7 296 1 7 297 1 7 298 1 7 299 1 7 300 1 7 301 1 7 302 1 7 303 1 7 304 1 7 305 1 7 316 1 7 317 1 7 318 1 7 319 1 7 320 1 7 321 1 7 322 1 7 323 1 7 324 1 7 325 1 7 332 1 7 338 1 7 344 1 7 345 1 7 346 1 7 347 1 7 348 1 7 359 1 7 365 1 7 366 1 7 367 1 7 368 1 7 369 1 7 380 1 7 381 1 7 382 1 7 383 1 7 384 1 7 395 1 7 396 1 7 397 1 7 398 1 7 399 1 7 400 1 7 401 1 7 402 1 7 403 1 7 404 1 7 415 1 7 421 1 7 422 1 7 423 1 7 424 1 7 425 1 7 436 1 7 437 1 7 438 1 7 439 1 7 440 1 7 451 1 7 452 1 7 453 1 7 454 1 7 455 1 7 456 1 7 457 1 7 458 1 7 459 1 7 460 1 7 471 1 7 472 1 7 473 1 7 474 1 7 475 1 7 486 1 7 487 1 7 488 1 7 489 1 7 490 1 7 491 1 7 492 1 7 493 1 7 494 1 7 495 1 7 506 1 7 507 1 7 508 1 7 509 1 7 510 1 7 511 1 7 512 1 7 513 1 7 514 1 7 515 1 7 526 1 7 527 1 7 528 1 7 529 1 7 530 1 7 531 1 7 532 1 7 533 1 7 534 1 7 535 1 7 541 1 7 547 1 7 548 1 7 549 1 7 550 1 7 551 1 7 562 1 7 563 1 7 564 1 7 565 1 7 566 1 7 577 1 7 578 1 7 579 1 7 580 1 7 581 1 7 582 1 7 583 1 7 584 1 7 585 1 7 586 1 7 597 1 7 598 1 7 599 1 7 600 1 7 601 1 7 612 1 7 613 1 7 614 1 7 615 1 7 616 1 7 617 1 7 618 1 7 619 1 7 620 1 7 621 1 7 632 1 7 633 1 7 634 1 7 635 1 7 636 1 7 637 1 7 638 1 7 639 1 7 640 1 7 641 1 7 652 1 7 653 1 7 654 1 7 655 1 7 656 1 7 657 1 7 658 1 7 659 1 7 660 1 7 661 1 7 667 1 7 668 1 7 669 1 7 670 1 7 671 1 7 682 1 7 683 1 7 684 1 7 685 1 7 686 1 7 687 1 7 688 1 7 689 1 7 690 1 7 691 1 7 702 1 7 703 1 7 704 1 7 705 1 7 706 1 7 707 1 7 708 1 7 709 1 7 710 1 7 711 1 7 722 1 7 723 1 7 724 1 7 725 1 7 726 1 7 727 1 7 728 1 7 729 1 7 730 1 7 731 1 7 737 1 7 738 1 7 739 1 7 740 1 7 741 1 7 742 1 7 743 1 7 744 1 7 745 1 7 746 1 7 757 1 7 758 1 7 759 1 7 760 1 7 761 1 7 762 1 7 763 1 7 764 1 7 765 1 7 766 1 7 772 1 7 773 1 7 774 1 7 775 1 7 776 1 7 777 1 7 778 1 7 779 1 7 780 1 7 781 1 7 787 1 7 788 1 7 789 1 7 790 1 7 791 1 8 4 1 8 11 1 8 17 1 8 22 1 8 27 1 8 28 1 8 29 1 8 30 1 8 39 1 8 45 1 8 50 1 8 55 1 8 56 1 8 57 1 8 58 1 8 66 1 8 71 1 8 76 1 8 77 1 8 78 1 8 79 1 8 86 1 8 91 1 8 92 1 8 93 1 8 94 1 8 101 1 8 102 1 8 103 1 8 104 1 8 111 1 8 112 1 8 113 1 8 114 1 8 115 1 8 116 1 8 123 1 8 129 1 8 134 1 8 139 1 8 140 1 8 141 1 8 142 1 8 150 1 8 155 1 8 160 1 8 161 1 8 162 1 8 163 1 8 170 1 8 175 1 8 176 1 8 177 1 8 178 1 8 185 1 8 186 1 8 187 1 8 188 1 8 195 1 8 196 1 8 197 1 8 198 1 8 199 1 8 200 1 8 206 1 8 211 1 8 216 1 8 217 1 8 218 1 8 219 1 8 226 1 8 231 1 8 232 1 8 233 1 8 234 1 8 241 1 8 242 1 8 243 1 8 244 1 8 251 1 8 252 1 8 253 1 8 254 1 8 255 1 8 256 1 8 261 1 8 266 1 8 267 1 8 268 1 8 269 1 8 276 1 8 277 1 8 278 1 8 279 1 8 286 1 8 287 1 8 288 1 8 289 1 8 290 1 8 291 1 8 296 1 8 297 1 8 298 1 8 299 1 8 306 1 8 307 1 8 308 1 8 309 1 8 310 1 8 311 1 8 316 1 8 317 1 8 318 1 8 319 1 8 320 1 8 321 1 8 326 1 8 327 1 8 328 1 8 329 1 8 333 1 8 339 1 8 344 1 8 349 1 8 350 1 8 351 1 8 352 1 8 360 1 8 365 1 8 370 1 8 371 1 8 372 1 8 373 1 8 380 1 8 385 1 8 386 1 8 387 1 8 388 1 8 395 1 8 396 1 8 397 1 8 398 1 8 405 1 8 406 1 8 407 1 8 408 1 8 409 1 8 410 1 8 416 1 8 421 1 8 426 1 8 427 1 8 428 1 8 429 1 8 436 1 8 441 1 8 442 1 8 443 1 8 444 1 8 451 1 8 452 1 8 453 1 8 454 1 8 461 1 8 462 1 8 463 1 8 464 1 8 465 1 8 466 1 8 471 1 8 476 1 8 477 1 8 478 1 8 479 1 8 486 1 8 487 1 8 488 1 8 489 1 8 496 1 8 497 1 8 498 1 8 499 1 8 500 1 8 501 1 8 506 1 8 507 1 8 508 1 8 509 1 8 516 1 8 517 1 8 518 1 8 519 1 8 520 1 8 521 1 8 526 1 8 527 1 8 528 1 8 529 1 8 530 1 8 531 1 8 536 1 8 537 1 8 538 1 8 539 1 8 542 1 8 547 1 8 552 1 8 553 1 8 554 1 8 555 1 8 562 1 8 567 1 8 568 1 8 569 1 8 570 1 8 577 1 8 578 1 8 579 1 8 580 1 8 587 1 8 588 1 8 589 1 8 590 1 8 591 1 8 592 1 8 597 1 8 602 1 8 603 1 8 604 1 8 605 1 8 612 1 8 613 1 8 614 1 8 615 1 8 622 1 8 623 1 8 624 1 8 625 1 8 626 1 8 627 1 8 632 1 8 633 1 8 634 1 8 635 1 8 642 1 8 643 1 8 644 1 8 645 1 8 646 1 8 647 1 8 652 1 8 653 1 8 654 1 8 655 1 8 656 1 8 657 1 8 662 1 8 663 1 8 664 1 8 665 1 8 667 1 8 672 1 8 673 1 8 674 1 8 675 1 8 682 1 8 683 1 8 684 1 8 685 1 8 692 1 8 693 1 8 694 1 8 695 1 8 696 1 8 697 1 8 702 1 8 703 1 8 704 1 8 705 1 8 712 1 8 713 1 8 714 1 8 715 1 8 716 1 8 717 1 8 722 1 8 723 1 8 724 1 8 725 1 8 726 1 8 727 1 8 732 1 8 733 1 8 734 1 8 735 1 8 737 1 8 738 1 8 739 1 8 740 1 8 747 1 8 748 1 8 749 1 8 750 1 8 751 1 8 752 1 8 757 1 8 758 1 8 759 1 8 760 1 8 761 1 8 762 1 8 767 1 8 768 1 8 769 1 8 770 1 8 772 1 8 773 1 8 774 1 8 775 1 8 776 1 8 777 1 8 782 1 8 783 1 8 784 1 8 785 1 8 787 1 8 788 1 8 789 1 8 790 1 8 792 1 9 5 1 9 12 1 9 18 1 9 23 1 9 27 1 9 31 1 9 32 1 9 33 1 9 40 1 9 46 1 9 51 1 9 55 1 9 59 1 9 60 1 9 61 1 9 67 1 9 72 1 9 76 1 9 80 1 9 81 1 9 82 1 9 87 1 9 91 1 9 95 1 9 96 1 9 97 1 9 101 1 9 105 1 9 106 1 9 107 1 9 111 1 9 112 1 9 113 1 9 117 1 9 118 1 9 119 1 9 124 1 9 130 1 9 135 1 9 139 1 9 143 1 9 144 1 9 145 1 9 151 1 9 156 1 9 160 1 9 164 1 9 165 1 9 166 1 9 171 1 9 175 1 9 179 1 9 180 1 9 181 1 9 185 1 9 189 1 9 190 1 9 191 1 9 195 1 9 196 1 9 197 1 9 201 1 9 202 1 9 203 1 9 207 1 9 212 1 9 216 1 9 220 1 9 221 1 9 222 1 9 227 1 9 231 1 9 235 1 9 236 1 9 237 1 9 241 1 9 245 1 9 246 1 9 247 1 9 251 1 9 252 1 9 253 1 9 257 1 9 258 1 9 259 1 9 262 1 9 266 1 9 270 1 9 271 1 9 272 1 9 276 1 9 280 1 9 281 1 9 282 1 9 286 1 9 287 1 9 288 1 9 292 1 9 293 1 9 294 1 9 296 1 9 300 1 9 301 1 9 302 1 9 306 1 9 307 1 9 308 1 9 312 1 9 313 1 9 314 1 9 316 1 9 317 1 9 318 1 9 322 1 9 323 1 9 324 1 9 326 1 9 327 1 9 328 1 9 330 1 9 334 1 9 340 1 9 345 1 9 349 1 9 353 1 9 354 1 9 355 1 9 361 1 9 366 1 9 370 1 9 374 1 9 375 1 9 376 1 9 381 1 9 385 1 9 389 1 9 390 1 9 391 1 9 395 1 9 399 1 9 400 1 9 401 1 9 405 1 9 406 1 9 407 1 9 411 1 9 412 1 9 413 1 9 417 1 9 422 1 9 426 1 9 430 1 9 431 1 9 432 1 9 437 1 9 441 1 9 445 1 9 446 1 9 447 1 9 451 1 9 455 1 9 456 1 9 457 1 9 461 1 9 462 1 9 463 1 9 467 1 9 468 1 9 469 1 9 472 1 9 476 1 9 480 1 9 481 1 9 482 1 9 486 1 9 490 1 9 491 1 9 492 1 9 496 1 9 497 1 9 498 1 9 502 1 9 503 1 9 504 1 9 506 1 9 510 1 9 511 1 9 512 1 9 516 1 9 517 1 9 518 1 9 522 1 9 523 1 9 524 1 9 526 1 9 527 1 9 528 1 9 532 1 9 533 1 9 534 1 9 536 1 9 537 1 9 538 1 9 540 1 9 543 1 9 548 1 9 552 1 9 556 1 9 557 1 9 558 1 9 563 1 9 567 1 9 571 1 9 572 1 9 573 1 9 577 1 9 581 1 9 582 1 9 583 1 9 587 1 9 588 1 9 589 1 9 593 1 9 594 1 9 595 1 9 598 1 9 602 1 9 606 1 9 607 1 9 608 1 9 612 1 9 616 1 9 617 1 9 618 1 9 622 1 9 623 1 9 624 1 9 628 1 9 629 1 9 630 1 9 632 1 9 636 1 9 637 1 9 638 1 9 642 1 9 643 1 9 644 1 9 648 1 9 649 1 9 650 1 9 652 1 9 653 1 9 654 1 9 658 1 9 659 1 9 660 1 9 662 1 9 663 1 9 664 1 9 666 1 9 668 1 9 672 1 9 676 1 9 677 1 9 678 1 9 682 1 9 686 1 9 687 1 9 688 1 9 692 1 9 693 1 9 694 1 9 698 1 9 699 1 9 700 1 9 702 1 9 706 1 9 707 1 9 708 1 9 712 1 9 713 1 9 714 1 9 718 1 9 719 1 9 720 1 9 722 1 9 723 1 9 724 1 9 728 1 9 729 1 9 730 1 9 732 1 9 733 1 9 734 1 9 736 1 9 737 1 9 741 1 9 742 1 9 743 1 9 747 1 9 748 1 9 749 1 9 753 1 9 754 1 9 755 1 9 757 1 9 758 1 9 759 1 9 763 1 9 764 1 9 765 1 9 767 1 9 768 1 9 769 1 9 771 1 9 772 1 9 773 1 9 774 1 9 778 1 9 779 1 9 780 1 9 782 1 9 783 1 9 784 1 9 786 1 9 787 1 9 788 1 9 789 1 9 791 1 9 792 1 10 6 1 10 13 1 10 19 1 10 24 1 10 28 1 10 31 1 10 34 1 10 35 1 10 41 1 10 47 1 10 52 1 10 56 1 10 59 1 10 62 1 10 63 1 10 68 1 10 73 1 10 77 1 10 80 1 10 83 1 10 84 1 10 88 1 10 92 1 10 95 1 10 98 1 10 99 1 10 102 1 10 105 1 10 108 1 10 109 1 10 111 1 10 114 1 10 115 1 10 117 1 10 118 1 10 120 1 10 125 1 10 131 1 10 136 1 10 140 1 10 143 1 10 146 1 10 147 1 10 152 1 10 157 1 10 161 1 10 164 1 10 167 1 10 168 1 10 172 1 10 176 1 10 179 1 10 182 1 10 183 1 10 186 1 10 189 1 10 192 1 10 193 1 10 195 1 10 198 1 10 199 1 10 201 1 10 202 1 10 204 1 10 208 1 10 213 1 10 217 1 10 220 1 10 223 1 10 224 1 10 228 1 10 232 1 10 235 1 10 238 1 10 239 1 10 242 1 10 245 1 10 248 1 10 249 1 10 251 1 10 254 1 10 255 1 10 257 1 10 258 1 10 260 1 10 263 1 10 267 1 10 270 1 10 273 1 10 274 1 10 277 1 10 280 1 10 283 1 10 284 1 10 286 1 10 289 1 10 290 1 10 292 1 10 293 1 10 295 1 10 297 1 10 300 1 10 303 1 10 304 1 10 306 1 10 309 1 10 310 1 10 312 1 10 313 1 10 315 1 10 316 1 10 319 1 10 320 1 10 322 1 10 323 1 10 325 1 10 326 1 10 327 1 10 329 1 10 330 1 10 335 1 10 341 1 10 346 1 10 350 1 10 353 1 10 356 1 10 357 1 10 362 1 10 367 1 10 371 1 10 374 1 10 377 1 10 378 1 10 382 1 10 386 1 10 389 1 10 392 1 10 393 1 10 396 1 10 399 1 10 402 1 10 403 1 10 405 1 10 408 1 10 409 1 10 411 1 10 412 1 10 414 1 10 418 1 10 423 1 10 427 1 10 430 1 10 433 1 10 434 1 10 438 1 10 442 1 10 445 1 10 448 1 10 449 1 10 452 1 10 455 1 10 458 1 10 459 1 10 461 1 10 464 1 10 465 1 10 467 1 10 468 1 10 470 1 10 473 1 10 477 1 10 480 1 10 483 1 10 484 1 10 487 1 10 490 1 10 493 1 10 494 1 10 496 1 10 499 1 10 500 1 10 502 1 10 503 1 10 505 1 10 507 1 10 510 1 10 513 1 10 514 1 10 516 1 10 519 1 10 520 1 10 522 1 10 523 1 10 525 1 10 526 1 10 529 1 10 530 1 10 532 1 10 533 1 10 535 1 10 536 1 10 537 1 10 539 1 10 540 1 10 544 1 10 549 1 10 553 1 10 556 1 10 559 1 10 560 1 10 564 1 10 568 1 10 571 1 10 574 1 10 575 1 10 578 1 10 581 1 10 584 1 10 585 1 10 587 1 10 590 1 10 591 1 10 593 1 10 594 1 10 596 1 10 599 1 10 603 1 10 606 1 10 609 1 10 610 1 10 613 1 10 616 1 10 619 1 10 620 1 10 622 1 10 625 1 10 626 1 10 628 1 10 629 1 10 631 1 10 633 1 10 636 1 10 639 1 10 640 1 10 642 1 10 645 1 10 646 1 10 648 1 10 649 1 10 651 1 10 652 1 10 655 1 10 656 1 10 658 1 10 659 1 10 661 1 10 662 1 10 663 1 10 665 1 10 666 1 10 669 1 10 673 1 10 676 1 10 679 1 10 680 1 10 683 1 10 686 1 10 689 1 10 690 1 10 692 1 10 695 1 10 696 1 10 698 1 10 699 1 10 701 1 10 703 1 10 706 1 10 709 1 10 710 1 10 712 1 10 715 1 10 716 1 10 718 1 10 719 1 10 721 1 10 722 1 10 725 1 10 726 1 10 728 1 10 729 1 10 731 1 10 732 1 10 733 1 10 735 1 10 736 1 10 738 1 10 741 1 10 744 1 10 745 1 10 747 1 10 750 1 10 751 1 10 753 1 10 754 1 10 756 1 10 757 1 10 760 1 10 761 1 10 763 1 10 764 1 10 766 1 10 767 1 10 768 1 10 770 1 10 771 1 10 772 1 10 775 1 10 776 1 10 778 1 10 779 1 10 781 1 10 782 1 10 783 1 10 785 1 10 786 1 10 787 1 10 788 1 10 790 1 10 791 1 10 792 1 11 7 1 11 14 1 11 20 1 11 25 1 11 29 1 11 32 1 11 34 1 11 36 1 11 42 1 11 48 1 11 53 1 11 57 1 11 60 1 11 62 1 11 64 1 11 69 1 11 74 1 11 78 1 11 81 1 11 83 1 11 85 1 11 89 1 11 93 1 11 96 1 11 98 1 11 100 1 11 103 1 11 106 1 11 108 1 11 110 1 11 112 1 11 114 1 11 116 1 11 117 1 11 119 1 11 120 1 11 126 1 11 132 1 11 137 1 11 141 1 11 144 1 11 146 1 11 148 1 11 153 1 11 158 1 11 162 1 11 165 1 11 167 1 11 169 1 11 173 1 11 177 1 11 180 1 11 182 1 11 184 1 11 187 1 11 190 1 11 192 1 11 194 1 11 196 1 11 198 1 11 200 1 11 201 1 11 203 1 11 204 1 11 209 1 11 214 1 11 218 1 11 221 1 11 223 1 11 225 1 11 229 1 11 233 1 11 236 1 11 238 1 11 240 1 11 243 1 11 246 1 11 248 1 11 250 1 11 252 1 11 254 1 11 256 1 11 257 1 11 259 1 11 260 1 11 264 1 11 268 1 11 271 1 11 273 1 11 275 1 11 278 1 11 281 1 11 283 1 11 285 1 11 287 1 11 289 1 11 291 1 11 292 1 11 294 1 11 295 1 11 298 1 11 301 1 11 303 1 11 305 1 11 307 1 11 309 1 11 311 1 11 312 1 11 314 1 11 315 1 11 317 1 11 319 1 11 321 1 11 322 1 11 324 1 11 325 1 11 326 1 11 328 1 11 329 1 11 330 1 11 336 1 11 342 1 11 347 1 11 351 1 11 354 1 11 356 1 11 358 1 11 363 1 11 368 1 11 372 1 11 375 1 11 377 1 11 379 1 11 383 1 11 387 1 11 390 1 11 392 1 11 394 1 11 397 1 11 400 1 11 402 1 11 404 1 11 406 1 11 408 1 11 410 1 11 411 1 11 413 1 11 414 1 11 419 1 11 424 1 11 428 1 11 431 1 11 433 1 11 435 1 11 439 1 11 443 1 11 446 1 11 448 1 11 450 1 11 453 1 11 456 1 11 458 1 11 460 1 11 462 1 11 464 1 11 466 1 11 467 1 11 469 1 11 470 1 11 474 1 11 478 1 11 481 1 11 483 1 11 485 1 11 488 1 11 491 1 11 493 1 11 495 1 11 497 1 11 499 1 11 501 1 11 502 1 11 504 1 11 505 1 11 508 1 11 511 1 11 513 1 11 515 1 11 517 1 11 519 1 11 521 1 11 522 1 11 524 1 11 525 1 11 527 1 11 529 1 11 531 1 11 532 1 11 534 1 11 535 1 11 536 1 11 538 1 11 539 1 11 540 1 11 545 1 11 550 1 11 554 1 11 557 1 11 559 1 11 561 1 11 565 1 11 569 1 11 572 1 11 574 1 11 576 1 11 579 1 11 582 1 11 584 1 11 586 1 11 588 1 11 590 1 11 592 1 11 593 1 11 595 1 11 596 1 11 600 1 11 604 1 11 607 1 11 609 1 11 611 1 11 614 1 11 617 1 11 619 1 11 621 1 11 623 1 11 625 1 11 627 1 11 628 1 11 630 1 11 631 1 11 634 1 11 637 1 11 639 1 11 641 1 11 643 1 11 645 1 11 647 1 11 648 1 11 650 1 11 651 1 11 653 1 11 655 1 11 657 1 11 658 1 11 660 1 11 661 1 11 662 1 11 664 1 11 665 1 11 666 1 11 670 1 11 674 1 11 677 1 11 679 1 11 681 1 11 684 1 11 687 1 11 689 1 11 691 1 11 693 1 11 695 1 11 697 1 11 698 1 11 700 1 11 701 1 11 704 1 11 707 1 11 709 1 11 711 1 11 713 1 11 715 1 11 717 1 11 718 1 11 720 1 11 721 1 11 723 1 11 725 1 11 727 1 11 728 1 11 730 1 11 731 1 11 732 1 11 734 1 11 735 1 11 736 1 11 739 1 11 742 1 11 744 1 11 746 1 11 748 1 11 750 1 11 752 1 11 753 1 11 755 1 11 756 1 11 758 1 11 760 1 11 762 1 11 763 1 11 765 1 11 766 1 11 767 1 11 769 1 11 770 1 11 771 1 11 773 1 11 775 1 11 777 1 11 778 1 11 780 1 11 781 1 11 782 1 11 784 1 11 785 1 11 786 1 11 787 1 11 789 1 11 790 1 11 791 1 11 792 1 12 8 1 12 15 1 12 21 1 12 26 1 12 30 1 12 33 1 12 35 1 12 36 1 12 43 1 12 49 1 12 54 1 12 58 1 12 61 1 12 63 1 12 64 1 12 70 1 12 75 1 12 79 1 12 82 1 12 84 1 12 85 1 12 90 1 12 94 1 12 97 1 12 99 1 12 100 1 12 104 1 12 107 1 12 109 1 12 110 1 12 113 1 12 115 1 12 116 1 12 118 1 12 119 1 12 120 1 12 127 1 12 133 1 12 138 1 12 142 1 12 145 1 12 147 1 12 148 1 12 154 1 12 159 1 12 163 1 12 166 1 12 168 1 12 169 1 12 174 1 12 178 1 12 181 1 12 183 1 12 184 1 12 188 1 12 191 1 12 193 1 12 194 1 12 197 1 12 199 1 12 200 1 12 202 1 12 203 1 12 204 1 12 210 1 12 215 1 12 219 1 12 222 1 12 224 1 12 225 1 12 230 1 12 234 1 12 237 1 12 239 1 12 240 1 12 244 1 12 247 1 12 249 1 12 250 1 12 253 1 12 255 1 12 256 1 12 258 1 12 259 1 12 260 1 12 265 1 12 269 1 12 272 1 12 274 1 12 275 1 12 279 1 12 282 1 12 284 1 12 285 1 12 288 1 12 290 1 12 291 1 12 293 1 12 294 1 12 295 1 12 299 1 12 302 1 12 304 1 12 305 1 12 308 1 12 310 1 12 311 1 12 313 1 12 314 1 12 315 1 12 318 1 12 320 1 12 321 1 12 323 1 12 324 1 12 325 1 12 327 1 12 328 1 12 329 1 12 330 1 12 337 1 12 343 1 12 348 1 12 352 1 12 355 1 12 357 1 12 358 1 12 364 1 12 369 1 12 373 1 12 376 1 12 378 1 12 379 1 12 384 1 12 388 1 12 391 1 12 393 1 12 394 1 12 398 1 12 401 1 12 403 1 12 404 1 12 407 1 12 409 1 12 410 1 12 412 1 12 413 1 12 414 1 12 420 1 12 425 1 12 429 1 12 432 1 12 434 1 12 435 1 12 440 1 12 444 1 12 447 1 12 449 1 12 450 1 12 454 1 12 457 1 12 459 1 12 460 1 12 463 1 12 465 1 12 466 1 12 468 1 12 469 1 12 470 1 12 475 1 12 479 1 12 482 1 12 484 1 12 485 1 12 489 1 12 492 1 12 494 1 12 495 1 12 498 1 12 500 1 12 501 1 12 503 1 12 504 1 12 505 1 12 509 1 12 512 1 12 514 1 12 515 1 12 518 1 12 520 1 12 521 1 12 523 1 12 524 1 12 525 1 12 528 1 12 530 1 12 531 1 12 533 1 12 534 1 12 535 1 12 537 1 12 538 1 12 539 1 12 540 1 12 546 1 12 551 1 12 555 1 12 558 1 12 560 1 12 561 1 12 566 1 12 570 1 12 573 1 12 575 1 12 576 1 12 580 1 12 583 1 12 585 1 12 586 1 12 589 1 12 591 1 12 592 1 12 594 1 12 595 1 12 596 1 12 601 1 12 605 1 12 608 1 12 610 1 12 611 1 12 615 1 12 618 1 12 620 1 12 621 1 12 624 1 12 626 1 12 627 1 12 629 1 12 630 1 12 631 1 12 635 1 12 638 1 12 640 1 12 641 1 12 644 1 12 646 1 12 647 1 12 649 1 12 650 1 12 651 1 12 654 1 12 656 1 12 657 1 12 659 1 12 660 1 12 661 1 12 663 1 12 664 1 12 665 1 12 666 1 12 671 1 12 675 1 12 678 1 12 680 1 12 681 1 12 685 1 12 688 1 12 690 1 12 691 1 12 694 1 12 696 1 12 697 1 12 699 1 12 700 1 12 701 1 12 705 1 12 708 1 12 710 1 12 711 1 12 714 1 12 716 1 12 717 1 12 719 1 12 720 1 12 721 1 12 724 1 12 726 1 12 727 1 12 729 1 12 730 1 12 731 1 12 733 1 12 734 1 12 735 1 12 736 1 12 740 1 12 743 1 12 745 1 12 746 1 12 749 1 12 751 1 12 752 1 12 754 1 12 755 1 12 756 1 12 759 1 12 761 1 12 762 1 12 764 1 12 765 1 12 766 1 12 768 1 12 769 1 12 770 1 12 771 1 12 774 1 12 776 1 12 777 1 12 779 1 12 780 1 12 781 1 12 783 1 12 784 1 12 785 1 12 786 1 12 788 1 12 789 1 12 790 1 12 791 1 12 792 1 13 1 1 13 2 1 13 3 1 13 4 1 13 5 1 13 6 1 13 7 1 13 8 1 13 9 1 13 10 1 13 11 1 13 12 1 13 13 1 13 14 1 13 15 1 13 16 1 13 17 1 13 18 1 13 19 1 13 20 1 13 21 1 13 22 1 13 23 1 13 24 1 13 25 1 13 26 1 13 27 1 13 28 1 13 29 1 13 30 1 13 31 1 13 32 1 13 33 1 13 34 1 13 35 1 13 36 1 13 37 1 13 38 1 13 39 1 13 40 1 13 41 1 13 42 1 13 43 1 13 44 1 13 45 1 13 46 1 13 47 1 13 48 1 13 49 1 13 50 1 13 51 1 13 52 1 13 53 1 13 54 1 13 55 1 13 56 1 13 57 1 13 58 1 13 59 1 13 60 1 13 61 1 13 62 1 13 63 1 13 64 1 13 65 1 13 66 1 13 67 1 13 68 1 13 69 1 13 70 1 13 71 1 13 72 1 13 73 1 13 74 1 13 75 1 13 76 1 13 77 1 13 78 1 13 79 1 13 80 1 13 81 1 13 82 1 13 83 1 13 84 1 13 85 1 13 86 1 13 87 1 13 88 1 13 89 1 13 90 1 13 91 1 13 92 1 13 93 1 13 94 1 13 95 1 13 96 1 13 97 1 13 98 1 13 99 1 13 100 1 13 101 1 13 102 1 13 103 1 13 104 1 13 105 1 13 106 1 13 107 1 13 108 1 13 109 1 13 110 1 13 111 1 13 112 1 13 113 1 13 114 1 13 115 1 13 116 1 13 117 1 13 118 1 13 119 1 13 120 1 13 793 1 13 794 1 13 795 1 13 796 1 13 797 1 13 798 1 13 799 1 13 800 1 13 801 1 13 802 1 13 803 1 13 804 1 13 805 1 13 806 1 13 807 1 13 808 1 13 809 1 13 810 1 13 811 1 13 812 1 13 813 1 13 814 1 13 815 1 13 816 1 13 817 1 13 818 1 13 819 1 13 820 1 13 821 1 13 822 1 13 823 1 13 824 1 13 825 1 13 826 1 13 827 1 13 828 1 13 829 1 13 830 1 13 831 1 13 832 1 13 833 1 13 834 1 13 835 1 13 836 1 13 837 1 13 838 1 13 839 1 13 840 1 13 841 1 13 842 1 13 843 1 13 844 1 13 845 1 13 846 1 13 847 1 13 848 1 13 849 1 13 850 1 13 851 1 13 852 1 13 853 1 13 854 1 13 855 1 13 856 1 13 857 1 13 858 1 13 859 1 13 860 1 13 861 1 13 862 1 13 863 1 13 864 1 13 865 1 13 866 1 13 867 1 13 868 1 13 869 1 13 870 1 13 871 1 13 872 1 13 873 1 13 874 1 13 875 1 13 876 1 13 877 1 13 878 1 13 879 1 13 880 1 13 881 1 13 882 1 13 883 1 13 884 1 13 885 1 13 886 1 13 887 1 13 888 1 13 889 1 13 890 1 13 891 1 13 892 1 13 893 1 13 894 1 13 895 1 13 896 1 13 897 1 13 898 1 13 899 1 13 900 1 13 901 1 13 902 1 13 903 1 13 904 1 13 905 1 13 906 1 13 907 1 13 908 1 13 909 1 13 910 1 13 911 1 13 912 1 13 913 1 13 914 1 13 915 1 13 916 1 13 917 1 13 918 1 13 919 1 13 920 1 13 921 1 13 922 1 13 923 1 13 924 1 13 925 1 13 926 1 13 927 1 13 928 1 13 929 1 13 930 1 13 931 1 13 932 1 13 933 1 13 934 1 13 935 1 13 936 1 13 937 1 13 938 1 13 939 1 13 940 1 13 941 1 13 942 1 13 943 1 13 944 1 13 945 1 13 946 1 13 947 1 13 948 1 13 949 1 13 950 1 13 951 1 13 952 1 13 953 1 13 954 1 13 955 1 13 956 1 13 957 1 13 958 1 13 959 1 13 960 1 13 961 1 13 962 1 13 963 1 13 964 1 13 965 1 13 966 1 13 967 1 13 968 1 13 969 1 13 970 1 13 971 1 13 972 1 13 973 1 13 974 1 13 975 1 13 976 1 13 977 1 13 978 1 13 979 1 13 980 1 13 981 1 13 982 1 13 983 1 13 984 1 13 985 1 13 986 1 13 987 1 13 988 1 13 989 1 13 990 1 13 991 1 13 992 1 13 993 1 13 994 1 13 995 1 13 996 1 13 997 1 13 998 1 13 999 1 13 1000 1 13 1001 1 13 1002 1 14 1 1 14 2 1 14 3 1 14 4 1 14 5 1 14 6 1 14 7 1 14 8 1 14 9 1 14 10 1 14 11 1 14 12 1 14 13 1 14 14 1 14 15 1 14 16 1 14 17 1 14 18 1 14 19 1 14 20 1 14 21 1 14 22 1 14 23 1 14 24 1 14 25 1 14 26 1 14 27 1 14 28 1 14 29 1 14 30 1 14 31 1 14 32 1 14 33 1 14 34 1 14 35 1 14 36 1 14 121 1 14 122 1 14 123 1 14 124 1 14 125 1 14 126 1 14 127 1 14 128 1 14 129 1 14 130 1 14 131 1 14 132 1 14 133 1 14 134 1 14 135 1 14 136 1 14 137 1 14 138 1 14 139 1 14 140 1 14 141 1 14 142 1 14 143 1 14 144 1 14 145 1 14 146 1 14 147 1 14 148 1 14 149 1 14 150 1 14 151 1 14 152 1 14 153 1 14 154 1 14 155 1 14 156 1 14 157 1 14 158 1 14 159 1 14 160 1 14 161 1 14 162 1 14 163 1 14 164 1 14 165 1 14 166 1 14 167 1 14 168 1 14 169 1 14 170 1 14 171 1 14 172 1 14 173 1 14 174 1 14 175 1 14 176 1 14 177 1 14 178 1 14 179 1 14 180 1 14 181 1 14 182 1 14 183 1 14 184 1 14 185 1 14 186 1 14 187 1 14 188 1 14 189 1 14 190 1 14 191 1 14 192 1 14 193 1 14 194 1 14 195 1 14 196 1 14 197 1 14 198 1 14 199 1 14 200 1 14 201 1 14 202 1 14 203 1 14 204 1 14 793 1 14 794 1 14 795 1 14 796 1 14 797 1 14 798 1 14 799 1 14 800 1 14 801 1 14 802 1 14 803 1 14 804 1 14 805 1 14 806 1 14 807 1 14 808 1 14 809 1 14 810 1 14 811 1 14 812 1 14 813 1 14 814 1 14 815 1 14 816 1 14 817 1 14 818 1 14 819 1 14 820 1 14 821 1 14 822 1 14 823 1 14 824 1 14 825 1 14 826 1 14 827 1 14 828 1 14 829 1 14 830 1 14 831 1 14 832 1 14 833 1 14 834 1 14 835 1 14 836 1 14 837 1 14 838 1 14 839 1 14 840 1 14 841 1 14 842 1 14 843 1 14 844 1 14 845 1 14 846 1 14 847 1 14 848 1 14 849 1 14 850 1 14 851 1 14 852 1 14 853 1 14 854 1 14 855 1 14 856 1 14 857 1 14 858 1 14 859 1 14 860 1 14 861 1 14 862 1 14 863 1 14 864 1 14 865 1 14 866 1 14 867 1 14 868 1 14 869 1 14 870 1 14 871 1 14 872 1 14 873 1 14 874 1 14 875 1 14 876 1 14 1003 1 14 1004 1 14 1005 1 14 1006 1 14 1007 1 14 1008 1 14 1009 1 14 1010 1 14 1011 1 14 1012 1 14 1013 1 14 1014 1 14 1015 1 14 1016 1 14 1017 1 14 1018 1 14 1019 1 14 1020 1 14 1021 1 14 1022 1 14 1023 1 14 1024 1 14 1025 1 14 1026 1 14 1027 1 14 1028 1 14 1029 1 14 1030 1 14 1031 1 14 1032 1 14 1033 1 14 1034 1 14 1035 1 14 1036 1 14 1037 1 14 1038 1 14 1039 1 14 1040 1 14 1041 1 14 1042 1 14 1043 1 14 1044 1 14 1045 1 14 1046 1 14 1047 1 14 1048 1 14 1049 1 14 1050 1 14 1051 1 14 1052 1 14 1053 1 14 1054 1 14 1055 1 14 1056 1 14 1057 1 14 1058 1 14 1059 1 14 1060 1 14 1061 1 14 1062 1 14 1063 1 14 1064 1 14 1065 1 14 1066 1 14 1067 1 14 1068 1 14 1069 1 14 1070 1 14 1071 1 14 1072 1 14 1073 1 14 1074 1 14 1075 1 14 1076 1 14 1077 1 14 1078 1 14 1079 1 14 1080 1 14 1081 1 14 1082 1 14 1083 1 14 1084 1 14 1085 1 14 1086 1 14 1087 1 14 1088 1 14 1089 1 14 1090 1 14 1091 1 14 1092 1 14 1093 1 14 1094 1 14 1095 1 14 1096 1 14 1097 1 14 1098 1 14 1099 1 14 1100 1 14 1101 1 14 1102 1 14 1103 1 14 1104 1 14 1105 1 14 1106 1 14 1107 1 14 1108 1 14 1109 1 14 1110 1 14 1111 1 14 1112 1 14 1113 1 14 1114 1 14 1115 1 14 1116 1 14 1117 1 14 1118 1 14 1119 1 14 1120 1 14 1121 1 14 1122 1 14 1123 1 14 1124 1 14 1125 1 14 1126 1 14 1127 1 14 1128 1 15 1 1 15 2 1 15 3 1 15 4 1 15 5 1 15 6 1 15 7 1 15 8 1 15 37 1 15 38 1 15 39 1 15 40 1 15 41 1 15 42 1 15 43 1 15 44 1 15 45 1 15 46 1 15 47 1 15 48 1 15 49 1 15 50 1 15 51 1 15 52 1 15 53 1 15 54 1 15 55 1 15 56 1 15 57 1 15 58 1 15 59 1 15 60 1 15 61 1 15 62 1 15 63 1 15 64 1 15 121 1 15 122 1 15 123 1 15 124 1 15 125 1 15 126 1 15 127 1 15 128 1 15 129 1 15 130 1 15 131 1 15 132 1 15 133 1 15 134 1 15 135 1 15 136 1 15 137 1 15 138 1 15 139 1 15 140 1 15 141 1 15 142 1 15 143 1 15 144 1 15 145 1 15 146 1 15 147 1 15 148 1 15 205 1 15 206 1 15 207 1 15 208 1 15 209 1 15 210 1 15 211 1 15 212 1 15 213 1 15 214 1 15 215 1 15 216 1 15 217 1 15 218 1 15 219 1 15 220 1 15 221 1 15 222 1 15 223 1 15 224 1 15 225 1 15 226 1 15 227 1 15 228 1 15 229 1 15 230 1 15 231 1 15 232 1 15 233 1 15 234 1 15 235 1 15 236 1 15 237 1 15 238 1 15 239 1 15 240 1 15 241 1 15 242 1 15 243 1 15 244 1 15 245 1 15 246 1 15 247 1 15 248 1 15 249 1 15 250 1 15 251 1 15 252 1 15 253 1 15 254 1 15 255 1 15 256 1 15 257 1 15 258 1 15 259 1 15 260 1 15 793 1 15 794 1 15 795 1 15 796 1 15 797 1 15 798 1 15 799 1 15 800 1 15 801 1 15 802 1 15 803 1 15 804 1 15 805 1 15 806 1 15 807 1 15 808 1 15 809 1 15 810 1 15 811 1 15 812 1 15 813 1 15 814 1 15 815 1 15 816 1 15 817 1 15 818 1 15 819 1 15 820 1 15 877 1 15 878 1 15 879 1 15 880 1 15 881 1 15 882 1 15 883 1 15 884 1 15 885 1 15 886 1 15 887 1 15 888 1 15 889 1 15 890 1 15 891 1 15 892 1 15 893 1 15 894 1 15 895 1 15 896 1 15 897 1 15 898 1 15 899 1 15 900 1 15 901 1 15 902 1 15 903 1 15 904 1 15 905 1 15 906 1 15 907 1 15 908 1 15 909 1 15 910 1 15 911 1 15 912 1 15 913 1 15 914 1 15 915 1 15 916 1 15 917 1 15 918 1 15 919 1 15 920 1 15 921 1 15 922 1 15 923 1 15 924 1 15 925 1 15 926 1 15 927 1 15 928 1 15 929 1 15 930 1 15 931 1 15 932 1 15 1003 1 15 1004 1 15 1005 1 15 1006 1 15 1007 1 15 1008 1 15 1009 1 15 1010 1 15 1011 1 15 1012 1 15 1013 1 15 1014 1 15 1015 1 15 1016 1 15 1017 1 15 1018 1 15 1019 1 15 1020 1 15 1021 1 15 1022 1 15 1023 1 15 1024 1 15 1025 1 15 1026 1 15 1027 1 15 1028 1 15 1029 1 15 1030 1 15 1031 1 15 1032 1 15 1033 1 15 1034 1 15 1035 1 15 1036 1 15 1037 1 15 1038 1 15 1039 1 15 1040 1 15 1041 1 15 1042 1 15 1043 1 15 1044 1 15 1045 1 15 1046 1 15 1047 1 15 1048 1 15 1049 1 15 1050 1 15 1051 1 15 1052 1 15 1053 1 15 1054 1 15 1055 1 15 1056 1 15 1057 1 15 1058 1 15 1129 1 15 1130 1 15 1131 1 15 1132 1 15 1133 1 15 1134 1 15 1135 1 15 1136 1 15 1137 1 15 1138 1 15 1139 1 15 1140 1 15 1141 1 15 1142 1 15 1143 1 15 1144 1 15 1145 1 15 1146 1 15 1147 1 15 1148 1 15 1149 1 15 1150 1 15 1151 1 15 1152 1 15 1153 1 15 1154 1 15 1155 1 15 1156 1 15 1157 1 15 1158 1 15 1159 1 15 1160 1 15 1161 1 15 1162 1 15 1163 1 15 1164 1 15 1165 1 15 1166 1 15 1167 1 15 1168 1 15 1169 1 15 1170 1 15 1171 1 15 1172 1 15 1173 1 15 1174 1 15 1175 1 15 1176 1 15 1177 1 15 1178 1 15 1179 1 15 1180 1 15 1181 1 15 1182 1 15 1183 1 15 1184 1 15 1185 1 15 1186 1 15 1187 1 15 1188 1 15 1189 1 15 1190 1 15 1191 1 15 1192 1 15 1193 1 15 1194 1 15 1195 1 15 1196 1 15 1197 1 15 1198 1 16 1 1 16 9 1 16 10 1 16 11 1 16 12 1 16 13 1 16 14 1 16 15 1 16 37 1 16 38 1 16 39 1 16 40 1 16 41 1 16 42 1 16 43 1 16 65 1 16 66 1 16 67 1 16 68 1 16 69 1 16 70 1 16 71 1 16 72 1 16 73 1 16 74 1 16 75 1 16 76 1 16 77 1 16 78 1 16 79 1 16 80 1 16 81 1 16 82 1 16 83 1 16 84 1 16 85 1 16 121 1 16 122 1 16 123 1 16 124 1 16 125 1 16 126 1 16 127 1 16 149 1 16 150 1 16 151 1 16 152 1 16 153 1 16 154 1 16 155 1 16 156 1 16 157 1 16 158 1 16 159 1 16 160 1 16 161 1 16 162 1 16 163 1 16 164 1 16 165 1 16 166 1 16 167 1 16 168 1 16 169 1 16 205 1 16 206 1 16 207 1 16 208 1 16 209 1 16 210 1 16 211 1 16 212 1 16 213 1 16 214 1 16 215 1 16 216 1 16 217 1 16 218 1 16 219 1 16 220 1 16 221 1 16 222 1 16 223 1 16 224 1 16 225 1 16 261 1 16 262 1 16 263 1 16 264 1 16 265 1 16 266 1 16 267 1 16 268 1 16 269 1 16 270 1 16 271 1 16 272 1 16 273 1 16 274 1 16 275 1 16 276 1 16 277 1 16 278 1 16 279 1 16 280 1 16 281 1 16 282 1 16 283 1 16 284 1 16 285 1 16 286 1 16 287 1 16 288 1 16 289 1 16 290 1 16 291 1 16 292 1 16 293 1 16 294 1 16 295 1 16 793 1 16 794 1 16 795 1 16 796 1 16 797 1 16 798 1 16 799 1 16 821 1 16 822 1 16 823 1 16 824 1 16 825 1 16 826 1 16 827 1 16 828 1 16 829 1 16 830 1 16 831 1 16 832 1 16 833 1 16 834 1 16 835 1 16 836 1 16 837 1 16 838 1 16 839 1 16 840 1 16 841 1 16 877 1 16 878 1 16 879 1 16 880 1 16 881 1 16 882 1 16 883 1 16 884 1 16 885 1 16 886 1 16 887 1 16 888 1 16 889 1 16 890 1 16 891 1 16 892 1 16 893 1 16 894 1 16 895 1 16 896 1 16 897 1 16 933 1 16 934 1 16 935 1 16 936 1 16 937 1 16 938 1 16 939 1 16 940 1 16 941 1 16 942 1 16 943 1 16 944 1 16 945 1 16 946 1 16 947 1 16 948 1 16 949 1 16 950 1 16 951 1 16 952 1 16 953 1 16 954 1 16 955 1 16 956 1 16 957 1 16 958 1 16 959 1 16 960 1 16 961 1 16 962 1 16 963 1 16 964 1 16 965 1 16 966 1 16 967 1 16 1003 1 16 1004 1 16 1005 1 16 1006 1 16 1007 1 16 1008 1 16 1009 1 16 1010 1 16 1011 1 16 1012 1 16 1013 1 16 1014 1 16 1015 1 16 1016 1 16 1017 1 16 1018 1 16 1019 1 16 1020 1 16 1021 1 16 1022 1 16 1023 1 16 1059 1 16 1060 1 16 1061 1 16 1062 1 16 1063 1 16 1064 1 16 1065 1 16 1066 1 16 1067 1 16 1068 1 16 1069 1 16 1070 1 16 1071 1 16 1072 1 16 1073 1 16 1074 1 16 1075 1 16 1076 1 16 1077 1 16 1078 1 16 1079 1 16 1080 1 16 1081 1 16 1082 1 16 1083 1 16 1084 1 16 1085 1 16 1086 1 16 1087 1 16 1088 1 16 1089 1 16 1090 1 16 1091 1 16 1092 1 16 1093 1 16 1129 1 16 1130 1 16 1131 1 16 1132 1 16 1133 1 16 1134 1 16 1135 1 16 1136 1 16 1137 1 16 1138 1 16 1139 1 16 1140 1 16 1141 1 16 1142 1 16 1143 1 16 1144 1 16 1145 1 16 1146 1 16 1147 1 16 1148 1 16 1149 1 16 1150 1 16 1151 1 16 1152 1 16 1153 1 16 1154 1 16 1155 1 16 1156 1 16 1157 1 16 1158 1 16 1159 1 16 1160 1 16 1161 1 16 1162 1 16 1163 1 16 1199 1 16 1200 1 16 1201 1 16 1202 1 16 1203 1 16 1204 1 16 1205 1 16 1206 1 16 1207 1 16 1208 1 16 1209 1 16 1210 1 16 1211 1 16 1212 1 16 1213 1 16 1214 1 16 1215 1 16 1216 1 16 1217 1 16 1218 1 16 1219 1 16 1220 1 16 1221 1 16 1222 1 16 1223 1 16 1224 1 16 1225 1 16 1226 1 16 1227 1 16 1228 1 16 1229 1 16 1230 1 16 1231 1 16 1232 1 16 1233 1 17 2 1 17 9 1 17 16 1 17 17 1 17 18 1 17 19 1 17 20 1 17 21 1 17 37 1 17 44 1 17 45 1 17 46 1 17 47 1 17 48 1 17 49 1 17 65 1 17 66 1 17 67 1 17 68 1 17 69 1 17 70 1 17 86 1 17 87 1 17 88 1 17 89 1 17 90 1 17 91 1 17 92 1 17 93 1 17 94 1 17 95 1 17 96 1 17 97 1 17 98 1 17 99 1 17 100 1 17 121 1 17 128 1 17 129 1 17 130 1 17 131 1 17 132 1 17 133 1 17 149 1 17 150 1 17 151 1 17 152 1 17 153 1 17 154 1 17 170 1 17 171 1 17 172 1 17 173 1 17 174 1 17 175 1 17 176 1 17 177 1 17 178 1 17 179 1 17 180 1 17 181 1 17 182 1 17 183 1 17 184 1 17 205 1 17 206 1 17 207 1 17 208 1 17 209 1 17 210 1 17 226 1 17 227 1 17 228 1 17 229 1 17 230 1 17 231 1 17 232 1 17 233 1 17 234 1 17 235 1 17 236 1 17 237 1 17 238 1 17 239 1 17 240 1 17 261 1 17 262 1 17 263 1 17 264 1 17 265 1 17 266 1 17 267 1 17 268 1 17 269 1 17 270 1 17 271 1 17 272 1 17 273 1 17 274 1 17 275 1 17 296 1 17 297 1 17 298 1 17 299 1 17 300 1 17 301 1 17 302 1 17 303 1 17 304 1 17 305 1 17 306 1 17 307 1 17 308 1 17 309 1 17 310 1 17 311 1 17 312 1 17 313 1 17 314 1 17 315 1 17 793 1 17 800 1 17 801 1 17 802 1 17 803 1 17 804 1 17 805 1 17 821 1 17 822 1 17 823 1 17 824 1 17 825 1 17 826 1 17 842 1 17 843 1 17 844 1 17 845 1 17 846 1 17 847 1 17 848 1 17 849 1 17 850 1 17 851 1 17 852 1 17 853 1 17 854 1 17 855 1 17 856 1 17 877 1 17 878 1 17 879 1 17 880 1 17 881 1 17 882 1 17 898 1 17 899 1 17 900 1 17 901 1 17 902 1 17 903 1 17 904 1 17 905 1 17 906 1 17 907 1 17 908 1 17 909 1 17 910 1 17 911 1 17 912 1 17 933 1 17 934 1 17 935 1 17 936 1 17 937 1 17 938 1 17 939 1 17 940 1 17 941 1 17 942 1 17 943 1 17 944 1 17 945 1 17 946 1 17 947 1 17 968 1 17 969 1 17 970 1 17 971 1 17 972 1 17 973 1 17 974 1 17 975 1 17 976 1 17 977 1 17 978 1 17 979 1 17 980 1 17 981 1 17 982 1 17 983 1 17 984 1 17 985 1 17 986 1 17 987 1 17 1003 1 17 1004 1 17 1005 1 17 1006 1 17 1007 1 17 1008 1 17 1024 1 17 1025 1 17 1026 1 17 1027 1 17 1028 1 17 1029 1 17 1030 1 17 1031 1 17 1032 1 17 1033 1 17 1034 1 17 1035 1 17 1036 1 17 1037 1 17 1038 1 17 1059 1 17 1060 1 17 1061 1 17 1062 1 17 1063 1 17 1064 1 17 1065 1 17 1066 1 17 1067 1 17 1068 1 17 1069 1 17 1070 1 17 1071 1 17 1072 1 17 1073 1 17 1094 1 17 1095 1 17 1096 1 17 1097 1 17 1098 1 17 1099 1 17 1100 1 17 1101 1 17 1102 1 17 1103 1 17 1104 1 17 1105 1 17 1106 1 17 1107 1 17 1108 1 17 1109 1 17 1110 1 17 1111 1 17 1112 1 17 1113 1 17 1129 1 17 1130 1 17 1131 1 17 1132 1 17 1133 1 17 1134 1 17 1135 1 17 1136 1 17 1137 1 17 1138 1 17 1139 1 17 1140 1 17 1141 1 17 1142 1 17 1143 1 17 1164 1 17 1165 1 17 1166 1 17 1167 1 17 1168 1 17 1169 1 17 1170 1 17 1171 1 17 1172 1 17 1173 1 17 1174 1 17 1175 1 17 1176 1 17 1177 1 17 1178 1 17 1179 1 17 1180 1 17 1181 1 17 1182 1 17 1183 1 17 1199 1 17 1200 1 17 1201 1 17 1202 1 17 1203 1 17 1204 1 17 1205 1 17 1206 1 17 1207 1 17 1208 1 17 1209 1 17 1210 1 17 1211 1 17 1212 1 17 1213 1 17 1214 1 17 1215 1 17 1216 1 17 1217 1 17 1218 1 17 1234 1 17 1235 1 17 1236 1 17 1237 1 17 1238 1 17 1239 1 17 1240 1 17 1241 1 17 1242 1 17 1243 1 17 1244 1 17 1245 1 17 1246 1 17 1247 1 17 1248 1 18 3 1 18 10 1 18 16 1 18 22 1 18 23 1 18 24 1 18 25 1 18 26 1 18 38 1 18 44 1 18 50 1 18 51 1 18 52 1 18 53 1 18 54 1 18 65 1 18 71 1 18 72 1 18 73 1 18 74 1 18 75 1 18 86 1 18 87 1 18 88 1 18 89 1 18 90 1 18 101 1 18 102 1 18 103 1 18 104 1 18 105 1 18 106 1 18 107 1 18 108 1 18 109 1 18 110 1 18 122 1 18 128 1 18 134 1 18 135 1 18 136 1 18 137 1 18 138 1 18 149 1 18 155 1 18 156 1 18 157 1 18 158 1 18 159 1 18 170 1 18 171 1 18 172 1 18 173 1 18 174 1 18 185 1 18 186 1 18 187 1 18 188 1 18 189 1 18 190 1 18 191 1 18 192 1 18 193 1 18 194 1 18 205 1 18 211 1 18 212 1 18 213 1 18 214 1 18 215 1 18 226 1 18 227 1 18 228 1 18 229 1 18 230 1 18 241 1 18 242 1 18 243 1 18 244 1 18 245 1 18 246 1 18 247 1 18 248 1 18 249 1 18 250 1 18 261 1 18 262 1 18 263 1 18 264 1 18 265 1 18 276 1 18 277 1 18 278 1 18 279 1 18 280 1 18 281 1 18 282 1 18 283 1 18 284 1 18 285 1 18 296 1 18 297 1 18 298 1 18 299 1 18 300 1 18 301 1 18 302 1 18 303 1 18 304 1 18 305 1 18 316 1 18 317 1 18 318 1 18 319 1 18 320 1 18 321 1 18 322 1 18 323 1 18 324 1 18 325 1 18 794 1 18 800 1 18 806 1 18 807 1 18 808 1 18 809 1 18 810 1 18 821 1 18 827 1 18 828 1 18 829 1 18 830 1 18 831 1 18 842 1 18 843 1 18 844 1 18 845 1 18 846 1 18 857 1 18 858 1 18 859 1 18 860 1 18 861 1 18 862 1 18 863 1 18 864 1 18 865 1 18 866 1 18 877 1 18 883 1 18 884 1 18 885 1 18 886 1 18 887 1 18 898 1 18 899 1 18 900 1 18 901 1 18 902 1 18 913 1 18 914 1 18 915 1 18 916 1 18 917 1 18 918 1 18 919 1 18 920 1 18 921 1 18 922 1 18 933 1 18 934 1 18 935 1 18 936 1 18 937 1 18 948 1 18 949 1 18 950 1 18 951 1 18 952 1 18 953 1 18 954 1 18 955 1 18 956 1 18 957 1 18 968 1 18 969 1 18 970 1 18 971 1 18 972 1 18 973 1 18 974 1 18 975 1 18 976 1 18 977 1 18 988 1 18 989 1 18 990 1 18 991 1 18 992 1 18 993 1 18 994 1 18 995 1 18 996 1 18 997 1 18 1003 1 18 1009 1 18 1010 1 18 1011 1 18 1012 1 18 1013 1 18 1024 1 18 1025 1 18 1026 1 18 1027 1 18 1028 1 18 1039 1 18 1040 1 18 1041 1 18 1042 1 18 1043 1 18 1044 1 18 1045 1 18 1046 1 18 1047 1 18 1048 1 18 1059 1 18 1060 1 18 1061 1 18 1062 1 18 1063 1 18 1074 1 18 1075 1 18 1076 1 18 1077 1 18 1078 1 18 1079 1 18 1080 1 18 1081 1 18 1082 1 18 1083 1 18 1094 1 18 1095 1 18 1096 1 18 1097 1 18 1098 1 18 1099 1 18 1100 1 18 1101 1 18 1102 1 18 1103 1 18 1114 1 18 1115 1 18 1116 1 18 1117 1 18 1118 1 18 1119 1 18 1120 1 18 1121 1 18 1122 1 18 1123 1 18 1129 1 18 1130 1 18 1131 1 18 1132 1 18 1133 1 18 1144 1 18 1145 1 18 1146 1 18 1147 1 18 1148 1 18 1149 1 18 1150 1 18 1151 1 18 1152 1 18 1153 1 18 1164 1 18 1165 1 18 1166 1 18 1167 1 18 1168 1 18 1169 1 18 1170 1 18 1171 1 18 1172 1 18 1173 1 18 1184 1 18 1185 1 18 1186 1 18 1187 1 18 1188 1 18 1189 1 18 1190 1 18 1191 1 18 1192 1 18 1193 1 18 1199 1 18 1200 1 18 1201 1 18 1202 1 18 1203 1 18 1204 1 18 1205 1 18 1206 1 18 1207 1 18 1208 1 18 1219 1 18 1220 1 18 1221 1 18 1222 1 18 1223 1 18 1224 1 18 1225 1 18 1226 1 18 1227 1 18 1228 1 18 1234 1 18 1235 1 18 1236 1 18 1237 1 18 1238 1 18 1239 1 18 1240 1 18 1241 1 18 1242 1 18 1243 1 18 1249 1 18 1250 1 18 1251 1 18 1252 1 18 1253 1 19 4 1 19 11 1 19 17 1 19 22 1 19 27 1 19 28 1 19 29 1 19 30 1 19 39 1 19 45 1 19 50 1 19 55 1 19 56 1 19 57 1 19 58 1 19 66 1 19 71 1 19 76 1 19 77 1 19 78 1 19 79 1 19 86 1 19 91 1 19 92 1 19 93 1 19 94 1 19 101 1 19 102 1 19 103 1 19 104 1 19 111 1 19 112 1 19 113 1 19 114 1 19 115 1 19 116 1 19 123 1 19 129 1 19 134 1 19 139 1 19 140 1 19 141 1 19 142 1 19 150 1 19 155 1 19 160 1 19 161 1 19 162 1 19 163 1 19 170 1 19 175 1 19 176 1 19 177 1 19 178 1 19 185 1 19 186 1 19 187 1 19 188 1 19 195 1 19 196 1 19 197 1 19 198 1 19 199 1 19 200 1 19 206 1 19 211 1 19 216 1 19 217 1 19 218 1 19 219 1 19 226 1 19 231 1 19 232 1 19 233 1 19 234 1 19 241 1 19 242 1 19 243 1 19 244 1 19 251 1 19 252 1 19 253 1 19 254 1 19 255 1 19 256 1 19 261 1 19 266 1 19 267 1 19 268 1 19 269 1 19 276 1 19 277 1 19 278 1 19 279 1 19 286 1 19 287 1 19 288 1 19 289 1 19 290 1 19 291 1 19 296 1 19 297 1 19 298 1 19 299 1 19 306 1 19 307 1 19 308 1 19 309 1 19 310 1 19 311 1 19 316 1 19 317 1 19 318 1 19 319 1 19 320 1 19 321 1 19 326 1 19 327 1 19 328 1 19 329 1 19 795 1 19 801 1 19 806 1 19 811 1 19 812 1 19 813 1 19 814 1 19 822 1 19 827 1 19 832 1 19 833 1 19 834 1 19 835 1 19 842 1 19 847 1 19 848 1 19 849 1 19 850 1 19 857 1 19 858 1 19 859 1 19 860 1 19 867 1 19 868 1 19 869 1 19 870 1 19 871 1 19 872 1 19 878 1 19 883 1 19 888 1 19 889 1 19 890 1 19 891 1 19 898 1 19 903 1 19 904 1 19 905 1 19 906 1 19 913 1 19 914 1 19 915 1 19 916 1 19 923 1 19 924 1 19 925 1 19 926 1 19 927 1 19 928 1 19 933 1 19 938 1 19 939 1 19 940 1 19 941 1 19 948 1 19 949 1 19 950 1 19 951 1 19 958 1 19 959 1 19 960 1 19 961 1 19 962 1 19 963 1 19 968 1 19 969 1 19 970 1 19 971 1 19 978 1 19 979 1 19 980 1 19 981 1 19 982 1 19 983 1 19 988 1 19 989 1 19 990 1 19 991 1 19 992 1 19 993 1 19 998 1 19 999 1 19 1000 1 19 1001 1 19 1004 1 19 1009 1 19 1014 1 19 1015 1 19 1016 1 19 1017 1 19 1024 1 19 1029 1 19 1030 1 19 1031 1 19 1032 1 19 1039 1 19 1040 1 19 1041 1 19 1042 1 19 1049 1 19 1050 1 19 1051 1 19 1052 1 19 1053 1 19 1054 1 19 1059 1 19 1064 1 19 1065 1 19 1066 1 19 1067 1 19 1074 1 19 1075 1 19 1076 1 19 1077 1 19 1084 1 19 1085 1 19 1086 1 19 1087 1 19 1088 1 19 1089 1 19 1094 1 19 1095 1 19 1096 1 19 1097 1 19 1104 1 19 1105 1 19 1106 1 19 1107 1 19 1108 1 19 1109 1 19 1114 1 19 1115 1 19 1116 1 19 1117 1 19 1118 1 19 1119 1 19 1124 1 19 1125 1 19 1126 1 19 1127 1 19 1129 1 19 1134 1 19 1135 1 19 1136 1 19 1137 1 19 1144 1 19 1145 1 19 1146 1 19 1147 1 19 1154 1 19 1155 1 19 1156 1 19 1157 1 19 1158 1 19 1159 1 19 1164 1 19 1165 1 19 1166 1 19 1167 1 19 1174 1 19 1175 1 19 1176 1 19 1177 1 19 1178 1 19 1179 1 19 1184 1 19 1185 1 19 1186 1 19 1187 1 19 1188 1 19 1189 1 19 1194 1 19 1195 1 19 1196 1 19 1197 1 19 1199 1 19 1200 1 19 1201 1 19 1202 1 19 1209 1 19 1210 1 19 1211 1 19 1212 1 19 1213 1 19 1214 1 19 1219 1 19 1220 1 19 1221 1 19 1222 1 19 1223 1 19 1224 1 19 1229 1 19 1230 1 19 1231 1 19 1232 1 19 1234 1 19 1235 1 19 1236 1 19 1237 1 19 1238 1 19 1239 1 19 1244 1 19 1245 1 19 1246 1 19 1247 1 19 1249 1 19 1250 1 19 1251 1 19 1252 1 19 1254 1 20 5 1 20 12 1 20 18 1 20 23 1 20 27 1 20 31 1 20 32 1 20 33 1 20 40 1 20 46 1 20 51 1 20 55 1 20 59 1 20 60 1 20 61 1 20 67 1 20 72 1 20 76 1 20 80 1 20 81 1 20 82 1 20 87 1 20 91 1 20 95 1 20 96 1 20 97 1 20 101 1 20 105 1 20 106 1 20 107 1 20 111 1 20 112 1 20 113 1 20 117 1 20 118 1 20 119 1 20 124 1 20 130 1 20 135 1 20 139 1 20 143 1 20 144 1 20 145 1 20 151 1 20 156 1 20 160 1 20 164 1 20 165 1 20 166 1 20 171 1 20 175 1 20 179 1 20 180 1 20 181 1 20 185 1 20 189 1 20 190 1 20 191 1 20 195 1 20 196 1 20 197 1 20 201 1 20 202 1 20 203 1 20 207 1 20 212 1 20 216 1 20 220 1 20 221 1 20 222 1 20 227 1 20 231 1 20 235 1 20 236 1 20 237 1 20 241 1 20 245 1 20 246 1 20 247 1 20 251 1 20 252 1 20 253 1 20 257 1 20 258 1 20 259 1 20 262 1 20 266 1 20 270 1 20 271 1 20 272 1 20 276 1 20 280 1 20 281 1 20 282 1 20 286 1 20 287 1 20 288 1 20 292 1 20 293 1 20 294 1 20 296 1 20 300 1 20 301 1 20 302 1 20 306 1 20 307 1 20 308 1 20 312 1 20 313 1 20 314 1 20 316 1 20 317 1 20 318 1 20 322 1 20 323 1 20 324 1 20 326 1 20 327 1 20 328 1 20 330 1 20 796 1 20 802 1 20 807 1 20 811 1 20 815 1 20 816 1 20 817 1 20 823 1 20 828 1 20 832 1 20 836 1 20 837 1 20 838 1 20 843 1 20 847 1 20 851 1 20 852 1 20 853 1 20 857 1 20 861 1 20 862 1 20 863 1 20 867 1 20 868 1 20 869 1 20 873 1 20 874 1 20 875 1 20 879 1 20 884 1 20 888 1 20 892 1 20 893 1 20 894 1 20 899 1 20 903 1 20 907 1 20 908 1 20 909 1 20 913 1 20 917 1 20 918 1 20 919 1 20 923 1 20 924 1 20 925 1 20 929 1 20 930 1 20 931 1 20 934 1 20 938 1 20 942 1 20 943 1 20 944 1 20 948 1 20 952 1 20 953 1 20 954 1 20 958 1 20 959 1 20 960 1 20 964 1 20 965 1 20 966 1 20 968 1 20 972 1 20 973 1 20 974 1 20 978 1 20 979 1 20 980 1 20 984 1 20 985 1 20 986 1 20 988 1 20 989 1 20 990 1 20 994 1 20 995 1 20 996 1 20 998 1 20 999 1 20 1000 1 20 1002 1 20 1005 1 20 1010 1 20 1014 1 20 1018 1 20 1019 1 20 1020 1 20 1025 1 20 1029 1 20 1033 1 20 1034 1 20 1035 1 20 1039 1 20 1043 1 20 1044 1 20 1045 1 20 1049 1 20 1050 1 20 1051 1 20 1055 1 20 1056 1 20 1057 1 20 1060 1 20 1064 1 20 1068 1 20 1069 1 20 1070 1 20 1074 1 20 1078 1 20 1079 1 20 1080 1 20 1084 1 20 1085 1 20 1086 1 20 1090 1 20 1091 1 20 1092 1 20 1094 1 20 1098 1 20 1099 1 20 1100 1 20 1104 1 20 1105 1 20 1106 1 20 1110 1 20 1111 1 20 1112 1 20 1114 1 20 1115 1 20 1116 1 20 1120 1 20 1121 1 20 1122 1 20 1124 1 20 1125 1 20 1126 1 20 1128 1 20 1130 1 20 1134 1 20 1138 1 20 1139 1 20 1140 1 20 1144 1 20 1148 1 20 1149 1 20 1150 1 20 1154 1 20 1155 1 20 1156 1 20 1160 1 20 1161 1 20 1162 1 20 1164 1 20 1168 1 20 1169 1 20 1170 1 20 1174 1 20 1175 1 20 1176 1 20 1180 1 20 1181 1 20 1182 1 20 1184 1 20 1185 1 20 1186 1 20 1190 1 20 1191 1 20 1192 1 20 1194 1 20 1195 1 20 1196 1 20 1198 1 20 1199 1 20 1203 1 20 1204 1 20 1205 1 20 1209 1 20 1210 1 20 1211 1 20 1215 1 20 1216 1 20 1217 1 20 1219 1 20 1220 1 20 1221 1 20 1225 1 20 1226 1 20 1227 1 20 1229 1 20 1230 1 20 1231 1 20 1233 1 20 1234 1 20 1235 1 20 1236 1 20 1240 1 20 1241 1 20 1242 1 20 1244 1 20 1245 1 20 1246 1 20 1248 1 20 1249 1 20 1250 1 20 1251 1 20 1253 1 20 1254 1 21 6 1 21 13 1 21 19 1 21 24 1 21 28 1 21 31 1 21 34 1 21 35 1 21 41 1 21 47 1 21 52 1 21 56 1 21 59 1 21 62 1 21 63 1 21 68 1 21 73 1 21 77 1 21 80 1 21 83 1 21 84 1 21 88 1 21 92 1 21 95 1 21 98 1 21 99 1 21 102 1 21 105 1 21 108 1 21 109 1 21 111 1 21 114 1 21 115 1 21 117 1 21 118 1 21 120 1 21 125 1 21 131 1 21 136 1 21 140 1 21 143 1 21 146 1 21 147 1 21 152 1 21 157 1 21 161 1 21 164 1 21 167 1 21 168 1 21 172 1 21 176 1 21 179 1 21 182 1 21 183 1 21 186 1 21 189 1 21 192 1 21 193 1 21 195 1 21 198 1 21 199 1 21 201 1 21 202 1 21 204 1 21 208 1 21 213 1 21 217 1 21 220 1 21 223 1 21 224 1 21 228 1 21 232 1 21 235 1 21 238 1 21 239 1 21 242 1 21 245 1 21 248 1 21 249 1 21 251 1 21 254 1 21 255 1 21 257 1 21 258 1 21 260 1 21 263 1 21 267 1 21 270 1 21 273 1 21 274 1 21 277 1 21 280 1 21 283 1 21 284 1 21 286 1 21 289 1 21 290 1 21 292 1 21 293 1 21 295 1 21 297 1 21 300 1 21 303 1 21 304 1 21 306 1 21 309 1 21 310 1 21 312 1 21 313 1 21 315 1 21 316 1 21 319 1 21 320 1 21 322 1 21 323 1 21 325 1 21 326 1 21 327 1 21 329 1 21 330 1 21 797 1 21 803 1 21 808 1 21 812 1 21 815 1 21 818 1 21 819 1 21 824 1 21 829 1 21 833 1 21 836 1 21 839 1 21 840 1 21 844 1 21 848 1 21 851 1 21 854 1 21 855 1 21 858 1 21 861 1 21 864 1 21 865 1 21 867 1 21 870 1 21 871 1 21 873 1 21 874 1 21 876 1 21 880 1 21 885 1 21 889 1 21 892 1 21 895 1 21 896 1 21 900 1 21 904 1 21 907 1 21 910 1 21 911 1 21 914 1 21 917 1 21 920 1 21 921 1 21 923 1 21 926 1 21 927 1 21 929 1 21 930 1 21 932 1 21 935 1 21 939 1 21 942 1 21 945 1 21 946 1 21 949 1 21 952 1 21 955 1 21 956 1 21 958 1 21 961 1 21 962 1 21 964 1 21 965 1 21 967 1 21 969 1 21 972 1 21 975 1 21 976 1 21 978 1 21 981 1 21 982 1 21 984 1 21 985 1 21 987 1 21 988 1 21 991 1 21 992 1 21 994 1 21 995 1 21 997 1 21 998 1 21 999 1 21 1001 1 21 1002 1 21 1006 1 21 1011 1 21 1015 1 21 1018 1 21 1021 1 21 1022 1 21 1026 1 21 1030 1 21 1033 1 21 1036 1 21 1037 1 21 1040 1 21 1043 1 21 1046 1 21 1047 1 21 1049 1 21 1052 1 21 1053 1 21 1055 1 21 1056 1 21 1058 1 21 1061 1 21 1065 1 21 1068 1 21 1071 1 21 1072 1 21 1075 1 21 1078 1 21 1081 1 21 1082 1 21 1084 1 21 1087 1 21 1088 1 21 1090 1 21 1091 1 21 1093 1 21 1095 1 21 1098 1 21 1101 1 21 1102 1 21 1104 1 21 1107 1 21 1108 1 21 1110 1 21 1111 1 21 1113 1 21 1114 1 21 1117 1 21 1118 1 21 1120 1 21 1121 1 21 1123 1 21 1124 1 21 1125 1 21 1127 1 21 1128 1 21 1131 1 21 1135 1 21 1138 1 21 1141 1 21 1142 1 21 1145 1 21 1148 1 21 1151 1 21 1152 1 21 1154 1 21 1157 1 21 1158 1 21 1160 1 21 1161 1 21 1163 1 21 1165 1 21 1168 1 21 1171 1 21 1172 1 21 1174 1 21 1177 1 21 1178 1 21 1180 1 21 1181 1 21 1183 1 21 1184 1 21 1187 1 21 1188 1 21 1190 1 21 1191 1 21 1193 1 21 1194 1 21 1195 1 21 1197 1 21 1198 1 21 1200 1 21 1203 1 21 1206 1 21 1207 1 21 1209 1 21 1212 1 21 1213 1 21 1215 1 21 1216 1 21 1218 1 21 1219 1 21 1222 1 21 1223 1 21 1225 1 21 1226 1 21 1228 1 21 1229 1 21 1230 1 21 1232 1 21 1233 1 21 1234 1 21 1237 1 21 1238 1 21 1240 1 21 1241 1 21 1243 1 21 1244 1 21 1245 1 21 1247 1 21 1248 1 21 1249 1 21 1250 1 21 1252 1 21 1253 1 21 1254 1 22 7 1 22 14 1 22 20 1 22 25 1 22 29 1 22 32 1 22 34 1 22 36 1 22 42 1 22 48 1 22 53 1 22 57 1 22 60 1 22 62 1 22 64 1 22 69 1 22 74 1 22 78 1 22 81 1 22 83 1 22 85 1 22 89 1 22 93 1 22 96 1 22 98 1 22 100 1 22 103 1 22 106 1 22 108 1 22 110 1 22 112 1 22 114 1 22 116 1 22 117 1 22 119 1 22 120 1 22 126 1 22 132 1 22 137 1 22 141 1 22 144 1 22 146 1 22 148 1 22 153 1 22 158 1 22 162 1 22 165 1 22 167 1 22 169 1 22 173 1 22 177 1 22 180 1 22 182 1 22 184 1 22 187 1 22 190 1 22 192 1 22 194 1 22 196 1 22 198 1 22 200 1 22 201 1 22 203 1 22 204 1 22 209 1 22 214 1 22 218 1 22 221 1 22 223 1 22 225 1 22 229 1 22 233 1 22 236 1 22 238 1 22 240 1 22 243 1 22 246 1 22 248 1 22 250 1 22 252 1 22 254 1 22 256 1 22 257 1 22 259 1 22 260 1 22 264 1 22 268 1 22 271 1 22 273 1 22 275 1 22 278 1 22 281 1 22 283 1 22 285 1 22 287 1 22 289 1 22 291 1 22 292 1 22 294 1 22 295 1 22 298 1 22 301 1 22 303 1 22 305 1 22 307 1 22 309 1 22 311 1 22 312 1 22 314 1 22 315 1 22 317 1 22 319 1 22 321 1 22 322 1 22 324 1 22 325 1 22 326 1 22 328 1 22 329 1 22 330 1 22 798 1 22 804 1 22 809 1 22 813 1 22 816 1 22 818 1 22 820 1 22 825 1 22 830 1 22 834 1 22 837 1 22 839 1 22 841 1 22 845 1 22 849 1 22 852 1 22 854 1 22 856 1 22 859 1 22 862 1 22 864 1 22 866 1 22 868 1 22 870 1 22 872 1 22 873 1 22 875 1 22 876 1 22 881 1 22 886 1 22 890 1 22 893 1 22 895 1 22 897 1 22 901 1 22 905 1 22 908 1 22 910 1 22 912 1 22 915 1 22 918 1 22 920 1 22 922 1 22 924 1 22 926 1 22 928 1 22 929 1 22 931 1 22 932 1 22 936 1 22 940 1 22 943 1 22 945 1 22 947 1 22 950 1 22 953 1 22 955 1 22 957 1 22 959 1 22 961 1 22 963 1 22 964 1 22 966 1 22 967 1 22 970 1 22 973 1 22 975 1 22 977 1 22 979 1 22 981 1 22 983 1 22 984 1 22 986 1 22 987 1 22 989 1 22 991 1 22 993 1 22 994 1 22 996 1 22 997 1 22 998 1 22 1000 1 22 1001 1 22 1002 1 22 1007 1 22 1012 1 22 1016 1 22 1019 1 22 1021 1 22 1023 1 22 1027 1 22 1031 1 22 1034 1 22 1036 1 22 1038 1 22 1041 1 22 1044 1 22 1046 1 22 1048 1 22 1050 1 22 1052 1 22 1054 1 22 1055 1 22 1057 1 22 1058 1 22 1062 1 22 1066 1 22 1069 1 22 1071 1 22 1073 1 22 1076 1 22 1079 1 22 1081 1 22 1083 1 22 1085 1 22 1087 1 22 1089 1 22 1090 1 22 1092 1 22 1093 1 22 1096 1 22 1099 1 22 1101 1 22 1103 1 22 1105 1 22 1107 1 22 1109 1 22 1110 1 22 1112 1 22 1113 1 22 1115 1 22 1117 1 22 1119 1 22 1120 1 22 1122 1 22 1123 1 22 1124 1 22 1126 1 22 1127 1 22 1128 1 22 1132 1 22 1136 1 22 1139 1 22 1141 1 22 1143 1 22 1146 1 22 1149 1 22 1151 1 22 1153 1 22 1155 1 22 1157 1 22 1159 1 22 1160 1 22 1162 1 22 1163 1 22 1166 1 22 1169 1 22 1171 1 22 1173 1 22 1175 1 22 1177 1 22 1179 1 22 1180 1 22 1182 1 22 1183 1 22 1185 1 22 1187 1 22 1189 1 22 1190 1 22 1192 1 22 1193 1 22 1194 1 22 1196 1 22 1197 1 22 1198 1 22 1201 1 22 1204 1 22 1206 1 22 1208 1 22 1210 1 22 1212 1 22 1214 1 22 1215 1 22 1217 1 22 1218 1 22 1220 1 22 1222 1 22 1224 1 22 1225 1 22 1227 1 22 1228 1 22 1229 1 22 1231 1 22 1232 1 22 1233 1 22 1235 1 22 1237 1 22 1239 1 22 1240 1 22 1242 1 22 1243 1 22 1244 1 22 1246 1 22 1247 1 22 1248 1 22 1249 1 22 1251 1 22 1252 1 22 1253 1 22 1254 1 23 8 1 23 15 1 23 21 1 23 26 1 23 30 1 23 33 1 23 35 1 23 36 1 23 43 1 23 49 1 23 54 1 23 58 1 23 61 1 23 63 1 23 64 1 23 70 1 23 75 1 23 79 1 23 82 1 23 84 1 23 85 1 23 90 1 23 94 1 23 97 1 23 99 1 23 100 1 23 104 1 23 107 1 23 109 1 23 110 1 23 113 1 23 115 1 23 116 1 23 118 1 23 119 1 23 120 1 23 127 1 23 133 1 23 138 1 23 142 1 23 145 1 23 147 1 23 148 1 23 154 1 23 159 1 23 163 1 23 166 1 23 168 1 23 169 1 23 174 1 23 178 1 23 181 1 23 183 1 23 184 1 23 188 1 23 191 1 23 193 1 23 194 1 23 197 1 23 199 1 23 200 1 23 202 1 23 203 1 23 204 1 23 210 1 23 215 1 23 219 1 23 222 1 23 224 1 23 225 1 23 230 1 23 234 1 23 237 1 23 239 1 23 240 1 23 244 1 23 247 1 23 249 1 23 250 1 23 253 1 23 255 1 23 256 1 23 258 1 23 259 1 23 260 1 23 265 1 23 269 1 23 272 1 23 274 1 23 275 1 23 279 1 23 282 1 23 284 1 23 285 1 23 288 1 23 290 1 23 291 1 23 293 1 23 294 1 23 295 1 23 299 1 23 302 1 23 304 1 23 305 1 23 308 1 23 310 1 23 311 1 23 313 1 23 314 1 23 315 1 23 318 1 23 320 1 23 321 1 23 323 1 23 324 1 23 325 1 23 327 1 23 328 1 23 329 1 23 330 1 23 799 1 23 805 1 23 810 1 23 814 1 23 817 1 23 819 1 23 820 1 23 826 1 23 831 1 23 835 1 23 838 1 23 840 1 23 841 1 23 846 1 23 850 1 23 853 1 23 855 1 23 856 1 23 860 1 23 863 1 23 865 1 23 866 1 23 869 1 23 871 1 23 872 1 23 874 1 23 875 1 23 876 1 23 882 1 23 887 1 23 891 1 23 894 1 23 896 1 23 897 1 23 902 1 23 906 1 23 909 1 23 911 1 23 912 1 23 916 1 23 919 1 23 921 1 23 922 1 23 925 1 23 927 1 23 928 1 23 930 1 23 931 1 23 932 1 23 937 1 23 941 1 23 944 1 23 946 1 23 947 1 23 951 1 23 954 1 23 956 1 23 957 1 23 960 1 23 962 1 23 963 1 23 965 1 23 966 1 23 967 1 23 971 1 23 974 1 23 976 1 23 977 1 23 980 1 23 982 1 23 983 1 23 985 1 23 986 1 23 987 1 23 990 1 23 992 1 23 993 1 23 995 1 23 996 1 23 997 1 23 999 1 23 1000 1 23 1001 1 23 1002 1 23 1008 1 23 1013 1 23 1017 1 23 1020 1 23 1022 1 23 1023 1 23 1028 1 23 1032 1 23 1035 1 23 1037 1 23 1038 1 23 1042 1 23 1045 1 23 1047 1 23 1048 1 23 1051 1 23 1053 1 23 1054 1 23 1056 1 23 1057 1 23 1058 1 23 1063 1 23 1067 1 23 1070 1 23 1072 1 23 1073 1 23 1077 1 23 1080 1 23 1082 1 23 1083 1 23 1086 1 23 1088 1 23 1089 1 23 1091 1 23 1092 1 23 1093 1 23 1097 1 23 1100 1 23 1102 1 23 1103 1 23 1106 1 23 1108 1 23 1109 1 23 1111 1 23 1112 1 23 1113 1 23 1116 1 23 1118 1 23 1119 1 23 1121 1 23 1122 1 23 1123 1 23 1125 1 23 1126 1 23 1127 1 23 1128 1 23 1133 1 23 1137 1 23 1140 1 23 1142 1 23 1143 1 23 1147 1 23 1150 1 23 1152 1 23 1153 1 23 1156 1 23 1158 1 23 1159 1 23 1161 1 23 1162 1 23 1163 1 23 1167 1 23 1170 1 23 1172 1 23 1173 1 23 1176 1 23 1178 1 23 1179 1 23 1181 1 23 1182 1 23 1183 1 23 1186 1 23 1188 1 23 1189 1 23 1191 1 23 1192 1 23 1193 1 23 1195 1 23 1196 1 23 1197 1 23 1198 1 23 1202 1 23 1205 1 23 1207 1 23 1208 1 23 1211 1 23 1213 1 23 1214 1 23 1216 1 23 1217 1 23 1218 1 23 1221 1 23 1223 1 23 1224 1 23 1226 1 23 1227 1 23 1228 1 23 1230 1 23 1231 1 23 1232 1 23 1233 1 23 1236 1 23 1238 1 23 1239 1 23 1241 1 23 1242 1 23 1243 1 23 1245 1 23 1246 1 23 1247 1 23 1248 1 23 1250 1 23 1251 1 23 1252 1 23 1253 1 23 1254 1 24 1 1 24 2 1 24 3 1 24 4 1 24 5 1 24 6 1 24 7 1 24 8 1 24 9 1 24 10 1 24 11 1 24 12 1 24 13 1 24 14 1 24 15 1 24 16 1 24 17 1 24 18 1 24 19 1 24 20 1 24 21 1 24 22 1 24 23 1 24 24 1 24 25 1 24 26 1 24 27 1 24 28 1 24 29 1 24 30 1 24 31 1 24 32 1 24 33 1 24 34 1 24 35 1 24 36 1 24 331 1 24 332 1 24 333 1 24 334 1 24 335 1 24 336 1 24 337 1 24 338 1 24 339 1 24 340 1 24 341 1 24 342 1 24 343 1 24 344 1 24 345 1 24 346 1 24 347 1 24 348 1 24 349 1 24 350 1 24 351 1 24 352 1 24 353 1 24 354 1 24 355 1 24 356 1 24 357 1 24 358 1 24 359 1 24 360 1 24 361 1 24 362 1 24 363 1 24 364 1 24 365 1 24 366 1 24 367 1 24 368 1 24 369 1 24 370 1 24 371 1 24 372 1 24 373 1 24 374 1 24 375 1 24 376 1 24 377 1 24 378 1 24 379 1 24 380 1 24 381 1 24 382 1 24 383 1 24 384 1 24 385 1 24 386 1 24 387 1 24 388 1 24 389 1 24 390 1 24 391 1 24 392 1 24 393 1 24 394 1 24 395 1 24 396 1 24 397 1 24 398 1 24 399 1 24 400 1 24 401 1 24 402 1 24 403 1 24 404 1 24 405 1 24 406 1 24 407 1 24 408 1 24 409 1 24 410 1 24 411 1 24 412 1 24 413 1 24 414 1 24 793 1 24 794 1 24 795 1 24 796 1 24 797 1 24 798 1 24 799 1 24 800 1 24 801 1 24 802 1 24 803 1 24 804 1 24 805 1 24 806 1 24 807 1 24 808 1 24 809 1 24 810 1 24 811 1 24 812 1 24 813 1 24 814 1 24 815 1 24 816 1 24 817 1 24 818 1 24 819 1 24 820 1 24 821 1 24 822 1 24 823 1 24 824 1 24 825 1 24 826 1 24 827 1 24 828 1 24 829 1 24 830 1 24 831 1 24 832 1 24 833 1 24 834 1 24 835 1 24 836 1 24 837 1 24 838 1 24 839 1 24 840 1 24 841 1 24 842 1 24 843 1 24 844 1 24 845 1 24 846 1 24 847 1 24 848 1 24 849 1 24 850 1 24 851 1 24 852 1 24 853 1 24 854 1 24 855 1 24 856 1 24 857 1 24 858 1 24 859 1 24 860 1 24 861 1 24 862 1 24 863 1 24 864 1 24 865 1 24 866 1 24 867 1 24 868 1 24 869 1 24 870 1 24 871 1 24 872 1 24 873 1 24 874 1 24 875 1 24 876 1 24 1255 1 24 1256 1 24 1257 1 24 1258 1 24 1259 1 24 1260 1 24 1261 1 24 1262 1 24 1263 1 24 1264 1 24 1265 1 24 1266 1 24 1267 1 24 1268 1 24 1269 1 24 1270 1 24 1271 1 24 1272 1 24 1273 1 24 1274 1 24 1275 1 24 1276 1 24 1277 1 24 1278 1 24 1279 1 24 1280 1 24 1281 1 24 1282 1 24 1283 1 24 1284 1 24 1285 1 24 1286 1 24 1287 1 24 1288 1 24 1289 1 24 1290 1 24 1291 1 24 1292 1 24 1293 1 24 1294 1 24 1295 1 24 1296 1 24 1297 1 24 1298 1 24 1299 1 24 1300 1 24 1301 1 24 1302 1 24 1303 1 24 1304 1 24 1305 1 24 1306 1 24 1307 1 24 1308 1 24 1309 1 24 1310 1 24 1311 1 24 1312 1 24 1313 1 24 1314 1 24 1315 1 24 1316 1 24 1317 1 24 1318 1 24 1319 1 24 1320 1 24 1321 1 24 1322 1 24 1323 1 24 1324 1 24 1325 1 24 1326 1 24 1327 1 24 1328 1 24 1329 1 24 1330 1 24 1331 1 24 1332 1 24 1333 1 24 1334 1 24 1335 1 24 1336 1 24 1337 1 24 1338 1 24 1339 1 24 1340 1 24 1341 1 24 1342 1 24 1343 1 24 1344 1 24 1345 1 24 1346 1 24 1347 1 24 1348 1 24 1349 1 24 1350 1 24 1351 1 24 1352 1 24 1353 1 24 1354 1 24 1355 1 24 1356 1 24 1357 1 24 1358 1 24 1359 1 24 1360 1 24 1361 1 24 1362 1 24 1363 1 24 1364 1 24 1365 1 24 1366 1 24 1367 1 24 1368 1 24 1369 1 24 1370 1 24 1371 1 24 1372 1 24 1373 1 24 1374 1 24 1375 1 24 1376 1 24 1377 1 24 1378 1 24 1379 1 24 1380 1 25 1 1 25 2 1 25 3 1 25 4 1 25 5 1 25 6 1 25 7 1 25 8 1 25 37 1 25 38 1 25 39 1 25 40 1 25 41 1 25 42 1 25 43 1 25 44 1 25 45 1 25 46 1 25 47 1 25 48 1 25 49 1 25 50 1 25 51 1 25 52 1 25 53 1 25 54 1 25 55 1 25 56 1 25 57 1 25 58 1 25 59 1 25 60 1 25 61 1 25 62 1 25 63 1 25 64 1 25 331 1 25 332 1 25 333 1 25 334 1 25 335 1 25 336 1 25 337 1 25 338 1 25 339 1 25 340 1 25 341 1 25 342 1 25 343 1 25 344 1 25 345 1 25 346 1 25 347 1 25 348 1 25 349 1 25 350 1 25 351 1 25 352 1 25 353 1 25 354 1 25 355 1 25 356 1 25 357 1 25 358 1 25 415 1 25 416 1 25 417 1 25 418 1 25 419 1 25 420 1 25 421 1 25 422 1 25 423 1 25 424 1 25 425 1 25 426 1 25 427 1 25 428 1 25 429 1 25 430 1 25 431 1 25 432 1 25 433 1 25 434 1 25 435 1 25 436 1 25 437 1 25 438 1 25 439 1 25 440 1 25 441 1 25 442 1 25 443 1 25 444 1 25 445 1 25 446 1 25 447 1 25 448 1 25 449 1 25 450 1 25 451 1 25 452 1 25 453 1 25 454 1 25 455 1 25 456 1 25 457 1 25 458 1 25 459 1 25 460 1 25 461 1 25 462 1 25 463 1 25 464 1 25 465 1 25 466 1 25 467 1 25 468 1 25 469 1 25 470 1 25 793 1 25 794 1 25 795 1 25 796 1 25 797 1 25 798 1 25 799 1 25 800 1 25 801 1 25 802 1 25 803 1 25 804 1 25 805 1 25 806 1 25 807 1 25 808 1 25 809 1 25 810 1 25 811 1 25 812 1 25 813 1 25 814 1 25 815 1 25 816 1 25 817 1 25 818 1 25 819 1 25 820 1 25 877 1 25 878 1 25 879 1 25 880 1 25 881 1 25 882 1 25 883 1 25 884 1 25 885 1 25 886 1 25 887 1 25 888 1 25 889 1 25 890 1 25 891 1 25 892 1 25 893 1 25 894 1 25 895 1 25 896 1 25 897 1 25 898 1 25 899 1 25 900 1 25 901 1 25 902 1 25 903 1 25 904 1 25 905 1 25 906 1 25 907 1 25 908 1 25 909 1 25 910 1 25 911 1 25 912 1 25 913 1 25 914 1 25 915 1 25 916 1 25 917 1 25 918 1 25 919 1 25 920 1 25 921 1 25 922 1 25 923 1 25 924 1 25 925 1 25 926 1 25 927 1 25 928 1 25 929 1 25 930 1 25 931 1 25 932 1 25 1255 1 25 1256 1 25 1257 1 25 1258 1 25 1259 1 25 1260 1 25 1261 1 25 1262 1 25 1263 1 25 1264 1 25 1265 1 25 1266 1 25 1267 1 25 1268 1 25 1269 1 25 1270 1 25 1271 1 25 1272 1 25 1273 1 25 1274 1 25 1275 1 25 1276 1 25 1277 1 25 1278 1 25 1279 1 25 1280 1 25 1281 1 25 1282 1 25 1283 1 25 1284 1 25 1285 1 25 1286 1 25 1287 1 25 1288 1 25 1289 1 25 1290 1 25 1291 1 25 1292 1 25 1293 1 25 1294 1 25 1295 1 25 1296 1 25 1297 1 25 1298 1 25 1299 1 25 1300 1 25 1301 1 25 1302 1 25 1303 1 25 1304 1 25 1305 1 25 1306 1 25 1307 1 25 1308 1 25 1309 1 25 1310 1 25 1381 1 25 1382 1 25 1383 1 25 1384 1 25 1385 1 25 1386 1 25 1387 1 25 1388 1 25 1389 1 25 1390 1 25 1391 1 25 1392 1 25 1393 1 25 1394 1 25 1395 1 25 1396 1 25 1397 1 25 1398 1 25 1399 1 25 1400 1 25 1401 1 25 1402 1 25 1403 1 25 1404 1 25 1405 1 25 1406 1 25 1407 1 25 1408 1 25 1409 1 25 1410 1 25 1411 1 25 1412 1 25 1413 1 25 1414 1 25 1415 1 25 1416 1 25 1417 1 25 1418 1 25 1419 1 25 1420 1 25 1421 1 25 1422 1 25 1423 1 25 1424 1 25 1425 1 25 1426 1 25 1427 1 25 1428 1 25 1429 1 25 1430 1 25 1431 1 25 1432 1 25 1433 1 25 1434 1 25 1435 1 25 1436 1 25 1437 1 25 1438 1 25 1439 1 25 1440 1 25 1441 1 25 1442 1 25 1443 1 25 1444 1 25 1445 1 25 1446 1 25 1447 1 25 1448 1 25 1449 1 25 1450 1 26 1 1 26 9 1 26 10 1 26 11 1 26 12 1 26 13 1 26 14 1 26 15 1 26 37 1 26 38 1 26 39 1 26 40 1 26 41 1 26 42 1 26 43 1 26 65 1 26 66 1 26 67 1 26 68 1 26 69 1 26 70 1 26 71 1 26 72 1 26 73 1 26 74 1 26 75 1 26 76 1 26 77 1 26 78 1 26 79 1 26 80 1 26 81 1 26 82 1 26 83 1 26 84 1 26 85 1 26 331 1 26 332 1 26 333 1 26 334 1 26 335 1 26 336 1 26 337 1 26 359 1 26 360 1 26 361 1 26 362 1 26 363 1 26 364 1 26 365 1 26 366 1 26 367 1 26 368 1 26 369 1 26 370 1 26 371 1 26 372 1 26 373 1 26 374 1 26 375 1 26 376 1 26 377 1 26 378 1 26 379 1 26 415 1 26 416 1 26 417 1 26 418 1 26 419 1 26 420 1 26 421 1 26 422 1 26 423 1 26 424 1 26 425 1 26 426 1 26 427 1 26 428 1 26 429 1 26 430 1 26 431 1 26 432 1 26 433 1 26 434 1 26 435 1 26 471 1 26 472 1 26 473 1 26 474 1 26 475 1 26 476 1 26 477 1 26 478 1 26 479 1 26 480 1 26 481 1 26 482 1 26 483 1 26 484 1 26 485 1 26 486 1 26 487 1 26 488 1 26 489 1 26 490 1 26 491 1 26 492 1 26 493 1 26 494 1 26 495 1 26 496 1 26 497 1 26 498 1 26 499 1 26 500 1 26 501 1 26 502 1 26 503 1 26 504 1 26 505 1 26 793 1 26 794 1 26 795 1 26 796 1 26 797 1 26 798 1 26 799 1 26 821 1 26 822 1 26 823 1 26 824 1 26 825 1 26 826 1 26 827 1 26 828 1 26 829 1 26 830 1 26 831 1 26 832 1 26 833 1 26 834 1 26 835 1 26 836 1 26 837 1 26 838 1 26 839 1 26 840 1 26 841 1 26 877 1 26 878 1 26 879 1 26 880 1 26 881 1 26 882 1 26 883 1 26 884 1 26 885 1 26 886 1 26 887 1 26 888 1 26 889 1 26 890 1 26 891 1 26 892 1 26 893 1 26 894 1 26 895 1 26 896 1 26 897 1 26 933 1 26 934 1 26 935 1 26 936 1 26 937 1 26 938 1 26 939 1 26 940 1 26 941 1 26 942 1 26 943 1 26 944 1 26 945 1 26 946 1 26 947 1 26 948 1 26 949 1 26 950 1 26 951 1 26 952 1 26 953 1 26 954 1 26 955 1 26 956 1 26 957 1 26 958 1 26 959 1 26 960 1 26 961 1 26 962 1 26 963 1 26 964 1 26 965 1 26 966 1 26 967 1 26 1255 1 26 1256 1 26 1257 1 26 1258 1 26 1259 1 26 1260 1 26 1261 1 26 1262 1 26 1263 1 26 1264 1 26 1265 1 26 1266 1 26 1267 1 26 1268 1 26 1269 1 26 1270 1 26 1271 1 26 1272 1 26 1273 1 26 1274 1 26 1275 1 26 1311 1 26 1312 1 26 1313 1 26 1314 1 26 1315 1 26 1316 1 26 1317 1 26 1318 1 26 1319 1 26 1320 1 26 1321 1 26 1322 1 26 1323 1 26 1324 1 26 1325 1 26 1326 1 26 1327 1 26 1328 1 26 1329 1 26 1330 1 26 1331 1 26 1332 1 26 1333 1 26 1334 1 26 1335 1 26 1336 1 26 1337 1 26 1338 1 26 1339 1 26 1340 1 26 1341 1 26 1342 1 26 1343 1 26 1344 1 26 1345 1 26 1381 1 26 1382 1 26 1383 1 26 1384 1 26 1385 1 26 1386 1 26 1387 1 26 1388 1 26 1389 1 26 1390 1 26 1391 1 26 1392 1 26 1393 1 26 1394 1 26 1395 1 26 1396 1 26 1397 1 26 1398 1 26 1399 1 26 1400 1 26 1401 1 26 1402 1 26 1403 1 26 1404 1 26 1405 1 26 1406 1 26 1407 1 26 1408 1 26 1409 1 26 1410 1 26 1411 1 26 1412 1 26 1413 1 26 1414 1 26 1415 1 26 1451 1 26 1452 1 26 1453 1 26 1454 1 26 1455 1 26 1456 1 26 1457 1 26 1458 1 26 1459 1 26 1460 1 26 1461 1 26 1462 1 26 1463 1 26 1464 1 26 1465 1 26 1466 1 26 1467 1 26 1468 1 26 1469 1 26 1470 1 26 1471 1 26 1472 1 26 1473 1 26 1474 1 26 1475 1 26 1476 1 26 1477 1 26 1478 1 26 1479 1 26 1480 1 26 1481 1 26 1482 1 26 1483 1 26 1484 1 26 1485 1 27 2 1 27 9 1 27 16 1 27 17 1 27 18 1 27 19 1 27 20 1 27 21 1 27 37 1 27 44 1 27 45 1 27 46 1 27 47 1 27 48 1 27 49 1 27 65 1 27 66 1 27 67 1 27 68 1 27 69 1 27 70 1 27 86 1 27 87 1 27 88 1 27 89 1 27 90 1 27 91 1 27 92 1 27 93 1 27 94 1 27 95 1 27 96 1 27 97 1 27 98 1 27 99 1 27 100 1 27 331 1 27 338 1 27 339 1 27 340 1 27 341 1 27 342 1 27 343 1 27 359 1 27 360 1 27 361 1 27 362 1 27 363 1 27 364 1 27 380 1 27 381 1 27 382 1 27 383 1 27 384 1 27 385 1 27 386 1 27 387 1 27 388 1 27 389 1 27 390 1 27 391 1 27 392 1 27 393 1 27 394 1 27 415 1 27 416 1 27 417 1 27 418 1 27 419 1 27 420 1 27 436 1 27 437 1 27 438 1 27 439 1 27 440 1 27 441 1 27 442 1 27 443 1 27 444 1 27 445 1 27 446 1 27 447 1 27 448 1 27 449 1 27 450 1 27 471 1 27 472 1 27 473 1 27 474 1 27 475 1 27 476 1 27 477 1 27 478 1 27 479 1 27 480 1 27 481 1 27 482 1 27 483 1 27 484 1 27 485 1 27 506 1 27 507 1 27 508 1 27 509 1 27 510 1 27 511 1 27 512 1 27 513 1 27 514 1 27 515 1 27 516 1 27 517 1 27 518 1 27 519 1 27 520 1 27 521 1 27 522 1 27 523 1 27 524 1 27 525 1 27 793 1 27 800 1 27 801 1 27 802 1 27 803 1 27 804 1 27 805 1 27 821 1 27 822 1 27 823 1 27 824 1 27 825 1 27 826 1 27 842 1 27 843 1 27 844 1 27 845 1 27 846 1 27 847 1 27 848 1 27 849 1 27 850 1 27 851 1 27 852 1 27 853 1 27 854 1 27 855 1 27 856 1 27 877 1 27 878 1 27 879 1 27 880 1 27 881 1 27 882 1 27 898 1 27 899 1 27 900 1 27 901 1 27 902 1 27 903 1 27 904 1 27 905 1 27 906 1 27 907 1 27 908 1 27 909 1 27 910 1 27 911 1 27 912 1 27 933 1 27 934 1 27 935 1 27 936 1 27 937 1 27 938 1 27 939 1 27 940 1 27 941 1 27 942 1 27 943 1 27 944 1 27 945 1 27 946 1 27 947 1 27 968 1 27 969 1 27 970 1 27 971 1 27 972 1 27 973 1 27 974 1 27 975 1 27 976 1 27 977 1 27 978 1 27 979 1 27 980 1 27 981 1 27 982 1 27 983 1 27 984 1 27 985 1 27 986 1 27 987 1 27 1255 1 27 1256 1 27 1257 1 27 1258 1 27 1259 1 27 1260 1 27 1276 1 27 1277 1 27 1278 1 27 1279 1 27 1280 1 27 1281 1 27 1282 1 27 1283 1 27 1284 1 27 1285 1 27 1286 1 27 1287 1 27 1288 1 27 1289 1 27 1290 1 27 1311 1 27 1312 1 27 1313 1 27 1314 1 27 1315 1 27 1316 1 27 1317 1 27 1318 1 27 1319 1 27 1320 1 27 1321 1 27 1322 1 27 1323 1 27 1324 1 27 1325 1 27 1346 1 27 1347 1 27 1348 1 27 1349 1 27 1350 1 27 1351 1 27 1352 1 27 1353 1 27 1354 1 27 1355 1 27 1356 1 27 1357 1 27 1358 1 27 1359 1 27 1360 1 27 1361 1 27 1362 1 27 1363 1 27 1364 1 27 1365 1 27 1381 1 27 1382 1 27 1383 1 27 1384 1 27 1385 1 27 1386 1 27 1387 1 27 1388 1 27 1389 1 27 1390 1 27 1391 1 27 1392 1 27 1393 1 27 1394 1 27 1395 1 27 1416 1 27 1417 1 27 1418 1 27 1419 1 27 1420 1 27 1421 1 27 1422 1 27 1423 1 27 1424 1 27 1425 1 27 1426 1 27 1427 1 27 1428 1 27 1429 1 27 1430 1 27 1431 1 27 1432 1 27 1433 1 27 1434 1 27 1435 1 27 1451 1 27 1452 1 27 1453 1 27 1454 1 27 1455 1 27 1456 1 27 1457 1 27 1458 1 27 1459 1 27 1460 1 27 1461 1 27 1462 1 27 1463 1 27 1464 1 27 1465 1 27 1466 1 27 1467 1 27 1468 1 27 1469 1 27 1470 1 27 1486 1 27 1487 1 27 1488 1 27 1489 1 27 1490 1 27 1491 1 27 1492 1 27 1493 1 27 1494 1 27 1495 1 27 1496 1 27 1497 1 27 1498 1 27 1499 1 27 1500 1 28 3 1 28 10 1 28 16 1 28 22 1 28 23 1 28 24 1 28 25 1 28 26 1 28 38 1 28 44 1 28 50 1 28 51 1 28 52 1 28 53 1 28 54 1 28 65 1 28 71 1 28 72 1 28 73 1 28 74 1 28 75 1 28 86 1 28 87 1 28 88 1 28 89 1 28 90 1 28 101 1 28 102 1 28 103 1 28 104 1 28 105 1 28 106 1 28 107 1 28 108 1 28 109 1 28 110 1 28 332 1 28 338 1 28 344 1 28 345 1 28 346 1 28 347 1 28 348 1 28 359 1 28 365 1 28 366 1 28 367 1 28 368 1 28 369 1 28 380 1 28 381 1 28 382 1 28 383 1 28 384 1 28 395 1 28 396 1 28 397 1 28 398 1 28 399 1 28 400 1 28 401 1 28 402 1 28 403 1 28 404 1 28 415 1 28 421 1 28 422 1 28 423 1 28 424 1 28 425 1 28 436 1 28 437 1 28 438 1 28 439 1 28 440 1 28 451 1 28 452 1 28 453 1 28 454 1 28 455 1 28 456 1 28 457 1 28 458 1 28 459 1 28 460 1 28 471 1 28 472 1 28 473 1 28 474 1 28 475 1 28 486 1 28 487 1 28 488 1 28 489 1 28 490 1 28 491 1 28 492 1 28 493 1 28 494 1 28 495 1 28 506 1 28 507 1 28 508 1 28 509 1 28 510 1 28 511 1 28 512 1 28 513 1 28 514 1 28 515 1 28 526 1 28 527 1 28 528 1 28 529 1 28 530 1 28 531 1 28 532 1 28 533 1 28 534 1 28 535 1 28 794 1 28 800 1 28 806 1 28 807 1 28 808 1 28 809 1 28 810 1 28 821 1 28 827 1 28 828 1 28 829 1 28 830 1 28 831 1 28 842 1 28 843 1 28 844 1 28 845 1 28 846 1 28 857 1 28 858 1 28 859 1 28 860 1 28 861 1 28 862 1 28 863 1 28 864 1 28 865 1 28 866 1 28 877 1 28 883 1 28 884 1 28 885 1 28 886 1 28 887 1 28 898 1 28 899 1 28 900 1 28 901 1 28 902 1 28 913 1 28 914 1 28 915 1 28 916 1 28 917 1 28 918 1 28 919 1 28 920 1 28 921 1 28 922 1 28 933 1 28 934 1 28 935 1 28 936 1 28 937 1 28 948 1 28 949 1 28 950 1 28 951 1 28 952 1 28 953 1 28 954 1 28 955 1 28 956 1 28 957 1 28 968 1 28 969 1 28 970 1 28 971 1 28 972 1 28 973 1 28 974 1 28 975 1 28 976 1 28 977 1 28 988 1 28 989 1 28 990 1 28 991 1 28 992 1 28 993 1 28 994 1 28 995 1 28 996 1 28 997 1 28 1255 1 28 1261 1 28 1262 1 28 1263 1 28 1264 1 28 1265 1 28 1276 1 28 1277 1 28 1278 1 28 1279 1 28 1280 1 28 1291 1 28 1292 1 28 1293 1 28 1294 1 28 1295 1 28 1296 1 28 1297 1 28 1298 1 28 1299 1 28 1300 1 28 1311 1 28 1312 1 28 1313 1 28 1314 1 28 1315 1 28 1326 1 28 1327 1 28 1328 1 28 1329 1 28 1330 1 28 1331 1 28 1332 1 28 1333 1 28 1334 1 28 1335 1 28 1346 1 28 1347 1 28 1348 1 28 1349 1 28 1350 1 28 1351 1 28 1352 1 28 1353 1 28 1354 1 28 1355 1 28 1366 1 28 1367 1 28 1368 1 28 1369 1 28 1370 1 28 1371 1 28 1372 1 28 1373 1 28 1374 1 28 1375 1 28 1381 1 28 1382 1 28 1383 1 28 1384 1 28 1385 1 28 1396 1 28 1397 1 28 1398 1 28 1399 1 28 1400 1 28 1401 1 28 1402 1 28 1403 1 28 1404 1 28 1405 1 28 1416 1 28 1417 1 28 1418 1 28 1419 1 28 1420 1 28 1421 1 28 1422 1 28 1423 1 28 1424 1 28 1425 1 28 1436 1 28 1437 1 28 1438 1 28 1439 1 28 1440 1 28 1441 1 28 1442 1 28 1443 1 28 1444 1 28 1445 1 28 1451 1 28 1452 1 28 1453 1 28 1454 1 28 1455 1 28 1456 1 28 1457 1 28 1458 1 28 1459 1 28 1460 1 28 1471 1 28 1472 1 28 1473 1 28 1474 1 28 1475 1 28 1476 1 28 1477 1 28 1478 1 28 1479 1 28 1480 1 28 1486 1 28 1487 1 28 1488 1 28 1489 1 28 1490 1 28 1491 1 28 1492 1 28 1493 1 28 1494 1 28 1495 1 28 1501 1 28 1502 1 28 1503 1 28 1504 1 28 1505 1 29 4 1 29 11 1 29 17 1 29 22 1 29 27 1 29 28 1 29 29 1 29 30 1 29 39 1 29 45 1 29 50 1 29 55 1 29 56 1 29 57 1 29 58 1 29 66 1 29 71 1 29 76 1 29 77 1 29 78 1 29 79 1 29 86 1 29 91 1 29 92 1 29 93 1 29 94 1 29 101 1 29 102 1 29 103 1 29 104 1 29 111 1 29 112 1 29 113 1 29 114 1 29 115 1 29 116 1 29 333 1 29 339 1 29 344 1 29 349 1 29 350 1 29 351 1 29 352 1 29 360 1 29 365 1 29 370 1 29 371 1 29 372 1 29 373 1 29 380 1 29 385 1 29 386 1 29 387 1 29 388 1 29 395 1 29 396 1 29 397 1 29 398 1 29 405 1 29 406 1 29 407 1 29 408 1 29 409 1 29 410 1 29 416 1 29 421 1 29 426 1 29 427 1 29 428 1 29 429 1 29 436 1 29 441 1 29 442 1 29 443 1 29 444 1 29 451 1 29 452 1 29 453 1 29 454 1 29 461 1 29 462 1 29 463 1 29 464 1 29 465 1 29 466 1 29 471 1 29 476 1 29 477 1 29 478 1 29 479 1 29 486 1 29 487 1 29 488 1 29 489 1 29 496 1 29 497 1 29 498 1 29 499 1 29 500 1 29 501 1 29 506 1 29 507 1 29 508 1 29 509 1 29 516 1 29 517 1 29 518 1 29 519 1 29 520 1 29 521 1 29 526 1 29 527 1 29 528 1 29 529 1 29 530 1 29 531 1 29 536 1 29 537 1 29 538 1 29 539 1 29 795 1 29 801 1 29 806 1 29 811 1 29 812 1 29 813 1 29 814 1 29 822 1 29 827 1 29 832 1 29 833 1 29 834 1 29 835 1 29 842 1 29 847 1 29 848 1 29 849 1 29 850 1 29 857 1 29 858 1 29 859 1 29 860 1 29 867 1 29 868 1 29 869 1 29 870 1 29 871 1 29 872 1 29 878 1 29 883 1 29 888 1 29 889 1 29 890 1 29 891 1 29 898 1 29 903 1 29 904 1 29 905 1 29 906 1 29 913 1 29 914 1 29 915 1 29 916 1 29 923 1 29 924 1 29 925 1 29 926 1 29 927 1 29 928 1 29 933 1 29 938 1 29 939 1 29 940 1 29 941 1 29 948 1 29 949 1 29 950 1 29 951 1 29 958 1 29 959 1 29 960 1 29 961 1 29 962 1 29 963 1 29 968 1 29 969 1 29 970 1 29 971 1 29 978 1 29 979 1 29 980 1 29 981 1 29 982 1 29 983 1 29 988 1 29 989 1 29 990 1 29 991 1 29 992 1 29 993 1 29 998 1 29 999 1 29 1000 1 29 1001 1 29 1256 1 29 1261 1 29 1266 1 29 1267 1 29 1268 1 29 1269 1 29 1276 1 29 1281 1 29 1282 1 29 1283 1 29 1284 1 29 1291 1 29 1292 1 29 1293 1 29 1294 1 29 1301 1 29 1302 1 29 1303 1 29 1304 1 29 1305 1 29 1306 1 29 1311 1 29 1316 1 29 1317 1 29 1318 1 29 1319 1 29 1326 1 29 1327 1 29 1328 1 29 1329 1 29 1336 1 29 1337 1 29 1338 1 29 1339 1 29 1340 1 29 1341 1 29 1346 1 29 1347 1 29 1348 1 29 1349 1 29 1356 1 29 1357 1 29 1358 1 29 1359 1 29 1360 1 29 1361 1 29 1366 1 29 1367 1 29 1368 1 29 1369 1 29 1370 1 29 1371 1 29 1376 1 29 1377 1 29 1378 1 29 1379 1 29 1381 1 29 1386 1 29 1387 1 29 1388 1 29 1389 1 29 1396 1 29 1397 1 29 1398 1 29 1399 1 29 1406 1 29 1407 1 29 1408 1 29 1409 1 29 1410 1 29 1411 1 29 1416 1 29 1417 1 29 1418 1 29 1419 1 29 1426 1 29 1427 1 29 1428 1 29 1429 1 29 1430 1 29 1431 1 29 1436 1 29 1437 1 29 1438 1 29 1439 1 29 1440 1 29 1441 1 29 1446 1 29 1447 1 29 1448 1 29 1449 1 29 1451 1 29 1452 1 29 1453 1 29 1454 1 29 1461 1 29 1462 1 29 1463 1 29 1464 1 29 1465 1 29 1466 1 29 1471 1 29 1472 1 29 1473 1 29 1474 1 29 1475 1 29 1476 1 29 1481 1 29 1482 1 29 1483 1 29 1484 1 29 1486 1 29 1487 1 29 1488 1 29 1489 1 29 1490 1 29 1491 1 29 1496 1 29 1497 1 29 1498 1 29 1499 1 29 1501 1 29 1502 1 29 1503 1 29 1504 1 29 1506 1 30 5 1 30 12 1 30 18 1 30 23 1 30 27 1 30 31 1 30 32 1 30 33 1 30 40 1 30 46 1 30 51 1 30 55 1 30 59 1 30 60 1 30 61 1 30 67 1 30 72 1 30 76 1 30 80 1 30 81 1 30 82 1 30 87 1 30 91 1 30 95 1 30 96 1 30 97 1 30 101 1 30 105 1 30 106 1 30 107 1 30 111 1 30 112 1 30 113 1 30 117 1 30 118 1 30 119 1 30 334 1 30 340 1 30 345 1 30 349 1 30 353 1 30 354 1 30 355 1 30 361 1 30 366 1 30 370 1 30 374 1 30 375 1 30 376 1 30 381 1 30 385 1 30 389 1 30 390 1 30 391 1 30 395 1 30 399 1 30 400 1 30 401 1 30 405 1 30 406 1 30 407 1 30 411 1 30 412 1 30 413 1 30 417 1 30 422 1 30 426 1 30 430 1 30 431 1 30 432 1 30 437 1 30 441 1 30 445 1 30 446 1 30 447 1 30 451 1 30 455 1 30 456 1 30 457 1 30 461 1 30 462 1 30 463 1 30 467 1 30 468 1 30 469 1 30 472 1 30 476 1 30 480 1 30 481 1 30 482 1 30 486 1 30 490 1 30 491 1 30 492 1 30 496 1 30 497 1 30 498 1 30 502 1 30 503 1 30 504 1 30 506 1 30 510 1 30 511 1 30 512 1 30 516 1 30 517 1 30 518 1 30 522 1 30 523 1 30 524 1 30 526 1 30 527 1 30 528 1 30 532 1 30 533 1 30 534 1 30 536 1 30 537 1 30 538 1 30 540 1 30 796 1 30 802 1 30 807 1 30 811 1 30 815 1 30 816 1 30 817 1 30 823 1 30 828 1 30 832 1 30 836 1 30 837 1 30 838 1 30 843 1 30 847 1 30 851 1 30 852 1 30 853 1 30 857 1 30 861 1 30 862 1 30 863 1 30 867 1 30 868 1 30 869 1 30 873 1 30 874 1 30 875 1 30 879 1 30 884 1 30 888 1 30 892 1 30 893 1 30 894 1 30 899 1 30 903 1 30 907 1 30 908 1 30 909 1 30 913 1 30 917 1 30 918 1 30 919 1 30 923 1 30 924 1 30 925 1 30 929 1 30 930 1 30 931 1 30 934 1 30 938 1 30 942 1 30 943 1 30 944 1 30 948 1 30 952 1 30 953 1 30 954 1 30 958 1 30 959 1 30 960 1 30 964 1 30 965 1 30 966 1 30 968 1 30 972 1 30 973 1 30 974 1 30 978 1 30 979 1 30 980 1 30 984 1 30 985 1 30 986 1 30 988 1 30 989 1 30 990 1 30 994 1 30 995 1 30 996 1 30 998 1 30 999 1 30 1000 1 30 1002 1 30 1257 1 30 1262 1 30 1266 1 30 1270 1 30 1271 1 30 1272 1 30 1277 1 30 1281 1 30 1285 1 30 1286 1 30 1287 1 30 1291 1 30 1295 1 30 1296 1 30 1297 1 30 1301 1 30 1302 1 30 1303 1 30 1307 1 30 1308 1 30 1309 1 30 1312 1 30 1316 1 30 1320 1 30 1321 1 30 1322 1 30 1326 1 30 1330 1 30 1331 1 30 1332 1 30 1336 1 30 1337 1 30 1338 1 30 1342 1 30 1343 1 30 1344 1 30 1346 1 30 1350 1 30 1351 1 30 1352 1 30 1356 1 30 1357 1 30 1358 1 30 1362 1 30 1363 1 30 1364 1 30 1366 1 30 1367 1 30 1368 1 30 1372 1 30 1373 1 30 1374 1 30 1376 1 30 1377 1 30 1378 1 30 1380 1 30 1382 1 30 1386 1 30 1390 1 30 1391 1 30 1392 1 30 1396 1 30 1400 1 30 1401 1 30 1402 1 30 1406 1 30 1407 1 30 1408 1 30 1412 1 30 1413 1 30 1414 1 30 1416 1 30 1420 1 30 1421 1 30 1422 1 30 1426 1 30 1427 1 30 1428 1 30 1432 1 30 1433 1 30 1434 1 30 1436 1 30 1437 1 30 1438 1 30 1442 1 30 1443 1 30 1444 1 30 1446 1 30 1447 1 30 1448 1 30 1450 1 30 1451 1 30 1455 1 30 1456 1 30 1457 1 30 1461 1 30 1462 1 30 1463 1 30 1467 1 30 1468 1 30 1469 1 30 1471 1 30 1472 1 30 1473 1 30 1477 1 30 1478 1 30 1479 1 30 1481 1 30 1482 1 30 1483 1 30 1485 1 30 1486 1 30 1487 1 30 1488 1 30 1492 1 30 1493 1 30 1494 1 30 1496 1 30 1497 1 30 1498 1 30 1500 1 30 1501 1 30 1502 1 30 1503 1 30 1505 1 30 1506 1 31 6 1 31 13 1 31 19 1 31 24 1 31 28 1 31 31 1 31 34 1 31 35 1 31 41 1 31 47 1 31 52 1 31 56 1 31 59 1 31 62 1 31 63 1 31 68 1 31 73 1 31 77 1 31 80 1 31 83 1 31 84 1 31 88 1 31 92 1 31 95 1 31 98 1 31 99 1 31 102 1 31 105 1 31 108 1 31 109 1 31 111 1 31 114 1 31 115 1 31 117 1 31 118 1 31 120 1 31 335 1 31 341 1 31 346 1 31 350 1 31 353 1 31 356 1 31 357 1 31 362 1 31 367 1 31 371 1 31 374 1 31 377 1 31 378 1 31 382 1 31 386 1 31 389 1 31 392 1 31 393 1 31 396 1 31 399 1 31 402 1 31 403 1 31 405 1 31 408 1 31 409 1 31 411 1 31 412 1 31 414 1 31 418 1 31 423 1 31 427 1 31 430 1 31 433 1 31 434 1 31 438 1 31 442 1 31 445 1 31 448 1 31 449 1 31 452 1 31 455 1 31 458 1 31 459 1 31 461 1 31 464 1 31 465 1 31 467 1 31 468 1 31 470 1 31 473 1 31 477 1 31 480 1 31 483 1 31 484 1 31 487 1 31 490 1 31 493 1 31 494 1 31 496 1 31 499 1 31 500 1 31 502 1 31 503 1 31 505 1 31 507 1 31 510 1 31 513 1 31 514 1 31 516 1 31 519 1 31 520 1 31 522 1 31 523 1 31 525 1 31 526 1 31 529 1 31 530 1 31 532 1 31 533 1 31 535 1 31 536 1 31 537 1 31 539 1 31 540 1 31 797 1 31 803 1 31 808 1 31 812 1 31 815 1 31 818 1 31 819 1 31 824 1 31 829 1 31 833 1 31 836 1 31 839 1 31 840 1 31 844 1 31 848 1 31 851 1 31 854 1 31 855 1 31 858 1 31 861 1 31 864 1 31 865 1 31 867 1 31 870 1 31 871 1 31 873 1 31 874 1 31 876 1 31 880 1 31 885 1 31 889 1 31 892 1 31 895 1 31 896 1 31 900 1 31 904 1 31 907 1 31 910 1 31 911 1 31 914 1 31 917 1 31 920 1 31 921 1 31 923 1 31 926 1 31 927 1 31 929 1 31 930 1 31 932 1 31 935 1 31 939 1 31 942 1 31 945 1 31 946 1 31 949 1 31 952 1 31 955 1 31 956 1 31 958 1 31 961 1 31 962 1 31 964 1 31 965 1 31 967 1 31 969 1 31 972 1 31 975 1 31 976 1 31 978 1 31 981 1 31 982 1 31 984 1 31 985 1 31 987 1 31 988 1 31 991 1 31 992 1 31 994 1 31 995 1 31 997 1 31 998 1 31 999 1 31 1001 1 31 1002 1 31 1258 1 31 1263 1 31 1267 1 31 1270 1 31 1273 1 31 1274 1 31 1278 1 31 1282 1 31 1285 1 31 1288 1 31 1289 1 31 1292 1 31 1295 1 31 1298 1 31 1299 1 31 1301 1 31 1304 1 31 1305 1 31 1307 1 31 1308 1 31 1310 1 31 1313 1 31 1317 1 31 1320 1 31 1323 1 31 1324 1 31 1327 1 31 1330 1 31 1333 1 31 1334 1 31 1336 1 31 1339 1 31 1340 1 31 1342 1 31 1343 1 31 1345 1 31 1347 1 31 1350 1 31 1353 1 31 1354 1 31 1356 1 31 1359 1 31 1360 1 31 1362 1 31 1363 1 31 1365 1 31 1366 1 31 1369 1 31 1370 1 31 1372 1 31 1373 1 31 1375 1 31 1376 1 31 1377 1 31 1379 1 31 1380 1 31 1383 1 31 1387 1 31 1390 1 31 1393 1 31 1394 1 31 1397 1 31 1400 1 31 1403 1 31 1404 1 31 1406 1 31 1409 1 31 1410 1 31 1412 1 31 1413 1 31 1415 1 31 1417 1 31 1420 1 31 1423 1 31 1424 1 31 1426 1 31 1429 1 31 1430 1 31 1432 1 31 1433 1 31 1435 1 31 1436 1 31 1439 1 31 1440 1 31 1442 1 31 1443 1 31 1445 1 31 1446 1 31 1447 1 31 1449 1 31 1450 1 31 1452 1 31 1455 1 31 1458 1 31 1459 1 31 1461 1 31 1464 1 31 1465 1 31 1467 1 31 1468 1 31 1470 1 31 1471 1 31 1474 1 31 1475 1 31 1477 1 31 1478 1 31 1480 1 31 1481 1 31 1482 1 31 1484 1 31 1485 1 31 1486 1 31 1489 1 31 1490 1 31 1492 1 31 1493 1 31 1495 1 31 1496 1 31 1497 1 31 1499 1 31 1500 1 31 1501 1 31 1502 1 31 1504 1 31 1505 1 31 1506 1 32 7 1 32 14 1 32 20 1 32 25 1 32 29 1 32 32 1 32 34 1 32 36 1 32 42 1 32 48 1 32 53 1 32 57 1 32 60 1 32 62 1 32 64 1 32 69 1 32 74 1 32 78 1 32 81 1 32 83 1 32 85 1 32 89 1 32 93 1 32 96 1 32 98 1 32 100 1 32 103 1 32 106 1 32 108 1 32 110 1 32 112 1 32 114 1 32 116 1 32 117 1 32 119 1 32 120 1 32 336 1 32 342 1 32 347 1 32 351 1 32 354 1 32 356 1 32 358 1 32 363 1 32 368 1 32 372 1 32 375 1 32 377 1 32 379 1 32 383 1 32 387 1 32 390 1 32 392 1 32 394 1 32 397 1 32 400 1 32 402 1 32 404 1 32 406 1 32 408 1 32 410 1 32 411 1 32 413 1 32 414 1 32 419 1 32 424 1 32 428 1 32 431 1 32 433 1 32 435 1 32 439 1 32 443 1 32 446 1 32 448 1 32 450 1 32 453 1 32 456 1 32 458 1 32 460 1 32 462 1 32 464 1 32 466 1 32 467 1 32 469 1 32 470 1 32 474 1 32 478 1 32 481 1 32 483 1 32 485 1 32 488 1 32 491 1 32 493 1 32 495 1 32 497 1 32 499 1 32 501 1 32 502 1 32 504 1 32 505 1 32 508 1 32 511 1 32 513 1 32 515 1 32 517 1 32 519 1 32 521 1 32 522 1 32 524 1 32 525 1 32 527 1 32 529 1 32 531 1 32 532 1 32 534 1 32 535 1 32 536 1 32 538 1 32 539 1 32 540 1 32 798 1 32 804 1 32 809 1 32 813 1 32 816 1 32 818 1 32 820 1 32 825 1 32 830 1 32 834 1 32 837 1 32 839 1 32 841 1 32 845 1 32 849 1 32 852 1 32 854 1 32 856 1 32 859 1 32 862 1 32 864 1 32 866 1 32 868 1 32 870 1 32 872 1 32 873 1 32 875 1 32 876 1 32 881 1 32 886 1 32 890 1 32 893 1 32 895 1 32 897 1 32 901 1 32 905 1 32 908 1 32 910 1 32 912 1 32 915 1 32 918 1 32 920 1 32 922 1 32 924 1 32 926 1 32 928 1 32 929 1 32 931 1 32 932 1 32 936 1 32 940 1 32 943 1 32 945 1 32 947 1 32 950 1 32 953 1 32 955 1 32 957 1 32 959 1 32 961 1 32 963 1 32 964 1 32 966 1 32 967 1 32 970 1 32 973 1 32 975 1 32 977 1 32 979 1 32 981 1 32 983 1 32 984 1 32 986 1 32 987 1 32 989 1 32 991 1 32 993 1 32 994 1 32 996 1 32 997 1 32 998 1 32 1000 1 32 1001 1 32 1002 1 32 1259 1 32 1264 1 32 1268 1 32 1271 1 32 1273 1 32 1275 1 32 1279 1 32 1283 1 32 1286 1 32 1288 1 32 1290 1 32 1293 1 32 1296 1 32 1298 1 32 1300 1 32 1302 1 32 1304 1 32 1306 1 32 1307 1 32 1309 1 32 1310 1 32 1314 1 32 1318 1 32 1321 1 32 1323 1 32 1325 1 32 1328 1 32 1331 1 32 1333 1 32 1335 1 32 1337 1 32 1339 1 32 1341 1 32 1342 1 32 1344 1 32 1345 1 32 1348 1 32 1351 1 32 1353 1 32 1355 1 32 1357 1 32 1359 1 32 1361 1 32 1362 1 32 1364 1 32 1365 1 32 1367 1 32 1369 1 32 1371 1 32 1372 1 32 1374 1 32 1375 1 32 1376 1 32 1378 1 32 1379 1 32 1380 1 32 1384 1 32 1388 1 32 1391 1 32 1393 1 32 1395 1 32 1398 1 32 1401 1 32 1403 1 32 1405 1 32 1407 1 32 1409 1 32 1411 1 32 1412 1 32 1414 1 32 1415 1 32 1418 1 32 1421 1 32 1423 1 32 1425 1 32 1427 1 32 1429 1 32 1431 1 32 1432 1 32 1434 1 32 1435 1 32 1437 1 32 1439 1 32 1441 1 32 1442 1 32 1444 1 32 1445 1 32 1446 1 32 1448 1 32 1449 1 32 1450 1 32 1453 1 32 1456 1 32 1458 1 32 1460 1 32 1462 1 32 1464 1 32 1466 1 32 1467 1 32 1469 1 32 1470 1 32 1472 1 32 1474 1 32 1476 1 32 1477 1 32 1479 1 32 1480 1 32 1481 1 32 1483 1 32 1484 1 32 1485 1 32 1487 1 32 1489 1 32 1491 1 32 1492 1 32 1494 1 32 1495 1 32 1496 1 32 1498 1 32 1499 1 32 1500 1 32 1501 1 32 1503 1 32 1504 1 32 1505 1 32 1506 1 33 8 1 33 15 1 33 21 1 33 26 1 33 30 1 33 33 1 33 35 1 33 36 1 33 43 1 33 49 1 33 54 1 33 58 1 33 61 1 33 63 1 33 64 1 33 70 1 33 75 1 33 79 1 33 82 1 33 84 1 33 85 1 33 90 1 33 94 1 33 97 1 33 99 1 33 100 1 33 104 1 33 107 1 33 109 1 33 110 1 33 113 1 33 115 1 33 116 1 33 118 1 33 119 1 33 120 1 33 337 1 33 343 1 33 348 1 33 352 1 33 355 1 33 357 1 33 358 1 33 364 1 33 369 1 33 373 1 33 376 1 33 378 1 33 379 1 33 384 1 33 388 1 33 391 1 33 393 1 33 394 1 33 398 1 33 401 1 33 403 1 33 404 1 33 407 1 33 409 1 33 410 1 33 412 1 33 413 1 33 414 1 33 420 1 33 425 1 33 429 1 33 432 1 33 434 1 33 435 1 33 440 1 33 444 1 33 447 1 33 449 1 33 450 1 33 454 1 33 457 1 33 459 1 33 460 1 33 463 1 33 465 1 33 466 1 33 468 1 33 469 1 33 470 1 33 475 1 33 479 1 33 482 1 33 484 1 33 485 1 33 489 1 33 492 1 33 494 1 33 495 1 33 498 1 33 500 1 33 501 1 33 503 1 33 504 1 33 505 1 33 509 1 33 512 1 33 514 1 33 515 1 33 518 1 33 520 1 33 521 1 33 523 1 33 524 1 33 525 1 33 528 1 33 530 1 33 531 1 33 533 1 33 534 1 33 535 1 33 537 1 33 538 1 33 539 1 33 540 1 33 799 1 33 805 1 33 810 1 33 814 1 33 817 1 33 819 1 33 820 1 33 826 1 33 831 1 33 835 1 33 838 1 33 840 1 33 841 1 33 846 1 33 850 1 33 853 1 33 855 1 33 856 1 33 860 1 33 863 1 33 865 1 33 866 1 33 869 1 33 871 1 33 872 1 33 874 1 33 875 1 33 876 1 33 882 1 33 887 1 33 891 1 33 894 1 33 896 1 33 897 1 33 902 1 33 906 1 33 909 1 33 911 1 33 912 1 33 916 1 33 919 1 33 921 1 33 922 1 33 925 1 33 927 1 33 928 1 33 930 1 33 931 1 33 932 1 33 937 1 33 941 1 33 944 1 33 946 1 33 947 1 33 951 1 33 954 1 33 956 1 33 957 1 33 960 1 33 962 1 33 963 1 33 965 1 33 966 1 33 967 1 33 971 1 33 974 1 33 976 1 33 977 1 33 980 1 33 982 1 33 983 1 33 985 1 33 986 1 33 987 1 33 990 1 33 992 1 33 993 1 33 995 1 33 996 1 33 997 1 33 999 1 33 1000 1 33 1001 1 33 1002 1 33 1260 1 33 1265 1 33 1269 1 33 1272 1 33 1274 1 33 1275 1 33 1280 1 33 1284 1 33 1287 1 33 1289 1 33 1290 1 33 1294 1 33 1297 1 33 1299 1 33 1300 1 33 1303 1 33 1305 1 33 1306 1 33 1308 1 33 1309 1 33 1310 1 33 1315 1 33 1319 1 33 1322 1 33 1324 1 33 1325 1 33 1329 1 33 1332 1 33 1334 1 33 1335 1 33 1338 1 33 1340 1 33 1341 1 33 1343 1 33 1344 1 33 1345 1 33 1349 1 33 1352 1 33 1354 1 33 1355 1 33 1358 1 33 1360 1 33 1361 1 33 1363 1 33 1364 1 33 1365 1 33 1368 1 33 1370 1 33 1371 1 33 1373 1 33 1374 1 33 1375 1 33 1377 1 33 1378 1 33 1379 1 33 1380 1 33 1385 1 33 1389 1 33 1392 1 33 1394 1 33 1395 1 33 1399 1 33 1402 1 33 1404 1 33 1405 1 33 1408 1 33 1410 1 33 1411 1 33 1413 1 33 1414 1 33 1415 1 33 1419 1 33 1422 1 33 1424 1 33 1425 1 33 1428 1 33 1430 1 33 1431 1 33 1433 1 33 1434 1 33 1435 1 33 1438 1 33 1440 1 33 1441 1 33 1443 1 33 1444 1 33 1445 1 33 1447 1 33 1448 1 33 1449 1 33 1450 1 33 1454 1 33 1457 1 33 1459 1 33 1460 1 33 1463 1 33 1465 1 33 1466 1 33 1468 1 33 1469 1 33 1470 1 33 1473 1 33 1475 1 33 1476 1 33 1478 1 33 1479 1 33 1480 1 33 1482 1 33 1483 1 33 1484 1 33 1485 1 33 1488 1 33 1490 1 33 1491 1 33 1493 1 33 1494 1 33 1495 1 33 1497 1 33 1498 1 33 1499 1 33 1500 1 33 1502 1 33 1503 1 33 1504 1 33 1505 1 33 1506 1 34 1 1 34 2 1 34 3 1 34 4 1 34 5 1 34 6 1 34 7 1 34 8 1 34 121 1 34 122 1 34 123 1 34 124 1 34 125 1 34 126 1 34 127 1 34 128 1 34 129 1 34 130 1 34 131 1 34 132 1 34 133 1 34 134 1 34 135 1 34 136 1 34 137 1 34 138 1 34 139 1 34 140 1 34 141 1 34 142 1 34 143 1 34 144 1 34 145 1 34 146 1 34 147 1 34 148 1 34 331 1 34 332 1 34 333 1 34 334 1 34 335 1 34 336 1 34 337 1 34 338 1 34 339 1 34 340 1 34 341 1 34 342 1 34 343 1 34 344 1 34 345 1 34 346 1 34 347 1 34 348 1 34 349 1 34 350 1 34 351 1 34 352 1 34 353 1 34 354 1 34 355 1 34 356 1 34 357 1 34 358 1 34 541 1 34 542 1 34 543 1 34 544 1 34 545 1 34 546 1 34 547 1 34 548 1 34 549 1 34 550 1 34 551 1 34 552 1 34 553 1 34 554 1 34 555 1 34 556 1 34 557 1 34 558 1 34 559 1 34 560 1 34 561 1 34 562 1 34 563 1 34 564 1 34 565 1 34 566 1 34 567 1 34 568 1 34 569 1 34 570 1 34 571 1 34 572 1 34 573 1 34 574 1 34 575 1 34 576 1 34 577 1 34 578 1 34 579 1 34 580 1 34 581 1 34 582 1 34 583 1 34 584 1 34 585 1 34 586 1 34 587 1 34 588 1 34 589 1 34 590 1 34 591 1 34 592 1 34 593 1 34 594 1 34 595 1 34 596 1 34 793 1 34 794 1 34 795 1 34 796 1 34 797 1 34 798 1 34 799 1 34 800 1 34 801 1 34 802 1 34 803 1 34 804 1 34 805 1 34 806 1 34 807 1 34 808 1 34 809 1 34 810 1 34 811 1 34 812 1 34 813 1 34 814 1 34 815 1 34 816 1 34 817 1 34 818 1 34 819 1 34 820 1 34 1003 1 34 1004 1 34 1005 1 34 1006 1 34 1007 1 34 1008 1 34 1009 1 34 1010 1 34 1011 1 34 1012 1 34 1013 1 34 1014 1 34 1015 1 34 1016 1 34 1017 1 34 1018 1 34 1019 1 34 1020 1 34 1021 1 34 1022 1 34 1023 1 34 1024 1 34 1025 1 34 1026 1 34 1027 1 34 1028 1 34 1029 1 34 1030 1 34 1031 1 34 1032 1 34 1033 1 34 1034 1 34 1035 1 34 1036 1 34 1037 1 34 1038 1 34 1039 1 34 1040 1 34 1041 1 34 1042 1 34 1043 1 34 1044 1 34 1045 1 34 1046 1 34 1047 1 34 1048 1 34 1049 1 34 1050 1 34 1051 1 34 1052 1 34 1053 1 34 1054 1 34 1055 1 34 1056 1 34 1057 1 34 1058 1 34 1255 1 34 1256 1 34 1257 1 34 1258 1 34 1259 1 34 1260 1 34 1261 1 34 1262 1 34 1263 1 34 1264 1 34 1265 1 34 1266 1 34 1267 1 34 1268 1 34 1269 1 34 1270 1 34 1271 1 34 1272 1 34 1273 1 34 1274 1 34 1275 1 34 1276 1 34 1277 1 34 1278 1 34 1279 1 34 1280 1 34 1281 1 34 1282 1 34 1283 1 34 1284 1 34 1285 1 34 1286 1 34 1287 1 34 1288 1 34 1289 1 34 1290 1 34 1291 1 34 1292 1 34 1293 1 34 1294 1 34 1295 1 34 1296 1 34 1297 1 34 1298 1 34 1299 1 34 1300 1 34 1301 1 34 1302 1 34 1303 1 34 1304 1 34 1305 1 34 1306 1 34 1307 1 34 1308 1 34 1309 1 34 1310 1 34 1507 1 34 1508 1 34 1509 1 34 1510 1 34 1511 1 34 1512 1 34 1513 1 34 1514 1 34 1515 1 34 1516 1 34 1517 1 34 1518 1 34 1519 1 34 1520 1 34 1521 1 34 1522 1 34 1523 1 34 1524 1 34 1525 1 34 1526 1 34 1527 1 34 1528 1 34 1529 1 34 1530 1 34 1531 1 34 1532 1 34 1533 1 34 1534 1 34 1535 1 34 1536 1 34 1537 1 34 1538 1 34 1539 1 34 1540 1 34 1541 1 34 1542 1 34 1543 1 34 1544 1 34 1545 1 34 1546 1 34 1547 1 34 1548 1 34 1549 1 34 1550 1 34 1551 1 34 1552 1 34 1553 1 34 1554 1 34 1555 1 34 1556 1 34 1557 1 34 1558 1 34 1559 1 34 1560 1 34 1561 1 34 1562 1 34 1563 1 34 1564 1 34 1565 1 34 1566 1 34 1567 1 34 1568 1 34 1569 1 34 1570 1 34 1571 1 34 1572 1 34 1573 1 34 1574 1 34 1575 1 34 1576 1 35 1 1 35 9 1 35 10 1 35 11 1 35 12 1 35 13 1 35 14 1 35 15 1 35 121 1 35 122 1 35 123 1 35 124 1 35 125 1 35 126 1 35 127 1 35 149 1 35 150 1 35 151 1 35 152 1 35 153 1 35 154 1 35 155 1 35 156 1 35 157 1 35 158 1 35 159 1 35 160 1 35 161 1 35 162 1 35 163 1 35 164 1 35 165 1 35 166 1 35 167 1 35 168 1 35 169 1 35 331 1 35 332 1 35 333 1 35 334 1 35 335 1 35 336 1 35 337 1 35 359 1 35 360 1 35 361 1 35 362 1 35 363 1 35 364 1 35 365 1 35 366 1 35 367 1 35 368 1 35 369 1 35 370 1 35 371 1 35 372 1 35 373 1 35 374 1 35 375 1 35 376 1 35 377 1 35 378 1 35 379 1 35 541 1 35 542 1 35 543 1 35 544 1 35 545 1 35 546 1 35 547 1 35 548 1 35 549 1 35 550 1 35 551 1 35 552 1 35 553 1 35 554 1 35 555 1 35 556 1 35 557 1 35 558 1 35 559 1 35 560 1 35 561 1 35 597 1 35 598 1 35 599 1 35 600 1 35 601 1 35 602 1 35 603 1 35 604 1 35 605 1 35 606 1 35 607 1 35 608 1 35 609 1 35 610 1 35 611 1 35 612 1 35 613 1 35 614 1 35 615 1 35 616 1 35 617 1 35 618 1 35 619 1 35 620 1 35 621 1 35 622 1 35 623 1 35 624 1 35 625 1 35 626 1 35 627 1 35 628 1 35 629 1 35 630 1 35 631 1 35 793 1 35 794 1 35 795 1 35 796 1 35 797 1 35 798 1 35 799 1 35 821 1 35 822 1 35 823 1 35 824 1 35 825 1 35 826 1 35 827 1 35 828 1 35 829 1 35 830 1 35 831 1 35 832 1 35 833 1 35 834 1 35 835 1 35 836 1 35 837 1 35 838 1 35 839 1 35 840 1 35 841 1 35 1003 1 35 1004 1 35 1005 1 35 1006 1 35 1007 1 35 1008 1 35 1009 1 35 1010 1 35 1011 1 35 1012 1 35 1013 1 35 1014 1 35 1015 1 35 1016 1 35 1017 1 35 1018 1 35 1019 1 35 1020 1 35 1021 1 35 1022 1 35 1023 1 35 1059 1 35 1060 1 35 1061 1 35 1062 1 35 1063 1 35 1064 1 35 1065 1 35 1066 1 35 1067 1 35 1068 1 35 1069 1 35 1070 1 35 1071 1 35 1072 1 35 1073 1 35 1074 1 35 1075 1 35 1076 1 35 1077 1 35 1078 1 35 1079 1 35 1080 1 35 1081 1 35 1082 1 35 1083 1 35 1084 1 35 1085 1 35 1086 1 35 1087 1 35 1088 1 35 1089 1 35 1090 1 35 1091 1 35 1092 1 35 1093 1 35 1255 1 35 1256 1 35 1257 1 35 1258 1 35 1259 1 35 1260 1 35 1261 1 35 1262 1 35 1263 1 35 1264 1 35 1265 1 35 1266 1 35 1267 1 35 1268 1 35 1269 1 35 1270 1 35 1271 1 35 1272 1 35 1273 1 35 1274 1 35 1275 1 35 1311 1 35 1312 1 35 1313 1 35 1314 1 35 1315 1 35 1316 1 35 1317 1 35 1318 1 35 1319 1 35 1320 1 35 1321 1 35 1322 1 35 1323 1 35 1324 1 35 1325 1 35 1326 1 35 1327 1 35 1328 1 35 1329 1 35 1330 1 35 1331 1 35 1332 1 35 1333 1 35 1334 1 35 1335 1 35 1336 1 35 1337 1 35 1338 1 35 1339 1 35 1340 1 35 1341 1 35 1342 1 35 1343 1 35 1344 1 35 1345 1 35 1507 1 35 1508 1 35 1509 1 35 1510 1 35 1511 1 35 1512 1 35 1513 1 35 1514 1 35 1515 1 35 1516 1 35 1517 1 35 1518 1 35 1519 1 35 1520 1 35 1521 1 35 1522 1 35 1523 1 35 1524 1 35 1525 1 35 1526 1 35 1527 1 35 1528 1 35 1529 1 35 1530 1 35 1531 1 35 1532 1 35 1533 1 35 1534 1 35 1535 1 35 1536 1 35 1537 1 35 1538 1 35 1539 1 35 1540 1 35 1541 1 35 1577 1 35 1578 1 35 1579 1 35 1580 1 35 1581 1 35 1582 1 35 1583 1 35 1584 1 35 1585 1 35 1586 1 35 1587 1 35 1588 1 35 1589 1 35 1590 1 35 1591 1 35 1592 1 35 1593 1 35 1594 1 35 1595 1 35 1596 1 35 1597 1 35 1598 1 35 1599 1 35 1600 1 35 1601 1 35 1602 1 35 1603 1 35 1604 1 35 1605 1 35 1606 1 35 1607 1 35 1608 1 35 1609 1 35 1610 1 35 1611 1 36 2 1 36 9 1 36 16 1 36 17 1 36 18 1 36 19 1 36 20 1 36 21 1 36 121 1 36 128 1 36 129 1 36 130 1 36 131 1 36 132 1 36 133 1 36 149 1 36 150 1 36 151 1 36 152 1 36 153 1 36 154 1 36 170 1 36 171 1 36 172 1 36 173 1 36 174 1 36 175 1 36 176 1 36 177 1 36 178 1 36 179 1 36 180 1 36 181 1 36 182 1 36 183 1 36 184 1 36 331 1 36 338 1 36 339 1 36 340 1 36 341 1 36 342 1 36 343 1 36 359 1 36 360 1 36 361 1 36 362 1 36 363 1 36 364 1 36 380 1 36 381 1 36 382 1 36 383 1 36 384 1 36 385 1 36 386 1 36 387 1 36 388 1 36 389 1 36 390 1 36 391 1 36 392 1 36 393 1 36 394 1 36 541 1 36 542 1 36 543 1 36 544 1 36 545 1 36 546 1 36 562 1 36 563 1 36 564 1 36 565 1 36 566 1 36 567 1 36 568 1 36 569 1 36 570 1 36 571 1 36 572 1 36 573 1 36 574 1 36 575 1 36 576 1 36 597 1 36 598 1 36 599 1 36 600 1 36 601 1 36 602 1 36 603 1 36 604 1 36 605 1 36 606 1 36 607 1 36 608 1 36 609 1 36 610 1 36 611 1 36 632 1 36 633 1 36 634 1 36 635 1 36 636 1 36 637 1 36 638 1 36 639 1 36 640 1 36 641 1 36 642 1 36 643 1 36 644 1 36 645 1 36 646 1 36 647 1 36 648 1 36 649 1 36 650 1 36 651 1 36 793 1 36 800 1 36 801 1 36 802 1 36 803 1 36 804 1 36 805 1 36 821 1 36 822 1 36 823 1 36 824 1 36 825 1 36 826 1 36 842 1 36 843 1 36 844 1 36 845 1 36 846 1 36 847 1 36 848 1 36 849 1 36 850 1 36 851 1 36 852 1 36 853 1 36 854 1 36 855 1 36 856 1 36 1003 1 36 1004 1 36 1005 1 36 1006 1 36 1007 1 36 1008 1 36 1024 1 36 1025 1 36 1026 1 36 1027 1 36 1028 1 36 1029 1 36 1030 1 36 1031 1 36 1032 1 36 1033 1 36 1034 1 36 1035 1 36 1036 1 36 1037 1 36 1038 1 36 1059 1 36 1060 1 36 1061 1 36 1062 1 36 1063 1 36 1064 1 36 1065 1 36 1066 1 36 1067 1 36 1068 1 36 1069 1 36 1070 1 36 1071 1 36 1072 1 36 1073 1 36 1094 1 36 1095 1 36 1096 1 36 1097 1 36 1098 1 36 1099 1 36 1100 1 36 1101 1 36 1102 1 36 1103 1 36 1104 1 36 1105 1 36 1106 1 36 1107 1 36 1108 1 36 1109 1 36 1110 1 36 1111 1 36 1112 1 36 1113 1 36 1255 1 36 1256 1 36 1257 1 36 1258 1 36 1259 1 36 1260 1 36 1276 1 36 1277 1 36 1278 1 36 1279 1 36 1280 1 36 1281 1 36 1282 1 36 1283 1 36 1284 1 36 1285 1 36 1286 1 36 1287 1 36 1288 1 36 1289 1 36 1290 1 36 1311 1 36 1312 1 36 1313 1 36 1314 1 36 1315 1 36 1316 1 36 1317 1 36 1318 1 36 1319 1 36 1320 1 36 1321 1 36 1322 1 36 1323 1 36 1324 1 36 1325 1 36 1346 1 36 1347 1 36 1348 1 36 1349 1 36 1350 1 36 1351 1 36 1352 1 36 1353 1 36 1354 1 36 1355 1 36 1356 1 36 1357 1 36 1358 1 36 1359 1 36 1360 1 36 1361 1 36 1362 1 36 1363 1 36 1364 1 36 1365 1 36 1507 1 36 1508 1 36 1509 1 36 1510 1 36 1511 1 36 1512 1 36 1513 1 36 1514 1 36 1515 1 36 1516 1 36 1517 1 36 1518 1 36 1519 1 36 1520 1 36 1521 1 36 1542 1 36 1543 1 36 1544 1 36 1545 1 36 1546 1 36 1547 1 36 1548 1 36 1549 1 36 1550 1 36 1551 1 36 1552 1 36 1553 1 36 1554 1 36 1555 1 36 1556 1 36 1557 1 36 1558 1 36 1559 1 36 1560 1 36 1561 1 36 1577 1 36 1578 1 36 1579 1 36 1580 1 36 1581 1 36 1582 1 36 1583 1 36 1584 1 36 1585 1 36 1586 1 36 1587 1 36 1588 1 36 1589 1 36 1590 1 36 1591 1 36 1592 1 36 1593 1 36 1594 1 36 1595 1 36 1596 1 36 1612 1 36 1613 1 36 1614 1 36 1615 1 36 1616 1 36 1617 1 36 1618 1 36 1619 1 36 1620 1 36 1621 1 36 1622 1 36 1623 1 36 1624 1 36 1625 1 36 1626 1 37 3 1 37 10 1 37 16 1 37 22 1 37 23 1 37 24 1 37 25 1 37 26 1 37 122 1 37 128 1 37 134 1 37 135 1 37 136 1 37 137 1 37 138 1 37 149 1 37 155 1 37 156 1 37 157 1 37 158 1 37 159 1 37 170 1 37 171 1 37 172 1 37 173 1 37 174 1 37 185 1 37 186 1 37 187 1 37 188 1 37 189 1 37 190 1 37 191 1 37 192 1 37 193 1 37 194 1 37 332 1 37 338 1 37 344 1 37 345 1 37 346 1 37 347 1 37 348 1 37 359 1 37 365 1 37 366 1 37 367 1 37 368 1 37 369 1 37 380 1 37 381 1 37 382 1 37 383 1 37 384 1 37 395 1 37 396 1 37 397 1 37 398 1 37 399 1 37 400 1 37 401 1 37 402 1 37 403 1 37 404 1 37 541 1 37 547 1 37 548 1 37 549 1 37 550 1 37 551 1 37 562 1 37 563 1 37 564 1 37 565 1 37 566 1 37 577 1 37 578 1 37 579 1 37 580 1 37 581 1 37 582 1 37 583 1 37 584 1 37 585 1 37 586 1 37 597 1 37 598 1 37 599 1 37 600 1 37 601 1 37 612 1 37 613 1 37 614 1 37 615 1 37 616 1 37 617 1 37 618 1 37 619 1 37 620 1 37 621 1 37 632 1 37 633 1 37 634 1 37 635 1 37 636 1 37 637 1 37 638 1 37 639 1 37 640 1 37 641 1 37 652 1 37 653 1 37 654 1 37 655 1 37 656 1 37 657 1 37 658 1 37 659 1 37 660 1 37 661 1 37 794 1 37 800 1 37 806 1 37 807 1 37 808 1 37 809 1 37 810 1 37 821 1 37 827 1 37 828 1 37 829 1 37 830 1 37 831 1 37 842 1 37 843 1 37 844 1 37 845 1 37 846 1 37 857 1 37 858 1 37 859 1 37 860 1 37 861 1 37 862 1 37 863 1 37 864 1 37 865 1 37 866 1 37 1003 1 37 1009 1 37 1010 1 37 1011 1 37 1012 1 37 1013 1 37 1024 1 37 1025 1 37 1026 1 37 1027 1 37 1028 1 37 1039 1 37 1040 1 37 1041 1 37 1042 1 37 1043 1 37 1044 1 37 1045 1 37 1046 1 37 1047 1 37 1048 1 37 1059 1 37 1060 1 37 1061 1 37 1062 1 37 1063 1 37 1074 1 37 1075 1 37 1076 1 37 1077 1 37 1078 1 37 1079 1 37 1080 1 37 1081 1 37 1082 1 37 1083 1 37 1094 1 37 1095 1 37 1096 1 37 1097 1 37 1098 1 37 1099 1 37 1100 1 37 1101 1 37 1102 1 37 1103 1 37 1114 1 37 1115 1 37 1116 1 37 1117 1 37 1118 1 37 1119 1 37 1120 1 37 1121 1 37 1122 1 37 1123 1 37 1255 1 37 1261 1 37 1262 1 37 1263 1 37 1264 1 37 1265 1 37 1276 1 37 1277 1 37 1278 1 37 1279 1 37 1280 1 37 1291 1 37 1292 1 37 1293 1 37 1294 1 37 1295 1 37 1296 1 37 1297 1 37 1298 1 37 1299 1 37 1300 1 37 1311 1 37 1312 1 37 1313 1 37 1314 1 37 1315 1 37 1326 1 37 1327 1 37 1328 1 37 1329 1 37 1330 1 37 1331 1 37 1332 1 37 1333 1 37 1334 1 37 1335 1 37 1346 1 37 1347 1 37 1348 1 37 1349 1 37 1350 1 37 1351 1 37 1352 1 37 1353 1 37 1354 1 37 1355 1 37 1366 1 37 1367 1 37 1368 1 37 1369 1 37 1370 1 37 1371 1 37 1372 1 37 1373 1 37 1374 1 37 1375 1 37 1507 1 37 1508 1 37 1509 1 37 1510 1 37 1511 1 37 1522 1 37 1523 1 37 1524 1 37 1525 1 37 1526 1 37 1527 1 37 1528 1 37 1529 1 37 1530 1 37 1531 1 37 1542 1 37 1543 1 37 1544 1 37 1545 1 37 1546 1 37 1547 1 37 1548 1 37 1549 1 37 1550 1 37 1551 1 37 1562 1 37 1563 1 37 1564 1 37 1565 1 37 1566 1 37 1567 1 37 1568 1 37 1569 1 37 1570 1 37 1571 1 37 1577 1 37 1578 1 37 1579 1 37 1580 1 37 1581 1 37 1582 1 37 1583 1 37 1584 1 37 1585 1 37 1586 1 37 1597 1 37 1598 1 37 1599 1 37 1600 1 37 1601 1 37 1602 1 37 1603 1 37 1604 1 37 1605 1 37 1606 1 37 1612 1 37 1613 1 37 1614 1 37 1615 1 37 1616 1 37 1617 1 37 1618 1 37 1619 1 37 1620 1 37 1621 1 37 1627 1 37 1628 1 37 1629 1 37 1630 1 37 1631 1 38 4 1 38 11 1 38 17 1 38 22 1 38 27 1 38 28 1 38 29 1 38 30 1 38 123 1 38 129 1 38 134 1 38 139 1 38 140 1 38 141 1 38 142 1 38 150 1 38 155 1 38 160 1 38 161 1 38 162 1 38 163 1 38 170 1 38 175 1 38 176 1 38 177 1 38 178 1 38 185 1 38 186 1 38 187 1 38 188 1 38 195 1 38 196 1 38 197 1 38 198 1 38 199 1 38 200 1 38 333 1 38 339 1 38 344 1 38 349 1 38 350 1 38 351 1 38 352 1 38 360 1 38 365 1 38 370 1 38 371 1 38 372 1 38 373 1 38 380 1 38 385 1 38 386 1 38 387 1 38 388 1 38 395 1 38 396 1 38 397 1 38 398 1 38 405 1 38 406 1 38 407 1 38 408 1 38 409 1 38 410 1 38 542 1 38 547 1 38 552 1 38 553 1 38 554 1 38 555 1 38 562 1 38 567 1 38 568 1 38 569 1 38 570 1 38 577 1 38 578 1 38 579 1 38 580 1 38 587 1 38 588 1 38 589 1 38 590 1 38 591 1 38 592 1 38 597 1 38 602 1 38 603 1 38 604 1 38 605 1 38 612 1 38 613 1 38 614 1 38 615 1 38 622 1 38 623 1 38 624 1 38 625 1 38 626 1 38 627 1 38 632 1 38 633 1 38 634 1 38 635 1 38 642 1 38 643 1 38 644 1 38 645 1 38 646 1 38 647 1 38 652 1 38 653 1 38 654 1 38 655 1 38 656 1 38 657 1 38 662 1 38 663 1 38 664 1 38 665 1 38 795 1 38 801 1 38 806 1 38 811 1 38 812 1 38 813 1 38 814 1 38 822 1 38 827 1 38 832 1 38 833 1 38 834 1 38 835 1 38 842 1 38 847 1 38 848 1 38 849 1 38 850 1 38 857 1 38 858 1 38 859 1 38 860 1 38 867 1 38 868 1 38 869 1 38 870 1 38 871 1 38 872 1 38 1004 1 38 1009 1 38 1014 1 38 1015 1 38 1016 1 38 1017 1 38 1024 1 38 1029 1 38 1030 1 38 1031 1 38 1032 1 38 1039 1 38 1040 1 38 1041 1 38 1042 1 38 1049 1 38 1050 1 38 1051 1 38 1052 1 38 1053 1 38 1054 1 38 1059 1 38 1064 1 38 1065 1 38 1066 1 38 1067 1 38 1074 1 38 1075 1 38 1076 1 38 1077 1 38 1084 1 38 1085 1 38 1086 1 38 1087 1 38 1088 1 38 1089 1 38 1094 1 38 1095 1 38 1096 1 38 1097 1 38 1104 1 38 1105 1 38 1106 1 38 1107 1 38 1108 1 38 1109 1 38 1114 1 38 1115 1 38 1116 1 38 1117 1 38 1118 1 38 1119 1 38 1124 1 38 1125 1 38 1126 1 38 1127 1 38 1256 1 38 1261 1 38 1266 1 38 1267 1 38 1268 1 38 1269 1 38 1276 1 38 1281 1 38 1282 1 38 1283 1 38 1284 1 38 1291 1 38 1292 1 38 1293 1 38 1294 1 38 1301 1 38 1302 1 38 1303 1 38 1304 1 38 1305 1 38 1306 1 38 1311 1 38 1316 1 38 1317 1 38 1318 1 38 1319 1 38 1326 1 38 1327 1 38 1328 1 38 1329 1 38 1336 1 38 1337 1 38 1338 1 38 1339 1 38 1340 1 38 1341 1 38 1346 1 38 1347 1 38 1348 1 38 1349 1 38 1356 1 38 1357 1 38 1358 1 38 1359 1 38 1360 1 38 1361 1 38 1366 1 38 1367 1 38 1368 1 38 1369 1 38 1370 1 38 1371 1 38 1376 1 38 1377 1 38 1378 1 38 1379 1 38 1507 1 38 1512 1 38 1513 1 38 1514 1 38 1515 1 38 1522 1 38 1523 1 38 1524 1 38 1525 1 38 1532 1 38 1533 1 38 1534 1 38 1535 1 38 1536 1 38 1537 1 38 1542 1 38 1543 1 38 1544 1 38 1545 1 38 1552 1 38 1553 1 38 1554 1 38 1555 1 38 1556 1 38 1557 1 38 1562 1 38 1563 1 38 1564 1 38 1565 1 38 1566 1 38 1567 1 38 1572 1 38 1573 1 38 1574 1 38 1575 1 38 1577 1 38 1578 1 38 1579 1 38 1580 1 38 1587 1 38 1588 1 38 1589 1 38 1590 1 38 1591 1 38 1592 1 38 1597 1 38 1598 1 38 1599 1 38 1600 1 38 1601 1 38 1602 1 38 1607 1 38 1608 1 38 1609 1 38 1610 1 38 1612 1 38 1613 1 38 1614 1 38 1615 1 38 1616 1 38 1617 1 38 1622 1 38 1623 1 38 1624 1 38 1625 1 38 1627 1 38 1628 1 38 1629 1 38 1630 1 38 1632 1 39 5 1 39 12 1 39 18 1 39 23 1 39 27 1 39 31 1 39 32 1 39 33 1 39 124 1 39 130 1 39 135 1 39 139 1 39 143 1 39 144 1 39 145 1 39 151 1 39 156 1 39 160 1 39 164 1 39 165 1 39 166 1 39 171 1 39 175 1 39 179 1 39 180 1 39 181 1 39 185 1 39 189 1 39 190 1 39 191 1 39 195 1 39 196 1 39 197 1 39 201 1 39 202 1 39 203 1 39 334 1 39 340 1 39 345 1 39 349 1 39 353 1 39 354 1 39 355 1 39 361 1 39 366 1 39 370 1 39 374 1 39 375 1 39 376 1 39 381 1 39 385 1 39 389 1 39 390 1 39 391 1 39 395 1 39 399 1 39 400 1 39 401 1 39 405 1 39 406 1 39 407 1 39 411 1 39 412 1 39 413 1 39 543 1 39 548 1 39 552 1 39 556 1 39 557 1 39 558 1 39 563 1 39 567 1 39 571 1 39 572 1 39 573 1 39 577 1 39 581 1 39 582 1 39 583 1 39 587 1 39 588 1 39 589 1 39 593 1 39 594 1 39 595 1 39 598 1 39 602 1 39 606 1 39 607 1 39 608 1 39 612 1 39 616 1 39 617 1 39 618 1 39 622 1 39 623 1 39 624 1 39 628 1 39 629 1 39 630 1 39 632 1 39 636 1 39 637 1 39 638 1 39 642 1 39 643 1 39 644 1 39 648 1 39 649 1 39 650 1 39 652 1 39 653 1 39 654 1 39 658 1 39 659 1 39 660 1 39 662 1 39 663 1 39 664 1 39 666 1 39 796 1 39 802 1 39 807 1 39 811 1 39 815 1 39 816 1 39 817 1 39 823 1 39 828 1 39 832 1 39 836 1 39 837 1 39 838 1 39 843 1 39 847 1 39 851 1 39 852 1 39 853 1 39 857 1 39 861 1 39 862 1 39 863 1 39 867 1 39 868 1 39 869 1 39 873 1 39 874 1 39 875 1 39 1005 1 39 1010 1 39 1014 1 39 1018 1 39 1019 1 39 1020 1 39 1025 1 39 1029 1 39 1033 1 39 1034 1 39 1035 1 39 1039 1 39 1043 1 39 1044 1 39 1045 1 39 1049 1 39 1050 1 39 1051 1 39 1055 1 39 1056 1 39 1057 1 39 1060 1 39 1064 1 39 1068 1 39 1069 1 39 1070 1 39 1074 1 39 1078 1 39 1079 1 39 1080 1 39 1084 1 39 1085 1 39 1086 1 39 1090 1 39 1091 1 39 1092 1 39 1094 1 39 1098 1 39 1099 1 39 1100 1 39 1104 1 39 1105 1 39 1106 1 39 1110 1 39 1111 1 39 1112 1 39 1114 1 39 1115 1 39 1116 1 39 1120 1 39 1121 1 39 1122 1 39 1124 1 39 1125 1 39 1126 1 39 1128 1 39 1257 1 39 1262 1 39 1266 1 39 1270 1 39 1271 1 39 1272 1 39 1277 1 39 1281 1 39 1285 1 39 1286 1 39 1287 1 39 1291 1 39 1295 1 39 1296 1 39 1297 1 39 1301 1 39 1302 1 39 1303 1 39 1307 1 39 1308 1 39 1309 1 39 1312 1 39 1316 1 39 1320 1 39 1321 1 39 1322 1 39 1326 1 39 1330 1 39 1331 1 39 1332 1 39 1336 1 39 1337 1 39 1338 1 39 1342 1 39 1343 1 39 1344 1 39 1346 1 39 1350 1 39 1351 1 39 1352 1 39 1356 1 39 1357 1 39 1358 1 39 1362 1 39 1363 1 39 1364 1 39 1366 1 39 1367 1 39 1368 1 39 1372 1 39 1373 1 39 1374 1 39 1376 1 39 1377 1 39 1378 1 39 1380 1 39 1508 1 39 1512 1 39 1516 1 39 1517 1 39 1518 1 39 1522 1 39 1526 1 39 1527 1 39 1528 1 39 1532 1 39 1533 1 39 1534 1 39 1538 1 39 1539 1 39 1540 1 39 1542 1 39 1546 1 39 1547 1 39 1548 1 39 1552 1 39 1553 1 39 1554 1 39 1558 1 39 1559 1 39 1560 1 39 1562 1 39 1563 1 39 1564 1 39 1568 1 39 1569 1 39 1570 1 39 1572 1 39 1573 1 39 1574 1 39 1576 1 39 1577 1 39 1581 1 39 1582 1 39 1583 1 39 1587 1 39 1588 1 39 1589 1 39 1593 1 39 1594 1 39 1595 1 39 1597 1 39 1598 1 39 1599 1 39 1603 1 39 1604 1 39 1605 1 39 1607 1 39 1608 1 39 1609 1 39 1611 1 39 1612 1 39 1613 1 39 1614 1 39 1618 1 39 1619 1 39 1620 1 39 1622 1 39 1623 1 39 1624 1 39 1626 1 39 1627 1 39 1628 1 39 1629 1 39 1631 1 39 1632 1 40 6 1 40 13 1 40 19 1 40 24 1 40 28 1 40 31 1 40 34 1 40 35 1 40 125 1 40 131 1 40 136 1 40 140 1 40 143 1 40 146 1 40 147 1 40 152 1 40 157 1 40 161 1 40 164 1 40 167 1 40 168 1 40 172 1 40 176 1 40 179 1 40 182 1 40 183 1 40 186 1 40 189 1 40 192 1 40 193 1 40 195 1 40 198 1 40 199 1 40 201 1 40 202 1 40 204 1 40 335 1 40 341 1 40 346 1 40 350 1 40 353 1 40 356 1 40 357 1 40 362 1 40 367 1 40 371 1 40 374 1 40 377 1 40 378 1 40 382 1 40 386 1 40 389 1 40 392 1 40 393 1 40 396 1 40 399 1 40 402 1 40 403 1 40 405 1 40 408 1 40 409 1 40 411 1 40 412 1 40 414 1 40 544 1 40 549 1 40 553 1 40 556 1 40 559 1 40 560 1 40 564 1 40 568 1 40 571 1 40 574 1 40 575 1 40 578 1 40 581 1 40 584 1 40 585 1 40 587 1 40 590 1 40 591 1 40 593 1 40 594 1 40 596 1 40 599 1 40 603 1 40 606 1 40 609 1 40 610 1 40 613 1 40 616 1 40 619 1 40 620 1 40 622 1 40 625 1 40 626 1 40 628 1 40 629 1 40 631 1 40 633 1 40 636 1 40 639 1 40 640 1 40 642 1 40 645 1 40 646 1 40 648 1 40 649 1 40 651 1 40 652 1 40 655 1 40 656 1 40 658 1 40 659 1 40 661 1 40 662 1 40 663 1 40 665 1 40 666 1 40 797 1 40 803 1 40 808 1 40 812 1 40 815 1 40 818 1 40 819 1 40 824 1 40 829 1 40 833 1 40 836 1 40 839 1 40 840 1 40 844 1 40 848 1 40 851 1 40 854 1 40 855 1 40 858 1 40 861 1 40 864 1 40 865 1 40 867 1 40 870 1 40 871 1 40 873 1 40 874 1 40 876 1 40 1006 1 40 1011 1 40 1015 1 40 1018 1 40 1021 1 40 1022 1 40 1026 1 40 1030 1 40 1033 1 40 1036 1 40 1037 1 40 1040 1 40 1043 1 40 1046 1 40 1047 1 40 1049 1 40 1052 1 40 1053 1 40 1055 1 40 1056 1 40 1058 1 40 1061 1 40 1065 1 40 1068 1 40 1071 1 40 1072 1 40 1075 1 40 1078 1 40 1081 1 40 1082 1 40 1084 1 40 1087 1 40 1088 1 40 1090 1 40 1091 1 40 1093 1 40 1095 1 40 1098 1 40 1101 1 40 1102 1 40 1104 1 40 1107 1 40 1108 1 40 1110 1 40 1111 1 40 1113 1 40 1114 1 40 1117 1 40 1118 1 40 1120 1 40 1121 1 40 1123 1 40 1124 1 40 1125 1 40 1127 1 40 1128 1 40 1258 1 40 1263 1 40 1267 1 40 1270 1 40 1273 1 40 1274 1 40 1278 1 40 1282 1 40 1285 1 40 1288 1 40 1289 1 40 1292 1 40 1295 1 40 1298 1 40 1299 1 40 1301 1 40 1304 1 40 1305 1 40 1307 1 40 1308 1 40 1310 1 40 1313 1 40 1317 1 40 1320 1 40 1323 1 40 1324 1 40 1327 1 40 1330 1 40 1333 1 40 1334 1 40 1336 1 40 1339 1 40 1340 1 40 1342 1 40 1343 1 40 1345 1 40 1347 1 40 1350 1 40 1353 1 40 1354 1 40 1356 1 40 1359 1 40 1360 1 40 1362 1 40 1363 1 40 1365 1 40 1366 1 40 1369 1 40 1370 1 40 1372 1 40 1373 1 40 1375 1 40 1376 1 40 1377 1 40 1379 1 40 1380 1 40 1509 1 40 1513 1 40 1516 1 40 1519 1 40 1520 1 40 1523 1 40 1526 1 40 1529 1 40 1530 1 40 1532 1 40 1535 1 40 1536 1 40 1538 1 40 1539 1 40 1541 1 40 1543 1 40 1546 1 40 1549 1 40 1550 1 40 1552 1 40 1555 1 40 1556 1 40 1558 1 40 1559 1 40 1561 1 40 1562 1 40 1565 1 40 1566 1 40 1568 1 40 1569 1 40 1571 1 40 1572 1 40 1573 1 40 1575 1 40 1576 1 40 1578 1 40 1581 1 40 1584 1 40 1585 1 40 1587 1 40 1590 1 40 1591 1 40 1593 1 40 1594 1 40 1596 1 40 1597 1 40 1600 1 40 1601 1 40 1603 1 40 1604 1 40 1606 1 40 1607 1 40 1608 1 40 1610 1 40 1611 1 40 1612 1 40 1615 1 40 1616 1 40 1618 1 40 1619 1 40 1621 1 40 1622 1 40 1623 1 40 1625 1 40 1626 1 40 1627 1 40 1628 1 40 1630 1 40 1631 1 40 1632 1 41 7 1 41 14 1 41 20 1 41 25 1 41 29 1 41 32 1 41 34 1 41 36 1 41 126 1 41 132 1 41 137 1 41 141 1 41 144 1 41 146 1 41 148 1 41 153 1 41 158 1 41 162 1 41 165 1 41 167 1 41 169 1 41 173 1 41 177 1 41 180 1 41 182 1 41 184 1 41 187 1 41 190 1 41 192 1 41 194 1 41 196 1 41 198 1 41 200 1 41 201 1 41 203 1 41 204 1 41 336 1 41 342 1 41 347 1 41 351 1 41 354 1 41 356 1 41 358 1 41 363 1 41 368 1 41 372 1 41 375 1 41 377 1 41 379 1 41 383 1 41 387 1 41 390 1 41 392 1 41 394 1 41 397 1 41 400 1 41 402 1 41 404 1 41 406 1 41 408 1 41 410 1 41 411 1 41 413 1 41 414 1 41 545 1 41 550 1 41 554 1 41 557 1 41 559 1 41 561 1 41 565 1 41 569 1 41 572 1 41 574 1 41 576 1 41 579 1 41 582 1 41 584 1 41 586 1 41 588 1 41 590 1 41 592 1 41 593 1 41 595 1 41 596 1 41 600 1 41 604 1 41 607 1 41 609 1 41 611 1 41 614 1 41 617 1 41 619 1 41 621 1 41 623 1 41 625 1 41 627 1 41 628 1 41 630 1 41 631 1 41 634 1 41 637 1 41 639 1 41 641 1 41 643 1 41 645 1 41 647 1 41 648 1 41 650 1 41 651 1 41 653 1 41 655 1 41 657 1 41 658 1 41 660 1 41 661 1 41 662 1 41 664 1 41 665 1 41 666 1 41 798 1 41 804 1 41 809 1 41 813 1 41 816 1 41 818 1 41 820 1 41 825 1 41 830 1 41 834 1 41 837 1 41 839 1 41 841 1 41 845 1 41 849 1 41 852 1 41 854 1 41 856 1 41 859 1 41 862 1 41 864 1 41 866 1 41 868 1 41 870 1 41 872 1 41 873 1 41 875 1 41 876 1 41 1007 1 41 1012 1 41 1016 1 41 1019 1 41 1021 1 41 1023 1 41 1027 1 41 1031 1 41 1034 1 41 1036 1 41 1038 1 41 1041 1 41 1044 1 41 1046 1 41 1048 1 41 1050 1 41 1052 1 41 1054 1 41 1055 1 41 1057 1 41 1058 1 41 1062 1 41 1066 1 41 1069 1 41 1071 1 41 1073 1 41 1076 1 41 1079 1 41 1081 1 41 1083 1 41 1085 1 41 1087 1 41 1089 1 41 1090 1 41 1092 1 41 1093 1 41 1096 1 41 1099 1 41 1101 1 41 1103 1 41 1105 1 41 1107 1 41 1109 1 41 1110 1 41 1112 1 41 1113 1 41 1115 1 41 1117 1 41 1119 1 41 1120 1 41 1122 1 41 1123 1 41 1124 1 41 1126 1 41 1127 1 41 1128 1 41 1259 1 41 1264 1 41 1268 1 41 1271 1 41 1273 1 41 1275 1 41 1279 1 41 1283 1 41 1286 1 41 1288 1 41 1290 1 41 1293 1 41 1296 1 41 1298 1 41 1300 1 41 1302 1 41 1304 1 41 1306 1 41 1307 1 41 1309 1 41 1310 1 41 1314 1 41 1318 1 41 1321 1 41 1323 1 41 1325 1 41 1328 1 41 1331 1 41 1333 1 41 1335 1 41 1337 1 41 1339 1 41 1341 1 41 1342 1 41 1344 1 41 1345 1 41 1348 1 41 1351 1 41 1353 1 41 1355 1 41 1357 1 41 1359 1 41 1361 1 41 1362 1 41 1364 1 41 1365 1 41 1367 1 41 1369 1 41 1371 1 41 1372 1 41 1374 1 41 1375 1 41 1376 1 41 1378 1 41 1379 1 41 1380 1 41 1510 1 41 1514 1 41 1517 1 41 1519 1 41 1521 1 41 1524 1 41 1527 1 41 1529 1 41 1531 1 41 1533 1 41 1535 1 41 1537 1 41 1538 1 41 1540 1 41 1541 1 41 1544 1 41 1547 1 41 1549 1 41 1551 1 41 1553 1 41 1555 1 41 1557 1 41 1558 1 41 1560 1 41 1561 1 41 1563 1 41 1565 1 41 1567 1 41 1568 1 41 1570 1 41 1571 1 41 1572 1 41 1574 1 41 1575 1 41 1576 1 41 1579 1 41 1582 1 41 1584 1 41 1586 1 41 1588 1 41 1590 1 41 1592 1 41 1593 1 41 1595 1 41 1596 1 41 1598 1 41 1600 1 41 1602 1 41 1603 1 41 1605 1 41 1606 1 41 1607 1 41 1609 1 41 1610 1 41 1611 1 41 1613 1 41 1615 1 41 1617 1 41 1618 1 41 1620 1 41 1621 1 41 1622 1 41 1624 1 41 1625 1 41 1626 1 41 1627 1 41 1629 1 41 1630 1 41 1631 1 41 1632 1 42 8 1 42 15 1 42 21 1 42 26 1 42 30 1 42 33 1 42 35 1 42 36 1 42 127 1 42 133 1 42 138 1 42 142 1 42 145 1 42 147 1 42 148 1 42 154 1 42 159 1 42 163 1 42 166 1 42 168 1 42 169 1 42 174 1 42 178 1 42 181 1 42 183 1 42 184 1 42 188 1 42 191 1 42 193 1 42 194 1 42 197 1 42 199 1 42 200 1 42 202 1 42 203 1 42 204 1 42 337 1 42 343 1 42 348 1 42 352 1 42 355 1 42 357 1 42 358 1 42 364 1 42 369 1 42 373 1 42 376 1 42 378 1 42 379 1 42 384 1 42 388 1 42 391 1 42 393 1 42 394 1 42 398 1 42 401 1 42 403 1 42 404 1 42 407 1 42 409 1 42 410 1 42 412 1 42 413 1 42 414 1 42 546 1 42 551 1 42 555 1 42 558 1 42 560 1 42 561 1 42 566 1 42 570 1 42 573 1 42 575 1 42 576 1 42 580 1 42 583 1 42 585 1 42 586 1 42 589 1 42 591 1 42 592 1 42 594 1 42 595 1 42 596 1 42 601 1 42 605 1 42 608 1 42 610 1 42 611 1 42 615 1 42 618 1 42 620 1 42 621 1 42 624 1 42 626 1 42 627 1 42 629 1 42 630 1 42 631 1 42 635 1 42 638 1 42 640 1 42 641 1 42 644 1 42 646 1 42 647 1 42 649 1 42 650 1 42 651 1 42 654 1 42 656 1 42 657 1 42 659 1 42 660 1 42 661 1 42 663 1 42 664 1 42 665 1 42 666 1 42 799 1 42 805 1 42 810 1 42 814 1 42 817 1 42 819 1 42 820 1 42 826 1 42 831 1 42 835 1 42 838 1 42 840 1 42 841 1 42 846 1 42 850 1 42 853 1 42 855 1 42 856 1 42 860 1 42 863 1 42 865 1 42 866 1 42 869 1 42 871 1 42 872 1 42 874 1 42 875 1 42 876 1 42 1008 1 42 1013 1 42 1017 1 42 1020 1 42 1022 1 42 1023 1 42 1028 1 42 1032 1 42 1035 1 42 1037 1 42 1038 1 42 1042 1 42 1045 1 42 1047 1 42 1048 1 42 1051 1 42 1053 1 42 1054 1 42 1056 1 42 1057 1 42 1058 1 42 1063 1 42 1067 1 42 1070 1 42 1072 1 42 1073 1 42 1077 1 42 1080 1 42 1082 1 42 1083 1 42 1086 1 42 1088 1 42 1089 1 42 1091 1 42 1092 1 42 1093 1 42 1097 1 42 1100 1 42 1102 1 42 1103 1 42 1106 1 42 1108 1 42 1109 1 42 1111 1 42 1112 1 42 1113 1 42 1116 1 42 1118 1 42 1119 1 42 1121 1 42 1122 1 42 1123 1 42 1125 1 42 1126 1 42 1127 1 42 1128 1 42 1260 1 42 1265 1 42 1269 1 42 1272 1 42 1274 1 42 1275 1 42 1280 1 42 1284 1 42 1287 1 42 1289 1 42 1290 1 42 1294 1 42 1297 1 42 1299 1 42 1300 1 42 1303 1 42 1305 1 42 1306 1 42 1308 1 42 1309 1 42 1310 1 42 1315 1 42 1319 1 42 1322 1 42 1324 1 42 1325 1 42 1329 1 42 1332 1 42 1334 1 42 1335 1 42 1338 1 42 1340 1 42 1341 1 42 1343 1 42 1344 1 42 1345 1 42 1349 1 42 1352 1 42 1354 1 42 1355 1 42 1358 1 42 1360 1 42 1361 1 42 1363 1 42 1364 1 42 1365 1 42 1368 1 42 1370 1 42 1371 1 42 1373 1 42 1374 1 42 1375 1 42 1377 1 42 1378 1 42 1379 1 42 1380 1 42 1511 1 42 1515 1 42 1518 1 42 1520 1 42 1521 1 42 1525 1 42 1528 1 42 1530 1 42 1531 1 42 1534 1 42 1536 1 42 1537 1 42 1539 1 42 1540 1 42 1541 1 42 1545 1 42 1548 1 42 1550 1 42 1551 1 42 1554 1 42 1556 1 42 1557 1 42 1559 1 42 1560 1 42 1561 1 42 1564 1 42 1566 1 42 1567 1 42 1569 1 42 1570 1 42 1571 1 42 1573 1 42 1574 1 42 1575 1 42 1576 1 42 1580 1 42 1583 1 42 1585 1 42 1586 1 42 1589 1 42 1591 1 42 1592 1 42 1594 1 42 1595 1 42 1596 1 42 1599 1 42 1601 1 42 1602 1 42 1604 1 42 1605 1 42 1606 1 42 1608 1 42 1609 1 42 1610 1 42 1611 1 42 1614 1 42 1616 1 42 1617 1 42 1619 1 42 1620 1 42 1621 1 42 1623 1 42 1624 1 42 1625 1 42 1626 1 42 1628 1 42 1629 1 42 1630 1 42 1631 1 42 1632 1 43 1 1 43 37 1 43 38 1 43 39 1 43 40 1 43 41 1 43 42 1 43 43 1 43 121 1 43 122 1 43 123 1 43 124 1 43 125 1 43 126 1 43 127 1 43 205 1 43 206 1 43 207 1 43 208 1 43 209 1 43 210 1 43 211 1 43 212 1 43 213 1 43 214 1 43 215 1 43 216 1 43 217 1 43 218 1 43 219 1 43 220 1 43 221 1 43 222 1 43 223 1 43 224 1 43 225 1 43 331 1 43 332 1 43 333 1 43 334 1 43 335 1 43 336 1 43 337 1 43 415 1 43 416 1 43 417 1 43 418 1 43 419 1 43 420 1 43 421 1 43 422 1 43 423 1 43 424 1 43 425 1 43 426 1 43 427 1 43 428 1 43 429 1 43 430 1 43 431 1 43 432 1 43 433 1 43 434 1 43 435 1 43 541 1 43 542 1 43 543 1 43 544 1 43 545 1 43 546 1 43 547 1 43 548 1 43 549 1 43 550 1 43 551 1 43 552 1 43 553 1 43 554 1 43 555 1 43 556 1 43 557 1 43 558 1 43 559 1 43 560 1 43 561 1 43 667 1 43 668 1 43 669 1 43 670 1 43 671 1 43 672 1 43 673 1 43 674 1 43 675 1 43 676 1 43 677 1 43 678 1 43 679 1 43 680 1 43 681 1 43 682 1 43 683 1 43 684 1 43 685 1 43 686 1 43 687 1 43 688 1 43 689 1 43 690 1 43 691 1 43 692 1 43 693 1 43 694 1 43 695 1 43 696 1 43 697 1 43 698 1 43 699 1 43 700 1 43 701 1 43 793 1 43 794 1 43 795 1 43 796 1 43 797 1 43 798 1 43 799 1 43 877 1 43 878 1 43 879 1 43 880 1 43 881 1 43 882 1 43 883 1 43 884 1 43 885 1 43 886 1 43 887 1 43 888 1 43 889 1 43 890 1 43 891 1 43 892 1 43 893 1 43 894 1 43 895 1 43 896 1 43 897 1 43 1003 1 43 1004 1 43 1005 1 43 1006 1 43 1007 1 43 1008 1 43 1009 1 43 1010 1 43 1011 1 43 1012 1 43 1013 1 43 1014 1 43 1015 1 43 1016 1 43 1017 1 43 1018 1 43 1019 1 43 1020 1 43 1021 1 43 1022 1 43 1023 1 43 1129 1 43 1130 1 43 1131 1 43 1132 1 43 1133 1 43 1134 1 43 1135 1 43 1136 1 43 1137 1 43 1138 1 43 1139 1 43 1140 1 43 1141 1 43 1142 1 43 1143 1 43 1144 1 43 1145 1 43 1146 1 43 1147 1 43 1148 1 43 1149 1 43 1150 1 43 1151 1 43 1152 1 43 1153 1 43 1154 1 43 1155 1 43 1156 1 43 1157 1 43 1158 1 43 1159 1 43 1160 1 43 1161 1 43 1162 1 43 1163 1 43 1255 1 43 1256 1 43 1257 1 43 1258 1 43 1259 1 43 1260 1 43 1261 1 43 1262 1 43 1263 1 43 1264 1 43 1265 1 43 1266 1 43 1267 1 43 1268 1 43 1269 1 43 1270 1 43 1271 1 43 1272 1 43 1273 1 43 1274 1 43 1275 1 43 1381 1 43 1382 1 43 1383 1 43 1384 1 43 1385 1 43 1386 1 43 1387 1 43 1388 1 43 1389 1 43 1390 1 43 1391 1 43 1392 1 43 1393 1 43 1394 1 43 1395 1 43 1396 1 43 1397 1 43 1398 1 43 1399 1 43 1400 1 43 1401 1 43 1402 1 43 1403 1 43 1404 1 43 1405 1 43 1406 1 43 1407 1 43 1408 1 43 1409 1 43 1410 1 43 1411 1 43 1412 1 43 1413 1 43 1414 1 43 1415 1 43 1507 1 43 1508 1 43 1509 1 43 1510 1 43 1511 1 43 1512 1 43 1513 1 43 1514 1 43 1515 1 43 1516 1 43 1517 1 43 1518 1 43 1519 1 43 1520 1 43 1521 1 43 1522 1 43 1523 1 43 1524 1 43 1525 1 43 1526 1 43 1527 1 43 1528 1 43 1529 1 43 1530 1 43 1531 1 43 1532 1 43 1533 1 43 1534 1 43 1535 1 43 1536 1 43 1537 1 43 1538 1 43 1539 1 43 1540 1 43 1541 1 43 1633 1 43 1634 1 43 1635 1 43 1636 1 43 1637 1 43 1638 1 43 1639 1 43 1640 1 43 1641 1 43 1642 1 43 1643 1 43 1644 1 43 1645 1 43 1646 1 43 1647 1 43 1648 1 43 1649 1 43 1650 1 43 1651 1 43 1652 1 43 1653 1 43 1654 1 43 1655 1 43 1656 1 43 1657 1 43 1658 1 43 1659 1 43 1660 1 43 1661 1 43 1662 1 43 1663 1 43 1664 1 43 1665 1 43 1666 1 43 1667 1 44 2 1 44 37 1 44 44 1 44 45 1 44 46 1 44 47 1 44 48 1 44 49 1 44 121 1 44 128 1 44 129 1 44 130 1 44 131 1 44 132 1 44 133 1 44 205 1 44 206 1 44 207 1 44 208 1 44 209 1 44 210 1 44 226 1 44 227 1 44 228 1 44 229 1 44 230 1 44 231 1 44 232 1 44 233 1 44 234 1 44 235 1 44 236 1 44 237 1 44 238 1 44 239 1 44 240 1 44 331 1 44 338 1 44 339 1 44 340 1 44 341 1 44 342 1 44 343 1 44 415 1 44 416 1 44 417 1 44 418 1 44 419 1 44 420 1 44 436 1 44 437 1 44 438 1 44 439 1 44 440 1 44 441 1 44 442 1 44 443 1 44 444 1 44 445 1 44 446 1 44 447 1 44 448 1 44 449 1 44 450 1 44 541 1 44 542 1 44 543 1 44 544 1 44 545 1 44 546 1 44 562 1 44 563 1 44 564 1 44 565 1 44 566 1 44 567 1 44 568 1 44 569 1 44 570 1 44 571 1 44 572 1 44 573 1 44 574 1 44 575 1 44 576 1 44 667 1 44 668 1 44 669 1 44 670 1 44 671 1 44 672 1 44 673 1 44 674 1 44 675 1 44 676 1 44 677 1 44 678 1 44 679 1 44 680 1 44 681 1 44 702 1 44 703 1 44 704 1 44 705 1 44 706 1 44 707 1 44 708 1 44 709 1 44 710 1 44 711 1 44 712 1 44 713 1 44 714 1 44 715 1 44 716 1 44 717 1 44 718 1 44 719 1 44 720 1 44 721 1 44 793 1 44 800 1 44 801 1 44 802 1 44 803 1 44 804 1 44 805 1 44 877 1 44 878 1 44 879 1 44 880 1 44 881 1 44 882 1 44 898 1 44 899 1 44 900 1 44 901 1 44 902 1 44 903 1 44 904 1 44 905 1 44 906 1 44 907 1 44 908 1 44 909 1 44 910 1 44 911 1 44 912 1 44 1003 1 44 1004 1 44 1005 1 44 1006 1 44 1007 1 44 1008 1 44 1024 1 44 1025 1 44 1026 1 44 1027 1 44 1028 1 44 1029 1 44 1030 1 44 1031 1 44 1032 1 44 1033 1 44 1034 1 44 1035 1 44 1036 1 44 1037 1 44 1038 1 44 1129 1 44 1130 1 44 1131 1 44 1132 1 44 1133 1 44 1134 1 44 1135 1 44 1136 1 44 1137 1 44 1138 1 44 1139 1 44 1140 1 44 1141 1 44 1142 1 44 1143 1 44 1164 1 44 1165 1 44 1166 1 44 1167 1 44 1168 1 44 1169 1 44 1170 1 44 1171 1 44 1172 1 44 1173 1 44 1174 1 44 1175 1 44 1176 1 44 1177 1 44 1178 1 44 1179 1 44 1180 1 44 1181 1 44 1182 1 44 1183 1 44 1255 1 44 1256 1 44 1257 1 44 1258 1 44 1259 1 44 1260 1 44 1276 1 44 1277 1 44 1278 1 44 1279 1 44 1280 1 44 1281 1 44 1282 1 44 1283 1 44 1284 1 44 1285 1 44 1286 1 44 1287 1 44 1288 1 44 1289 1 44 1290 1 44 1381 1 44 1382 1 44 1383 1 44 1384 1 44 1385 1 44 1386 1 44 1387 1 44 1388 1 44 1389 1 44 1390 1 44 1391 1 44 1392 1 44 1393 1 44 1394 1 44 1395 1 44 1416 1 44 1417 1 44 1418 1 44 1419 1 44 1420 1 44 1421 1 44 1422 1 44 1423 1 44 1424 1 44 1425 1 44 1426 1 44 1427 1 44 1428 1 44 1429 1 44 1430 1 44 1431 1 44 1432 1 44 1433 1 44 1434 1 44 1435 1 44 1507 1 44 1508 1 44 1509 1 44 1510 1 44 1511 1 44 1512 1 44 1513 1 44 1514 1 44 1515 1 44 1516 1 44 1517 1 44 1518 1 44 1519 1 44 1520 1 44 1521 1 44 1542 1 44 1543 1 44 1544 1 44 1545 1 44 1546 1 44 1547 1 44 1548 1 44 1549 1 44 1550 1 44 1551 1 44 1552 1 44 1553 1 44 1554 1 44 1555 1 44 1556 1 44 1557 1 44 1558 1 44 1559 1 44 1560 1 44 1561 1 44 1633 1 44 1634 1 44 1635 1 44 1636 1 44 1637 1 44 1638 1 44 1639 1 44 1640 1 44 1641 1 44 1642 1 44 1643 1 44 1644 1 44 1645 1 44 1646 1 44 1647 1 44 1648 1 44 1649 1 44 1650 1 44 1651 1 44 1652 1 44 1668 1 44 1669 1 44 1670 1 44 1671 1 44 1672 1 44 1673 1 44 1674 1 44 1675 1 44 1676 1 44 1677 1 44 1678 1 44 1679 1 44 1680 1 44 1681 1 44 1682 1 45 3 1 45 38 1 45 44 1 45 50 1 45 51 1 45 52 1 45 53 1 45 54 1 45 122 1 45 128 1 45 134 1 45 135 1 45 136 1 45 137 1 45 138 1 45 205 1 45 211 1 45 212 1 45 213 1 45 214 1 45 215 1 45 226 1 45 227 1 45 228 1 45 229 1 45 230 1 45 241 1 45 242 1 45 243 1 45 244 1 45 245 1 45 246 1 45 247 1 45 248 1 45 249 1 45 250 1 45 332 1 45 338 1 45 344 1 45 345 1 45 346 1 45 347 1 45 348 1 45 415 1 45 421 1 45 422 1 45 423 1 45 424 1 45 425 1 45 436 1 45 437 1 45 438 1 45 439 1 45 440 1 45 451 1 45 452 1 45 453 1 45 454 1 45 455 1 45 456 1 45 457 1 45 458 1 45 459 1 45 460 1 45 541 1 45 547 1 45 548 1 45 549 1 45 550 1 45 551 1 45 562 1 45 563 1 45 564 1 45 565 1 45 566 1 45 577 1 45 578 1 45 579 1 45 580 1 45 581 1 45 582 1 45 583 1 45 584 1 45 585 1 45 586 1 45 667 1 45 668 1 45 669 1 45 670 1 45 671 1 45 682 1 45 683 1 45 684 1 45 685 1 45 686 1 45 687 1 45 688 1 45 689 1 45 690 1 45 691 1 45 702 1 45 703 1 45 704 1 45 705 1 45 706 1 45 707 1 45 708 1 45 709 1 45 710 1 45 711 1 45 722 1 45 723 1 45 724 1 45 725 1 45 726 1 45 727 1 45 728 1 45 729 1 45 730 1 45 731 1 45 794 1 45 800 1 45 806 1 45 807 1 45 808 1 45 809 1 45 810 1 45 877 1 45 883 1 45 884 1 45 885 1 45 886 1 45 887 1 45 898 1 45 899 1 45 900 1 45 901 1 45 902 1 45 913 1 45 914 1 45 915 1 45 916 1 45 917 1 45 918 1 45 919 1 45 920 1 45 921 1 45 922 1 45 1003 1 45 1009 1 45 1010 1 45 1011 1 45 1012 1 45 1013 1 45 1024 1 45 1025 1 45 1026 1 45 1027 1 45 1028 1 45 1039 1 45 1040 1 45 1041 1 45 1042 1 45 1043 1 45 1044 1 45 1045 1 45 1046 1 45 1047 1 45 1048 1 45 1129 1 45 1130 1 45 1131 1 45 1132 1 45 1133 1 45 1144 1 45 1145 1 45 1146 1 45 1147 1 45 1148 1 45 1149 1 45 1150 1 45 1151 1 45 1152 1 45 1153 1 45 1164 1 45 1165 1 45 1166 1 45 1167 1 45 1168 1 45 1169 1 45 1170 1 45 1171 1 45 1172 1 45 1173 1 45 1184 1 45 1185 1 45 1186 1 45 1187 1 45 1188 1 45 1189 1 45 1190 1 45 1191 1 45 1192 1 45 1193 1 45 1255 1 45 1261 1 45 1262 1 45 1263 1 45 1264 1 45 1265 1 45 1276 1 45 1277 1 45 1278 1 45 1279 1 45 1280 1 45 1291 1 45 1292 1 45 1293 1 45 1294 1 45 1295 1 45 1296 1 45 1297 1 45 1298 1 45 1299 1 45 1300 1 45 1381 1 45 1382 1 45 1383 1 45 1384 1 45 1385 1 45 1396 1 45 1397 1 45 1398 1 45 1399 1 45 1400 1 45 1401 1 45 1402 1 45 1403 1 45 1404 1 45 1405 1 45 1416 1 45 1417 1 45 1418 1 45 1419 1 45 1420 1 45 1421 1 45 1422 1 45 1423 1 45 1424 1 45 1425 1 45 1436 1 45 1437 1 45 1438 1 45 1439 1 45 1440 1 45 1441 1 45 1442 1 45 1443 1 45 1444 1 45 1445 1 45 1507 1 45 1508 1 45 1509 1 45 1510 1 45 1511 1 45 1522 1 45 1523 1 45 1524 1 45 1525 1 45 1526 1 45 1527 1 45 1528 1 45 1529 1 45 1530 1 45 1531 1 45 1542 1 45 1543 1 45 1544 1 45 1545 1 45 1546 1 45 1547 1 45 1548 1 45 1549 1 45 1550 1 45 1551 1 45 1562 1 45 1563 1 45 1564 1 45 1565 1 45 1566 1 45 1567 1 45 1568 1 45 1569 1 45 1570 1 45 1571 1 45 1633 1 45 1634 1 45 1635 1 45 1636 1 45 1637 1 45 1638 1 45 1639 1 45 1640 1 45 1641 1 45 1642 1 45 1653 1 45 1654 1 45 1655 1 45 1656 1 45 1657 1 45 1658 1 45 1659 1 45 1660 1 45 1661 1 45 1662 1 45 1668 1 45 1669 1 45 1670 1 45 1671 1 45 1672 1 45 1673 1 45 1674 1 45 1675 1 45 1676 1 45 1677 1 45 1683 1 45 1684 1 45 1685 1 45 1686 1 45 1687 1 46 4 1 46 39 1 46 45 1 46 50 1 46 55 1 46 56 1 46 57 1 46 58 1 46 123 1 46 129 1 46 134 1 46 139 1 46 140 1 46 141 1 46 142 1 46 206 1 46 211 1 46 216 1 46 217 1 46 218 1 46 219 1 46 226 1 46 231 1 46 232 1 46 233 1 46 234 1 46 241 1 46 242 1 46 243 1 46 244 1 46 251 1 46 252 1 46 253 1 46 254 1 46 255 1 46 256 1 46 333 1 46 339 1 46 344 1 46 349 1 46 350 1 46 351 1 46 352 1 46 416 1 46 421 1 46 426 1 46 427 1 46 428 1 46 429 1 46 436 1 46 441 1 46 442 1 46 443 1 46 444 1 46 451 1 46 452 1 46 453 1 46 454 1 46 461 1 46 462 1 46 463 1 46 464 1 46 465 1 46 466 1 46 542 1 46 547 1 46 552 1 46 553 1 46 554 1 46 555 1 46 562 1 46 567 1 46 568 1 46 569 1 46 570 1 46 577 1 46 578 1 46 579 1 46 580 1 46 587 1 46 588 1 46 589 1 46 590 1 46 591 1 46 592 1 46 667 1 46 672 1 46 673 1 46 674 1 46 675 1 46 682 1 46 683 1 46 684 1 46 685 1 46 692 1 46 693 1 46 694 1 46 695 1 46 696 1 46 697 1 46 702 1 46 703 1 46 704 1 46 705 1 46 712 1 46 713 1 46 714 1 46 715 1 46 716 1 46 717 1 46 722 1 46 723 1 46 724 1 46 725 1 46 726 1 46 727 1 46 732 1 46 733 1 46 734 1 46 735 1 46 795 1 46 801 1 46 806 1 46 811 1 46 812 1 46 813 1 46 814 1 46 878 1 46 883 1 46 888 1 46 889 1 46 890 1 46 891 1 46 898 1 46 903 1 46 904 1 46 905 1 46 906 1 46 913 1 46 914 1 46 915 1 46 916 1 46 923 1 46 924 1 46 925 1 46 926 1 46 927 1 46 928 1 46 1004 1 46 1009 1 46 1014 1 46 1015 1 46 1016 1 46 1017 1 46 1024 1 46 1029 1 46 1030 1 46 1031 1 46 1032 1 46 1039 1 46 1040 1 46 1041 1 46 1042 1 46 1049 1 46 1050 1 46 1051 1 46 1052 1 46 1053 1 46 1054 1 46 1129 1 46 1134 1 46 1135 1 46 1136 1 46 1137 1 46 1144 1 46 1145 1 46 1146 1 46 1147 1 46 1154 1 46 1155 1 46 1156 1 46 1157 1 46 1158 1 46 1159 1 46 1164 1 46 1165 1 46 1166 1 46 1167 1 46 1174 1 46 1175 1 46 1176 1 46 1177 1 46 1178 1 46 1179 1 46 1184 1 46 1185 1 46 1186 1 46 1187 1 46 1188 1 46 1189 1 46 1194 1 46 1195 1 46 1196 1 46 1197 1 46 1256 1 46 1261 1 46 1266 1 46 1267 1 46 1268 1 46 1269 1 46 1276 1 46 1281 1 46 1282 1 46 1283 1 46 1284 1 46 1291 1 46 1292 1 46 1293 1 46 1294 1 46 1301 1 46 1302 1 46 1303 1 46 1304 1 46 1305 1 46 1306 1 46 1381 1 46 1386 1 46 1387 1 46 1388 1 46 1389 1 46 1396 1 46 1397 1 46 1398 1 46 1399 1 46 1406 1 46 1407 1 46 1408 1 46 1409 1 46 1410 1 46 1411 1 46 1416 1 46 1417 1 46 1418 1 46 1419 1 46 1426 1 46 1427 1 46 1428 1 46 1429 1 46 1430 1 46 1431 1 46 1436 1 46 1437 1 46 1438 1 46 1439 1 46 1440 1 46 1441 1 46 1446 1 46 1447 1 46 1448 1 46 1449 1 46 1507 1 46 1512 1 46 1513 1 46 1514 1 46 1515 1 46 1522 1 46 1523 1 46 1524 1 46 1525 1 46 1532 1 46 1533 1 46 1534 1 46 1535 1 46 1536 1 46 1537 1 46 1542 1 46 1543 1 46 1544 1 46 1545 1 46 1552 1 46 1553 1 46 1554 1 46 1555 1 46 1556 1 46 1557 1 46 1562 1 46 1563 1 46 1564 1 46 1565 1 46 1566 1 46 1567 1 46 1572 1 46 1573 1 46 1574 1 46 1575 1 46 1633 1 46 1634 1 46 1635 1 46 1636 1 46 1643 1 46 1644 1 46 1645 1 46 1646 1 46 1647 1 46 1648 1 46 1653 1 46 1654 1 46 1655 1 46 1656 1 46 1657 1 46 1658 1 46 1663 1 46 1664 1 46 1665 1 46 1666 1 46 1668 1 46 1669 1 46 1670 1 46 1671 1 46 1672 1 46 1673 1 46 1678 1 46 1679 1 46 1680 1 46 1681 1 46 1683 1 46 1684 1 46 1685 1 46 1686 1 46 1688 1 47 5 1 47 40 1 47 46 1 47 51 1 47 55 1 47 59 1 47 60 1 47 61 1 47 124 1 47 130 1 47 135 1 47 139 1 47 143 1 47 144 1 47 145 1 47 207 1 47 212 1 47 216 1 47 220 1 47 221 1 47 222 1 47 227 1 47 231 1 47 235 1 47 236 1 47 237 1 47 241 1 47 245 1 47 246 1 47 247 1 47 251 1 47 252 1 47 253 1 47 257 1 47 258 1 47 259 1 47 334 1 47 340 1 47 345 1 47 349 1 47 353 1 47 354 1 47 355 1 47 417 1 47 422 1 47 426 1 47 430 1 47 431 1 47 432 1 47 437 1 47 441 1 47 445 1 47 446 1 47 447 1 47 451 1 47 455 1 47 456 1 47 457 1 47 461 1 47 462 1 47 463 1 47 467 1 47 468 1 47 469 1 47 543 1 47 548 1 47 552 1 47 556 1 47 557 1 47 558 1 47 563 1 47 567 1 47 571 1 47 572 1 47 573 1 47 577 1 47 581 1 47 582 1 47 583 1 47 587 1 47 588 1 47 589 1 47 593 1 47 594 1 47 595 1 47 668 1 47 672 1 47 676 1 47 677 1 47 678 1 47 682 1 47 686 1 47 687 1 47 688 1 47 692 1 47 693 1 47 694 1 47 698 1 47 699 1 47 700 1 47 702 1 47 706 1 47 707 1 47 708 1 47 712 1 47 713 1 47 714 1 47 718 1 47 719 1 47 720 1 47 722 1 47 723 1 47 724 1 47 728 1 47 729 1 47 730 1 47 732 1 47 733 1 47 734 1 47 736 1 47 796 1 47 802 1 47 807 1 47 811 1 47 815 1 47 816 1 47 817 1 47 879 1 47 884 1 47 888 1 47 892 1 47 893 1 47 894 1 47 899 1 47 903 1 47 907 1 47 908 1 47 909 1 47 913 1 47 917 1 47 918 1 47 919 1 47 923 1 47 924 1 47 925 1 47 929 1 47 930 1 47 931 1 47 1005 1 47 1010 1 47 1014 1 47 1018 1 47 1019 1 47 1020 1 47 1025 1 47 1029 1 47 1033 1 47 1034 1 47 1035 1 47 1039 1 47 1043 1 47 1044 1 47 1045 1 47 1049 1 47 1050 1 47 1051 1 47 1055 1 47 1056 1 47 1057 1 47 1130 1 47 1134 1 47 1138 1 47 1139 1 47 1140 1 47 1144 1 47 1148 1 47 1149 1 47 1150 1 47 1154 1 47 1155 1 47 1156 1 47 1160 1 47 1161 1 47 1162 1 47 1164 1 47 1168 1 47 1169 1 47 1170 1 47 1174 1 47 1175 1 47 1176 1 47 1180 1 47 1181 1 47 1182 1 47 1184 1 47 1185 1 47 1186 1 47 1190 1 47 1191 1 47 1192 1 47 1194 1 47 1195 1 47 1196 1 47 1198 1 47 1257 1 47 1262 1 47 1266 1 47 1270 1 47 1271 1 47 1272 1 47 1277 1 47 1281 1 47 1285 1 47 1286 1 47 1287 1 47 1291 1 47 1295 1 47 1296 1 47 1297 1 47 1301 1 47 1302 1 47 1303 1 47 1307 1 47 1308 1 47 1309 1 47 1382 1 47 1386 1 47 1390 1 47 1391 1 47 1392 1 47 1396 1 47 1400 1 47 1401 1 47 1402 1 47 1406 1 47 1407 1 47 1408 1 47 1412 1 47 1413 1 47 1414 1 47 1416 1 47 1420 1 47 1421 1 47 1422 1 47 1426 1 47 1427 1 47 1428 1 47 1432 1 47 1433 1 47 1434 1 47 1436 1 47 1437 1 47 1438 1 47 1442 1 47 1443 1 47 1444 1 47 1446 1 47 1447 1 47 1448 1 47 1450 1 47 1508 1 47 1512 1 47 1516 1 47 1517 1 47 1518 1 47 1522 1 47 1526 1 47 1527 1 47 1528 1 47 1532 1 47 1533 1 47 1534 1 47 1538 1 47 1539 1 47 1540 1 47 1542 1 47 1546 1 47 1547 1 47 1548 1 47 1552 1 47 1553 1 47 1554 1 47 1558 1 47 1559 1 47 1560 1 47 1562 1 47 1563 1 47 1564 1 47 1568 1 47 1569 1 47 1570 1 47 1572 1 47 1573 1 47 1574 1 47 1576 1 47 1633 1 47 1637 1 47 1638 1 47 1639 1 47 1643 1 47 1644 1 47 1645 1 47 1649 1 47 1650 1 47 1651 1 47 1653 1 47 1654 1 47 1655 1 47 1659 1 47 1660 1 47 1661 1 47 1663 1 47 1664 1 47 1665 1 47 1667 1 47 1668 1 47 1669 1 47 1670 1 47 1674 1 47 1675 1 47 1676 1 47 1678 1 47 1679 1 47 1680 1 47 1682 1 47 1683 1 47 1684 1 47 1685 1 47 1687 1 47 1688 1 48 6 1 48 41 1 48 47 1 48 52 1 48 56 1 48 59 1 48 62 1 48 63 1 48 125 1 48 131 1 48 136 1 48 140 1 48 143 1 48 146 1 48 147 1 48 208 1 48 213 1 48 217 1 48 220 1 48 223 1 48 224 1 48 228 1 48 232 1 48 235 1 48 238 1 48 239 1 48 242 1 48 245 1 48 248 1 48 249 1 48 251 1 48 254 1 48 255 1 48 257 1 48 258 1 48 260 1 48 335 1 48 341 1 48 346 1 48 350 1 48 353 1 48 356 1 48 357 1 48 418 1 48 423 1 48 427 1 48 430 1 48 433 1 48 434 1 48 438 1 48 442 1 48 445 1 48 448 1 48 449 1 48 452 1 48 455 1 48 458 1 48 459 1 48 461 1 48 464 1 48 465 1 48 467 1 48 468 1 48 470 1 48 544 1 48 549 1 48 553 1 48 556 1 48 559 1 48 560 1 48 564 1 48 568 1 48 571 1 48 574 1 48 575 1 48 578 1 48 581 1 48 584 1 48 585 1 48 587 1 48 590 1 48 591 1 48 593 1 48 594 1 48 596 1 48 669 1 48 673 1 48 676 1 48 679 1 48 680 1 48 683 1 48 686 1 48 689 1 48 690 1 48 692 1 48 695 1 48 696 1 48 698 1 48 699 1 48 701 1 48 703 1 48 706 1 48 709 1 48 710 1 48 712 1 48 715 1 48 716 1 48 718 1 48 719 1 48 721 1 48 722 1 48 725 1 48 726 1 48 728 1 48 729 1 48 731 1 48 732 1 48 733 1 48 735 1 48 736 1 48 797 1 48 803 1 48 808 1 48 812 1 48 815 1 48 818 1 48 819 1 48 880 1 48 885 1 48 889 1 48 892 1 48 895 1 48 896 1 48 900 1 48 904 1 48 907 1 48 910 1 48 911 1 48 914 1 48 917 1 48 920 1 48 921 1 48 923 1 48 926 1 48 927 1 48 929 1 48 930 1 48 932 1 48 1006 1 48 1011 1 48 1015 1 48 1018 1 48 1021 1 48 1022 1 48 1026 1 48 1030 1 48 1033 1 48 1036 1 48 1037 1 48 1040 1 48 1043 1 48 1046 1 48 1047 1 48 1049 1 48 1052 1 48 1053 1 48 1055 1 48 1056 1 48 1058 1 48 1131 1 48 1135 1 48 1138 1 48 1141 1 48 1142 1 48 1145 1 48 1148 1 48 1151 1 48 1152 1 48 1154 1 48 1157 1 48 1158 1 48 1160 1 48 1161 1 48 1163 1 48 1165 1 48 1168 1 48 1171 1 48 1172 1 48 1174 1 48 1177 1 48 1178 1 48 1180 1 48 1181 1 48 1183 1 48 1184 1 48 1187 1 48 1188 1 48 1190 1 48 1191 1 48 1193 1 48 1194 1 48 1195 1 48 1197 1 48 1198 1 48 1258 1 48 1263 1 48 1267 1 48 1270 1 48 1273 1 48 1274 1 48 1278 1 48 1282 1 48 1285 1 48 1288 1 48 1289 1 48 1292 1 48 1295 1 48 1298 1 48 1299 1 48 1301 1 48 1304 1 48 1305 1 48 1307 1 48 1308 1 48 1310 1 48 1383 1 48 1387 1 48 1390 1 48 1393 1 48 1394 1 48 1397 1 48 1400 1 48 1403 1 48 1404 1 48 1406 1 48 1409 1 48 1410 1 48 1412 1 48 1413 1 48 1415 1 48 1417 1 48 1420 1 48 1423 1 48 1424 1 48 1426 1 48 1429 1 48 1430 1 48 1432 1 48 1433 1 48 1435 1 48 1436 1 48 1439 1 48 1440 1 48 1442 1 48 1443 1 48 1445 1 48 1446 1 48 1447 1 48 1449 1 48 1450 1 48 1509 1 48 1513 1 48 1516 1 48 1519 1 48 1520 1 48 1523 1 48 1526 1 48 1529 1 48 1530 1 48 1532 1 48 1535 1 48 1536 1 48 1538 1 48 1539 1 48 1541 1 48 1543 1 48 1546 1 48 1549 1 48 1550 1 48 1552 1 48 1555 1 48 1556 1 48 1558 1 48 1559 1 48 1561 1 48 1562 1 48 1565 1 48 1566 1 48 1568 1 48 1569 1 48 1571 1 48 1572 1 48 1573 1 48 1575 1 48 1576 1 48 1634 1 48 1637 1 48 1640 1 48 1641 1 48 1643 1 48 1646 1 48 1647 1 48 1649 1 48 1650 1 48 1652 1 48 1653 1 48 1656 1 48 1657 1 48 1659 1 48 1660 1 48 1662 1 48 1663 1 48 1664 1 48 1666 1 48 1667 1 48 1668 1 48 1671 1 48 1672 1 48 1674 1 48 1675 1 48 1677 1 48 1678 1 48 1679 1 48 1681 1 48 1682 1 48 1683 1 48 1684 1 48 1686 1 48 1687 1 48 1688 1 49 7 1 49 42 1 49 48 1 49 53 1 49 57 1 49 60 1 49 62 1 49 64 1 49 126 1 49 132 1 49 137 1 49 141 1 49 144 1 49 146 1 49 148 1 49 209 1 49 214 1 49 218 1 49 221 1 49 223 1 49 225 1 49 229 1 49 233 1 49 236 1 49 238 1 49 240 1 49 243 1 49 246 1 49 248 1 49 250 1 49 252 1 49 254 1 49 256 1 49 257 1 49 259 1 49 260 1 49 336 1 49 342 1 49 347 1 49 351 1 49 354 1 49 356 1 49 358 1 49 419 1 49 424 1 49 428 1 49 431 1 49 433 1 49 435 1 49 439 1 49 443 1 49 446 1 49 448 1 49 450 1 49 453 1 49 456 1 49 458 1 49 460 1 49 462 1 49 464 1 49 466 1 49 467 1 49 469 1 49 470 1 49 545 1 49 550 1 49 554 1 49 557 1 49 559 1 49 561 1 49 565 1 49 569 1 49 572 1 49 574 1 49 576 1 49 579 1 49 582 1 49 584 1 49 586 1 49 588 1 49 590 1 49 592 1 49 593 1 49 595 1 49 596 1 49 670 1 49 674 1 49 677 1 49 679 1 49 681 1 49 684 1 49 687 1 49 689 1 49 691 1 49 693 1 49 695 1 49 697 1 49 698 1 49 700 1 49 701 1 49 704 1 49 707 1 49 709 1 49 711 1 49 713 1 49 715 1 49 717 1 49 718 1 49 720 1 49 721 1 49 723 1 49 725 1 49 727 1 49 728 1 49 730 1 49 731 1 49 732 1 49 734 1 49 735 1 49 736 1 49 798 1 49 804 1 49 809 1 49 813 1 49 816 1 49 818 1 49 820 1 49 881 1 49 886 1 49 890 1 49 893 1 49 895 1 49 897 1 49 901 1 49 905 1 49 908 1 49 910 1 49 912 1 49 915 1 49 918 1 49 920 1 49 922 1 49 924 1 49 926 1 49 928 1 49 929 1 49 931 1 49 932 1 49 1007 1 49 1012 1 49 1016 1 49 1019 1 49 1021 1 49 1023 1 49 1027 1 49 1031 1 49 1034 1 49 1036 1 49 1038 1 49 1041 1 49 1044 1 49 1046 1 49 1048 1 49 1050 1 49 1052 1 49 1054 1 49 1055 1 49 1057 1 49 1058 1 49 1132 1 49 1136 1 49 1139 1 49 1141 1 49 1143 1 49 1146 1 49 1149 1 49 1151 1 49 1153 1 49 1155 1 49 1157 1 49 1159 1 49 1160 1 49 1162 1 49 1163 1 49 1166 1 49 1169 1 49 1171 1 49 1173 1 49 1175 1 49 1177 1 49 1179 1 49 1180 1 49 1182 1 49 1183 1 49 1185 1 49 1187 1 49 1189 1 49 1190 1 49 1192 1 49 1193 1 49 1194 1 49 1196 1 49 1197 1 49 1198 1 49 1259 1 49 1264 1 49 1268 1 49 1271 1 49 1273 1 49 1275 1 49 1279 1 49 1283 1 49 1286 1 49 1288 1 49 1290 1 49 1293 1 49 1296 1 49 1298 1 49 1300 1 49 1302 1 49 1304 1 49 1306 1 49 1307 1 49 1309 1 49 1310 1 49 1384 1 49 1388 1 49 1391 1 49 1393 1 49 1395 1 49 1398 1 49 1401 1 49 1403 1 49 1405 1 49 1407 1 49 1409 1 49 1411 1 49 1412 1 49 1414 1 49 1415 1 49 1418 1 49 1421 1 49 1423 1 49 1425 1 49 1427 1 49 1429 1 49 1431 1 49 1432 1 49 1434 1 49 1435 1 49 1437 1 49 1439 1 49 1441 1 49 1442 1 49 1444 1 49 1445 1 49 1446 1 49 1448 1 49 1449 1 49 1450 1 49 1510 1 49 1514 1 49 1517 1 49 1519 1 49 1521 1 49 1524 1 49 1527 1 49 1529 1 49 1531 1 49 1533 1 49 1535 1 49 1537 1 49 1538 1 49 1540 1 49 1541 1 49 1544 1 49 1547 1 49 1549 1 49 1551 1 49 1553 1 49 1555 1 49 1557 1 49 1558 1 49 1560 1 49 1561 1 49 1563 1 49 1565 1 49 1567 1 49 1568 1 49 1570 1 49 1571 1 49 1572 1 49 1574 1 49 1575 1 49 1576 1 49 1635 1 49 1638 1 49 1640 1 49 1642 1 49 1644 1 49 1646 1 49 1648 1 49 1649 1 49 1651 1 49 1652 1 49 1654 1 49 1656 1 49 1658 1 49 1659 1 49 1661 1 49 1662 1 49 1663 1 49 1665 1 49 1666 1 49 1667 1 49 1669 1 49 1671 1 49 1673 1 49 1674 1 49 1676 1 49 1677 1 49 1678 1 49 1680 1 49 1681 1 49 1682 1 49 1683 1 49 1685 1 49 1686 1 49 1687 1 49 1688 1 50 8 1 50 43 1 50 49 1 50 54 1 50 58 1 50 61 1 50 63 1 50 64 1 50 127 1 50 133 1 50 138 1 50 142 1 50 145 1 50 147 1 50 148 1 50 210 1 50 215 1 50 219 1 50 222 1 50 224 1 50 225 1 50 230 1 50 234 1 50 237 1 50 239 1 50 240 1 50 244 1 50 247 1 50 249 1 50 250 1 50 253 1 50 255 1 50 256 1 50 258 1 50 259 1 50 260 1 50 337 1 50 343 1 50 348 1 50 352 1 50 355 1 50 357 1 50 358 1 50 420 1 50 425 1 50 429 1 50 432 1 50 434 1 50 435 1 50 440 1 50 444 1 50 447 1 50 449 1 50 450 1 50 454 1 50 457 1 50 459 1 50 460 1 50 463 1 50 465 1 50 466 1 50 468 1 50 469 1 50 470 1 50 546 1 50 551 1 50 555 1 50 558 1 50 560 1 50 561 1 50 566 1 50 570 1 50 573 1 50 575 1 50 576 1 50 580 1 50 583 1 50 585 1 50 586 1 50 589 1 50 591 1 50 592 1 50 594 1 50 595 1 50 596 1 50 671 1 50 675 1 50 678 1 50 680 1 50 681 1 50 685 1 50 688 1 50 690 1 50 691 1 50 694 1 50 696 1 50 697 1 50 699 1 50 700 1 50 701 1 50 705 1 50 708 1 50 710 1 50 711 1 50 714 1 50 716 1 50 717 1 50 719 1 50 720 1 50 721 1 50 724 1 50 726 1 50 727 1 50 729 1 50 730 1 50 731 1 50 733 1 50 734 1 50 735 1 50 736 1 50 799 1 50 805 1 50 810 1 50 814 1 50 817 1 50 819 1 50 820 1 50 882 1 50 887 1 50 891 1 50 894 1 50 896 1 50 897 1 50 902 1 50 906 1 50 909 1 50 911 1 50 912 1 50 916 1 50 919 1 50 921 1 50 922 1 50 925 1 50 927 1 50 928 1 50 930 1 50 931 1 50 932 1 50 1008 1 50 1013 1 50 1017 1 50 1020 1 50 1022 1 50 1023 1 50 1028 1 50 1032 1 50 1035 1 50 1037 1 50 1038 1 50 1042 1 50 1045 1 50 1047 1 50 1048 1 50 1051 1 50 1053 1 50 1054 1 50 1056 1 50 1057 1 50 1058 1 50 1133 1 50 1137 1 50 1140 1 50 1142 1 50 1143 1 50 1147 1 50 1150 1 50 1152 1 50 1153 1 50 1156 1 50 1158 1 50 1159 1 50 1161 1 50 1162 1 50 1163 1 50 1167 1 50 1170 1 50 1172 1 50 1173 1 50 1176 1 50 1178 1 50 1179 1 50 1181 1 50 1182 1 50 1183 1 50 1186 1 50 1188 1 50 1189 1 50 1191 1 50 1192 1 50 1193 1 50 1195 1 50 1196 1 50 1197 1 50 1198 1 50 1260 1 50 1265 1 50 1269 1 50 1272 1 50 1274 1 50 1275 1 50 1280 1 50 1284 1 50 1287 1 50 1289 1 50 1290 1 50 1294 1 50 1297 1 50 1299 1 50 1300 1 50 1303 1 50 1305 1 50 1306 1 50 1308 1 50 1309 1 50 1310 1 50 1385 1 50 1389 1 50 1392 1 50 1394 1 50 1395 1 50 1399 1 50 1402 1 50 1404 1 50 1405 1 50 1408 1 50 1410 1 50 1411 1 50 1413 1 50 1414 1 50 1415 1 50 1419 1 50 1422 1 50 1424 1 50 1425 1 50 1428 1 50 1430 1 50 1431 1 50 1433 1 50 1434 1 50 1435 1 50 1438 1 50 1440 1 50 1441 1 50 1443 1 50 1444 1 50 1445 1 50 1447 1 50 1448 1 50 1449 1 50 1450 1 50 1511 1 50 1515 1 50 1518 1 50 1520 1 50 1521 1 50 1525 1 50 1528 1 50 1530 1 50 1531 1 50 1534 1 50 1536 1 50 1537 1 50 1539 1 50 1540 1 50 1541 1 50 1545 1 50 1548 1 50 1550 1 50 1551 1 50 1554 1 50 1556 1 50 1557 1 50 1559 1 50 1560 1 50 1561 1 50 1564 1 50 1566 1 50 1567 1 50 1569 1 50 1570 1 50 1571 1 50 1573 1 50 1574 1 50 1575 1 50 1576 1 50 1636 1 50 1639 1 50 1641 1 50 1642 1 50 1645 1 50 1647 1 50 1648 1 50 1650 1 50 1651 1 50 1652 1 50 1655 1 50 1657 1 50 1658 1 50 1660 1 50 1661 1 50 1662 1 50 1664 1 50 1665 1 50 1666 1 50 1667 1 50 1670 1 50 1672 1 50 1673 1 50 1675 1 50 1676 1 50 1677 1 50 1679 1 50 1680 1 50 1681 1 50 1682 1 50 1684 1 50 1685 1 50 1686 1 50 1687 1 50 1688 1 51 9 1 51 37 1 51 65 1 51 66 1 51 67 1 51 68 1 51 69 1 51 70 1 51 121 1 51 149 1 51 150 1 51 151 1 51 152 1 51 153 1 51 154 1 51 205 1 51 206 1 51 207 1 51 208 1 51 209 1 51 210 1 51 261 1 51 262 1 51 263 1 51 264 1 51 265 1 51 266 1 51 267 1 51 268 1 51 269 1 51 270 1 51 271 1 51 272 1 51 273 1 51 274 1 51 275 1 51 331 1 51 359 1 51 360 1 51 361 1 51 362 1 51 363 1 51 364 1 51 415 1 51 416 1 51 417 1 51 418 1 51 419 1 51 420 1 51 471 1 51 472 1 51 473 1 51 474 1 51 475 1 51 476 1 51 477 1 51 478 1 51 479 1 51 480 1 51 481 1 51 482 1 51 483 1 51 484 1 51 485 1 51 541 1 51 542 1 51 543 1 51 544 1 51 545 1 51 546 1 51 597 1 51 598 1 51 599 1 51 600 1 51 601 1 51 602 1 51 603 1 51 604 1 51 605 1 51 606 1 51 607 1 51 608 1 51 609 1 51 610 1 51 611 1 51 667 1 51 668 1 51 669 1 51 670 1 51 671 1 51 672 1 51 673 1 51 674 1 51 675 1 51 676 1 51 677 1 51 678 1 51 679 1 51 680 1 51 681 1 51 737 1 51 738 1 51 739 1 51 740 1 51 741 1 51 742 1 51 743 1 51 744 1 51 745 1 51 746 1 51 747 1 51 748 1 51 749 1 51 750 1 51 751 1 51 752 1 51 753 1 51 754 1 51 755 1 51 756 1 51 793 1 51 821 1 51 822 1 51 823 1 51 824 1 51 825 1 51 826 1 51 877 1 51 878 1 51 879 1 51 880 1 51 881 1 51 882 1 51 933 1 51 934 1 51 935 1 51 936 1 51 937 1 51 938 1 51 939 1 51 940 1 51 941 1 51 942 1 51 943 1 51 944 1 51 945 1 51 946 1 51 947 1 51 1003 1 51 1004 1 51 1005 1 51 1006 1 51 1007 1 51 1008 1 51 1059 1 51 1060 1 51 1061 1 51 1062 1 51 1063 1 51 1064 1 51 1065 1 51 1066 1 51 1067 1 51 1068 1 51 1069 1 51 1070 1 51 1071 1 51 1072 1 51 1073 1 51 1129 1 51 1130 1 51 1131 1 51 1132 1 51 1133 1 51 1134 1 51 1135 1 51 1136 1 51 1137 1 51 1138 1 51 1139 1 51 1140 1 51 1141 1 51 1142 1 51 1143 1 51 1199 1 51 1200 1 51 1201 1 51 1202 1 51 1203 1 51 1204 1 51 1205 1 51 1206 1 51 1207 1 51 1208 1 51 1209 1 51 1210 1 51 1211 1 51 1212 1 51 1213 1 51 1214 1 51 1215 1 51 1216 1 51 1217 1 51 1218 1 51 1255 1 51 1256 1 51 1257 1 51 1258 1 51 1259 1 51 1260 1 51 1311 1 51 1312 1 51 1313 1 51 1314 1 51 1315 1 51 1316 1 51 1317 1 51 1318 1 51 1319 1 51 1320 1 51 1321 1 51 1322 1 51 1323 1 51 1324 1 51 1325 1 51 1381 1 51 1382 1 51 1383 1 51 1384 1 51 1385 1 51 1386 1 51 1387 1 51 1388 1 51 1389 1 51 1390 1 51 1391 1 51 1392 1 51 1393 1 51 1394 1 51 1395 1 51 1451 1 51 1452 1 51 1453 1 51 1454 1 51 1455 1 51 1456 1 51 1457 1 51 1458 1 51 1459 1 51 1460 1 51 1461 1 51 1462 1 51 1463 1 51 1464 1 51 1465 1 51 1466 1 51 1467 1 51 1468 1 51 1469 1 51 1470 1 51 1507 1 51 1508 1 51 1509 1 51 1510 1 51 1511 1 51 1512 1 51 1513 1 51 1514 1 51 1515 1 51 1516 1 51 1517 1 51 1518 1 51 1519 1 51 1520 1 51 1521 1 51 1577 1 51 1578 1 51 1579 1 51 1580 1 51 1581 1 51 1582 1 51 1583 1 51 1584 1 51 1585 1 51 1586 1 51 1587 1 51 1588 1 51 1589 1 51 1590 1 51 1591 1 51 1592 1 51 1593 1 51 1594 1 51 1595 1 51 1596 1 51 1633 1 51 1634 1 51 1635 1 51 1636 1 51 1637 1 51 1638 1 51 1639 1 51 1640 1 51 1641 1 51 1642 1 51 1643 1 51 1644 1 51 1645 1 51 1646 1 51 1647 1 51 1648 1 51 1649 1 51 1650 1 51 1651 1 51 1652 1 51 1689 1 51 1690 1 51 1691 1 51 1692 1 51 1693 1 51 1694 1 51 1695 1 51 1696 1 51 1697 1 51 1698 1 51 1699 1 51 1700 1 51 1701 1 51 1702 1 51 1703 1 52 10 1 52 38 1 52 65 1 52 71 1 52 72 1 52 73 1 52 74 1 52 75 1 52 122 1 52 149 1 52 155 1 52 156 1 52 157 1 52 158 1 52 159 1 52 205 1 52 211 1 52 212 1 52 213 1 52 214 1 52 215 1 52 261 1 52 262 1 52 263 1 52 264 1 52 265 1 52 276 1 52 277 1 52 278 1 52 279 1 52 280 1 52 281 1 52 282 1 52 283 1 52 284 1 52 285 1 52 332 1 52 359 1 52 365 1 52 366 1 52 367 1 52 368 1 52 369 1 52 415 1 52 421 1 52 422 1 52 423 1 52 424 1 52 425 1 52 471 1 52 472 1 52 473 1 52 474 1 52 475 1 52 486 1 52 487 1 52 488 1 52 489 1 52 490 1 52 491 1 52 492 1 52 493 1 52 494 1 52 495 1 52 541 1 52 547 1 52 548 1 52 549 1 52 550 1 52 551 1 52 597 1 52 598 1 52 599 1 52 600 1 52 601 1 52 612 1 52 613 1 52 614 1 52 615 1 52 616 1 52 617 1 52 618 1 52 619 1 52 620 1 52 621 1 52 667 1 52 668 1 52 669 1 52 670 1 52 671 1 52 682 1 52 683 1 52 684 1 52 685 1 52 686 1 52 687 1 52 688 1 52 689 1 52 690 1 52 691 1 52 737 1 52 738 1 52 739 1 52 740 1 52 741 1 52 742 1 52 743 1 52 744 1 52 745 1 52 746 1 52 757 1 52 758 1 52 759 1 52 760 1 52 761 1 52 762 1 52 763 1 52 764 1 52 765 1 52 766 1 52 794 1 52 821 1 52 827 1 52 828 1 52 829 1 52 830 1 52 831 1 52 877 1 52 883 1 52 884 1 52 885 1 52 886 1 52 887 1 52 933 1 52 934 1 52 935 1 52 936 1 52 937 1 52 948 1 52 949 1 52 950 1 52 951 1 52 952 1 52 953 1 52 954 1 52 955 1 52 956 1 52 957 1 52 1003 1 52 1009 1 52 1010 1 52 1011 1 52 1012 1 52 1013 1 52 1059 1 52 1060 1 52 1061 1 52 1062 1 52 1063 1 52 1074 1 52 1075 1 52 1076 1 52 1077 1 52 1078 1 52 1079 1 52 1080 1 52 1081 1 52 1082 1 52 1083 1 52 1129 1 52 1130 1 52 1131 1 52 1132 1 52 1133 1 52 1144 1 52 1145 1 52 1146 1 52 1147 1 52 1148 1 52 1149 1 52 1150 1 52 1151 1 52 1152 1 52 1153 1 52 1199 1 52 1200 1 52 1201 1 52 1202 1 52 1203 1 52 1204 1 52 1205 1 52 1206 1 52 1207 1 52 1208 1 52 1219 1 52 1220 1 52 1221 1 52 1222 1 52 1223 1 52 1224 1 52 1225 1 52 1226 1 52 1227 1 52 1228 1 52 1255 1 52 1261 1 52 1262 1 52 1263 1 52 1264 1 52 1265 1 52 1311 1 52 1312 1 52 1313 1 52 1314 1 52 1315 1 52 1326 1 52 1327 1 52 1328 1 52 1329 1 52 1330 1 52 1331 1 52 1332 1 52 1333 1 52 1334 1 52 1335 1 52 1381 1 52 1382 1 52 1383 1 52 1384 1 52 1385 1 52 1396 1 52 1397 1 52 1398 1 52 1399 1 52 1400 1 52 1401 1 52 1402 1 52 1403 1 52 1404 1 52 1405 1 52 1451 1 52 1452 1 52 1453 1 52 1454 1 52 1455 1 52 1456 1 52 1457 1 52 1458 1 52 1459 1 52 1460 1 52 1471 1 52 1472 1 52 1473 1 52 1474 1 52 1475 1 52 1476 1 52 1477 1 52 1478 1 52 1479 1 52 1480 1 52 1507 1 52 1508 1 52 1509 1 52 1510 1 52 1511 1 52 1522 1 52 1523 1 52 1524 1 52 1525 1 52 1526 1 52 1527 1 52 1528 1 52 1529 1 52 1530 1 52 1531 1 52 1577 1 52 1578 1 52 1579 1 52 1580 1 52 1581 1 52 1582 1 52 1583 1 52 1584 1 52 1585 1 52 1586 1 52 1597 1 52 1598 1 52 1599 1 52 1600 1 52 1601 1 52 1602 1 52 1603 1 52 1604 1 52 1605 1 52 1606 1 52 1633 1 52 1634 1 52 1635 1 52 1636 1 52 1637 1 52 1638 1 52 1639 1 52 1640 1 52 1641 1 52 1642 1 52 1653 1 52 1654 1 52 1655 1 52 1656 1 52 1657 1 52 1658 1 52 1659 1 52 1660 1 52 1661 1 52 1662 1 52 1689 1 52 1690 1 52 1691 1 52 1692 1 52 1693 1 52 1694 1 52 1695 1 52 1696 1 52 1697 1 52 1698 1 52 1704 1 52 1705 1 52 1706 1 52 1707 1 52 1708 1 53 11 1 53 39 1 53 66 1 53 71 1 53 76 1 53 77 1 53 78 1 53 79 1 53 123 1 53 150 1 53 155 1 53 160 1 53 161 1 53 162 1 53 163 1 53 206 1 53 211 1 53 216 1 53 217 1 53 218 1 53 219 1 53 261 1 53 266 1 53 267 1 53 268 1 53 269 1 53 276 1 53 277 1 53 278 1 53 279 1 53 286 1 53 287 1 53 288 1 53 289 1 53 290 1 53 291 1 53 333 1 53 360 1 53 365 1 53 370 1 53 371 1 53 372 1 53 373 1 53 416 1 53 421 1 53 426 1 53 427 1 53 428 1 53 429 1 53 471 1 53 476 1 53 477 1 53 478 1 53 479 1 53 486 1 53 487 1 53 488 1 53 489 1 53 496 1 53 497 1 53 498 1 53 499 1 53 500 1 53 501 1 53 542 1 53 547 1 53 552 1 53 553 1 53 554 1 53 555 1 53 597 1 53 602 1 53 603 1 53 604 1 53 605 1 53 612 1 53 613 1 53 614 1 53 615 1 53 622 1 53 623 1 53 624 1 53 625 1 53 626 1 53 627 1 53 667 1 53 672 1 53 673 1 53 674 1 53 675 1 53 682 1 53 683 1 53 684 1 53 685 1 53 692 1 53 693 1 53 694 1 53 695 1 53 696 1 53 697 1 53 737 1 53 738 1 53 739 1 53 740 1 53 747 1 53 748 1 53 749 1 53 750 1 53 751 1 53 752 1 53 757 1 53 758 1 53 759 1 53 760 1 53 761 1 53 762 1 53 767 1 53 768 1 53 769 1 53 770 1 53 795 1 53 822 1 53 827 1 53 832 1 53 833 1 53 834 1 53 835 1 53 878 1 53 883 1 53 888 1 53 889 1 53 890 1 53 891 1 53 933 1 53 938 1 53 939 1 53 940 1 53 941 1 53 948 1 53 949 1 53 950 1 53 951 1 53 958 1 53 959 1 53 960 1 53 961 1 53 962 1 53 963 1 53 1004 1 53 1009 1 53 1014 1 53 1015 1 53 1016 1 53 1017 1 53 1059 1 53 1064 1 53 1065 1 53 1066 1 53 1067 1 53 1074 1 53 1075 1 53 1076 1 53 1077 1 53 1084 1 53 1085 1 53 1086 1 53 1087 1 53 1088 1 53 1089 1 53 1129 1 53 1134 1 53 1135 1 53 1136 1 53 1137 1 53 1144 1 53 1145 1 53 1146 1 53 1147 1 53 1154 1 53 1155 1 53 1156 1 53 1157 1 53 1158 1 53 1159 1 53 1199 1 53 1200 1 53 1201 1 53 1202 1 53 1209 1 53 1210 1 53 1211 1 53 1212 1 53 1213 1 53 1214 1 53 1219 1 53 1220 1 53 1221 1 53 1222 1 53 1223 1 53 1224 1 53 1229 1 53 1230 1 53 1231 1 53 1232 1 53 1256 1 53 1261 1 53 1266 1 53 1267 1 53 1268 1 53 1269 1 53 1311 1 53 1316 1 53 1317 1 53 1318 1 53 1319 1 53 1326 1 53 1327 1 53 1328 1 53 1329 1 53 1336 1 53 1337 1 53 1338 1 53 1339 1 53 1340 1 53 1341 1 53 1381 1 53 1386 1 53 1387 1 53 1388 1 53 1389 1 53 1396 1 53 1397 1 53 1398 1 53 1399 1 53 1406 1 53 1407 1 53 1408 1 53 1409 1 53 1410 1 53 1411 1 53 1451 1 53 1452 1 53 1453 1 53 1454 1 53 1461 1 53 1462 1 53 1463 1 53 1464 1 53 1465 1 53 1466 1 53 1471 1 53 1472 1 53 1473 1 53 1474 1 53 1475 1 53 1476 1 53 1481 1 53 1482 1 53 1483 1 53 1484 1 53 1507 1 53 1512 1 53 1513 1 53 1514 1 53 1515 1 53 1522 1 53 1523 1 53 1524 1 53 1525 1 53 1532 1 53 1533 1 53 1534 1 53 1535 1 53 1536 1 53 1537 1 53 1577 1 53 1578 1 53 1579 1 53 1580 1 53 1587 1 53 1588 1 53 1589 1 53 1590 1 53 1591 1 53 1592 1 53 1597 1 53 1598 1 53 1599 1 53 1600 1 53 1601 1 53 1602 1 53 1607 1 53 1608 1 53 1609 1 53 1610 1 53 1633 1 53 1634 1 53 1635 1 53 1636 1 53 1643 1 53 1644 1 53 1645 1 53 1646 1 53 1647 1 53 1648 1 53 1653 1 53 1654 1 53 1655 1 53 1656 1 53 1657 1 53 1658 1 53 1663 1 53 1664 1 53 1665 1 53 1666 1 53 1689 1 53 1690 1 53 1691 1 53 1692 1 53 1693 1 53 1694 1 53 1699 1 53 1700 1 53 1701 1 53 1702 1 53 1704 1 53 1705 1 53 1706 1 53 1707 1 53 1709 1 54 12 1 54 40 1 54 67 1 54 72 1 54 76 1 54 80 1 54 81 1 54 82 1 54 124 1 54 151 1 54 156 1 54 160 1 54 164 1 54 165 1 54 166 1 54 207 1 54 212 1 54 216 1 54 220 1 54 221 1 54 222 1 54 262 1 54 266 1 54 270 1 54 271 1 54 272 1 54 276 1 54 280 1 54 281 1 54 282 1 54 286 1 54 287 1 54 288 1 54 292 1 54 293 1 54 294 1 54 334 1 54 361 1 54 366 1 54 370 1 54 374 1 54 375 1 54 376 1 54 417 1 54 422 1 54 426 1 54 430 1 54 431 1 54 432 1 54 472 1 54 476 1 54 480 1 54 481 1 54 482 1 54 486 1 54 490 1 54 491 1 54 492 1 54 496 1 54 497 1 54 498 1 54 502 1 54 503 1 54 504 1 54 543 1 54 548 1 54 552 1 54 556 1 54 557 1 54 558 1 54 598 1 54 602 1 54 606 1 54 607 1 54 608 1 54 612 1 54 616 1 54 617 1 54 618 1 54 622 1 54 623 1 54 624 1 54 628 1 54 629 1 54 630 1 54 668 1 54 672 1 54 676 1 54 677 1 54 678 1 54 682 1 54 686 1 54 687 1 54 688 1 54 692 1 54 693 1 54 694 1 54 698 1 54 699 1 54 700 1 54 737 1 54 741 1 54 742 1 54 743 1 54 747 1 54 748 1 54 749 1 54 753 1 54 754 1 54 755 1 54 757 1 54 758 1 54 759 1 54 763 1 54 764 1 54 765 1 54 767 1 54 768 1 54 769 1 54 771 1 54 796 1 54 823 1 54 828 1 54 832 1 54 836 1 54 837 1 54 838 1 54 879 1 54 884 1 54 888 1 54 892 1 54 893 1 54 894 1 54 934 1 54 938 1 54 942 1 54 943 1 54 944 1 54 948 1 54 952 1 54 953 1 54 954 1 54 958 1 54 959 1 54 960 1 54 964 1 54 965 1 54 966 1 54 1005 1 54 1010 1 54 1014 1 54 1018 1 54 1019 1 54 1020 1 54 1060 1 54 1064 1 54 1068 1 54 1069 1 54 1070 1 54 1074 1 54 1078 1 54 1079 1 54 1080 1 54 1084 1 54 1085 1 54 1086 1 54 1090 1 54 1091 1 54 1092 1 54 1130 1 54 1134 1 54 1138 1 54 1139 1 54 1140 1 54 1144 1 54 1148 1 54 1149 1 54 1150 1 54 1154 1 54 1155 1 54 1156 1 54 1160 1 54 1161 1 54 1162 1 54 1199 1 54 1203 1 54 1204 1 54 1205 1 54 1209 1 54 1210 1 54 1211 1 54 1215 1 54 1216 1 54 1217 1 54 1219 1 54 1220 1 54 1221 1 54 1225 1 54 1226 1 54 1227 1 54 1229 1 54 1230 1 54 1231 1 54 1233 1 54 1257 1 54 1262 1 54 1266 1 54 1270 1 54 1271 1 54 1272 1 54 1312 1 54 1316 1 54 1320 1 54 1321 1 54 1322 1 54 1326 1 54 1330 1 54 1331 1 54 1332 1 54 1336 1 54 1337 1 54 1338 1 54 1342 1 54 1343 1 54 1344 1 54 1382 1 54 1386 1 54 1390 1 54 1391 1 54 1392 1 54 1396 1 54 1400 1 54 1401 1 54 1402 1 54 1406 1 54 1407 1 54 1408 1 54 1412 1 54 1413 1 54 1414 1 54 1451 1 54 1455 1 54 1456 1 54 1457 1 54 1461 1 54 1462 1 54 1463 1 54 1467 1 54 1468 1 54 1469 1 54 1471 1 54 1472 1 54 1473 1 54 1477 1 54 1478 1 54 1479 1 54 1481 1 54 1482 1 54 1483 1 54 1485 1 54 1508 1 54 1512 1 54 1516 1 54 1517 1 54 1518 1 54 1522 1 54 1526 1 54 1527 1 54 1528 1 54 1532 1 54 1533 1 54 1534 1 54 1538 1 54 1539 1 54 1540 1 54 1577 1 54 1581 1 54 1582 1 54 1583 1 54 1587 1 54 1588 1 54 1589 1 54 1593 1 54 1594 1 54 1595 1 54 1597 1 54 1598 1 54 1599 1 54 1603 1 54 1604 1 54 1605 1 54 1607 1 54 1608 1 54 1609 1 54 1611 1 54 1633 1 54 1637 1 54 1638 1 54 1639 1 54 1643 1 54 1644 1 54 1645 1 54 1649 1 54 1650 1 54 1651 1 54 1653 1 54 1654 1 54 1655 1 54 1659 1 54 1660 1 54 1661 1 54 1663 1 54 1664 1 54 1665 1 54 1667 1 54 1689 1 54 1690 1 54 1691 1 54 1695 1 54 1696 1 54 1697 1 54 1699 1 54 1700 1 54 1701 1 54 1703 1 54 1704 1 54 1705 1 54 1706 1 54 1708 1 54 1709 1 55 13 1 55 41 1 55 68 1 55 73 1 55 77 1 55 80 1 55 83 1 55 84 1 55 125 1 55 152 1 55 157 1 55 161 1 55 164 1 55 167 1 55 168 1 55 208 1 55 213 1 55 217 1 55 220 1 55 223 1 55 224 1 55 263 1 55 267 1 55 270 1 55 273 1 55 274 1 55 277 1 55 280 1 55 283 1 55 284 1 55 286 1 55 289 1 55 290 1 55 292 1 55 293 1 55 295 1 55 335 1 55 362 1 55 367 1 55 371 1 55 374 1 55 377 1 55 378 1 55 418 1 55 423 1 55 427 1 55 430 1 55 433 1 55 434 1 55 473 1 55 477 1 55 480 1 55 483 1 55 484 1 55 487 1 55 490 1 55 493 1 55 494 1 55 496 1 55 499 1 55 500 1 55 502 1 55 503 1 55 505 1 55 544 1 55 549 1 55 553 1 55 556 1 55 559 1 55 560 1 55 599 1 55 603 1 55 606 1 55 609 1 55 610 1 55 613 1 55 616 1 55 619 1 55 620 1 55 622 1 55 625 1 55 626 1 55 628 1 55 629 1 55 631 1 55 669 1 55 673 1 55 676 1 55 679 1 55 680 1 55 683 1 55 686 1 55 689 1 55 690 1 55 692 1 55 695 1 55 696 1 55 698 1 55 699 1 55 701 1 55 738 1 55 741 1 55 744 1 55 745 1 55 747 1 55 750 1 55 751 1 55 753 1 55 754 1 55 756 1 55 757 1 55 760 1 55 761 1 55 763 1 55 764 1 55 766 1 55 767 1 55 768 1 55 770 1 55 771 1 55 797 1 55 824 1 55 829 1 55 833 1 55 836 1 55 839 1 55 840 1 55 880 1 55 885 1 55 889 1 55 892 1 55 895 1 55 896 1 55 935 1 55 939 1 55 942 1 55 945 1 55 946 1 55 949 1 55 952 1 55 955 1 55 956 1 55 958 1 55 961 1 55 962 1 55 964 1 55 965 1 55 967 1 55 1006 1 55 1011 1 55 1015 1 55 1018 1 55 1021 1 55 1022 1 55 1061 1 55 1065 1 55 1068 1 55 1071 1 55 1072 1 55 1075 1 55 1078 1 55 1081 1 55 1082 1 55 1084 1 55 1087 1 55 1088 1 55 1090 1 55 1091 1 55 1093 1 55 1131 1 55 1135 1 55 1138 1 55 1141 1 55 1142 1 55 1145 1 55 1148 1 55 1151 1 55 1152 1 55 1154 1 55 1157 1 55 1158 1 55 1160 1 55 1161 1 55 1163 1 55 1200 1 55 1203 1 55 1206 1 55 1207 1 55 1209 1 55 1212 1 55 1213 1 55 1215 1 55 1216 1 55 1218 1 55 1219 1 55 1222 1 55 1223 1 55 1225 1 55 1226 1 55 1228 1 55 1229 1 55 1230 1 55 1232 1 55 1233 1 55 1258 1 55 1263 1 55 1267 1 55 1270 1 55 1273 1 55 1274 1 55 1313 1 55 1317 1 55 1320 1 55 1323 1 55 1324 1 55 1327 1 55 1330 1 55 1333 1 55 1334 1 55 1336 1 55 1339 1 55 1340 1 55 1342 1 55 1343 1 55 1345 1 55 1383 1 55 1387 1 55 1390 1 55 1393 1 55 1394 1 55 1397 1 55 1400 1 55 1403 1 55 1404 1 55 1406 1 55 1409 1 55 1410 1 55 1412 1 55 1413 1 55 1415 1 55 1452 1 55 1455 1 55 1458 1 55 1459 1 55 1461 1 55 1464 1 55 1465 1 55 1467 1 55 1468 1 55 1470 1 55 1471 1 55 1474 1 55 1475 1 55 1477 1 55 1478 1 55 1480 1 55 1481 1 55 1482 1 55 1484 1 55 1485 1 55 1509 1 55 1513 1 55 1516 1 55 1519 1 55 1520 1 55 1523 1 55 1526 1 55 1529 1 55 1530 1 55 1532 1 55 1535 1 55 1536 1 55 1538 1 55 1539 1 55 1541 1 55 1578 1 55 1581 1 55 1584 1 55 1585 1 55 1587 1 55 1590 1 55 1591 1 55 1593 1 55 1594 1 55 1596 1 55 1597 1 55 1600 1 55 1601 1 55 1603 1 55 1604 1 55 1606 1 55 1607 1 55 1608 1 55 1610 1 55 1611 1 55 1634 1 55 1637 1 55 1640 1 55 1641 1 55 1643 1 55 1646 1 55 1647 1 55 1649 1 55 1650 1 55 1652 1 55 1653 1 55 1656 1 55 1657 1 55 1659 1 55 1660 1 55 1662 1 55 1663 1 55 1664 1 55 1666 1 55 1667 1 55 1689 1 55 1692 1 55 1693 1 55 1695 1 55 1696 1 55 1698 1 55 1699 1 55 1700 1 55 1702 1 55 1703 1 55 1704 1 55 1705 1 55 1707 1 55 1708 1 55 1709 1 56 14 1 56 42 1 56 69 1 56 74 1 56 78 1 56 81 1 56 83 1 56 85 1 56 126 1 56 153 1 56 158 1 56 162 1 56 165 1 56 167 1 56 169 1 56 209 1 56 214 1 56 218 1 56 221 1 56 223 1 56 225 1 56 264 1 56 268 1 56 271 1 56 273 1 56 275 1 56 278 1 56 281 1 56 283 1 56 285 1 56 287 1 56 289 1 56 291 1 56 292 1 56 294 1 56 295 1 56 336 1 56 363 1 56 368 1 56 372 1 56 375 1 56 377 1 56 379 1 56 419 1 56 424 1 56 428 1 56 431 1 56 433 1 56 435 1 56 474 1 56 478 1 56 481 1 56 483 1 56 485 1 56 488 1 56 491 1 56 493 1 56 495 1 56 497 1 56 499 1 56 501 1 56 502 1 56 504 1 56 505 1 56 545 1 56 550 1 56 554 1 56 557 1 56 559 1 56 561 1 56 600 1 56 604 1 56 607 1 56 609 1 56 611 1 56 614 1 56 617 1 56 619 1 56 621 1 56 623 1 56 625 1 56 627 1 56 628 1 56 630 1 56 631 1 56 670 1 56 674 1 56 677 1 56 679 1 56 681 1 56 684 1 56 687 1 56 689 1 56 691 1 56 693 1 56 695 1 56 697 1 56 698 1 56 700 1 56 701 1 56 739 1 56 742 1 56 744 1 56 746 1 56 748 1 56 750 1 56 752 1 56 753 1 56 755 1 56 756 1 56 758 1 56 760 1 56 762 1 56 763 1 56 765 1 56 766 1 56 767 1 56 769 1 56 770 1 56 771 1 56 798 1 56 825 1 56 830 1 56 834 1 56 837 1 56 839 1 56 841 1 56 881 1 56 886 1 56 890 1 56 893 1 56 895 1 56 897 1 56 936 1 56 940 1 56 943 1 56 945 1 56 947 1 56 950 1 56 953 1 56 955 1 56 957 1 56 959 1 56 961 1 56 963 1 56 964 1 56 966 1 56 967 1 56 1007 1 56 1012 1 56 1016 1 56 1019 1 56 1021 1 56 1023 1 56 1062 1 56 1066 1 56 1069 1 56 1071 1 56 1073 1 56 1076 1 56 1079 1 56 1081 1 56 1083 1 56 1085 1 56 1087 1 56 1089 1 56 1090 1 56 1092 1 56 1093 1 56 1132 1 56 1136 1 56 1139 1 56 1141 1 56 1143 1 56 1146 1 56 1149 1 56 1151 1 56 1153 1 56 1155 1 56 1157 1 56 1159 1 56 1160 1 56 1162 1 56 1163 1 56 1201 1 56 1204 1 56 1206 1 56 1208 1 56 1210 1 56 1212 1 56 1214 1 56 1215 1 56 1217 1 56 1218 1 56 1220 1 56 1222 1 56 1224 1 56 1225 1 56 1227 1 56 1228 1 56 1229 1 56 1231 1 56 1232 1 56 1233 1 56 1259 1 56 1264 1 56 1268 1 56 1271 1 56 1273 1 56 1275 1 56 1314 1 56 1318 1 56 1321 1 56 1323 1 56 1325 1 56 1328 1 56 1331 1 56 1333 1 56 1335 1 56 1337 1 56 1339 1 56 1341 1 56 1342 1 56 1344 1 56 1345 1 56 1384 1 56 1388 1 56 1391 1 56 1393 1 56 1395 1 56 1398 1 56 1401 1 56 1403 1 56 1405 1 56 1407 1 56 1409 1 56 1411 1 56 1412 1 56 1414 1 56 1415 1 56 1453 1 56 1456 1 56 1458 1 56 1460 1 56 1462 1 56 1464 1 56 1466 1 56 1467 1 56 1469 1 56 1470 1 56 1472 1 56 1474 1 56 1476 1 56 1477 1 56 1479 1 56 1480 1 56 1481 1 56 1483 1 56 1484 1 56 1485 1 56 1510 1 56 1514 1 56 1517 1 56 1519 1 56 1521 1 56 1524 1 56 1527 1 56 1529 1 56 1531 1 56 1533 1 56 1535 1 56 1537 1 56 1538 1 56 1540 1 56 1541 1 56 1579 1 56 1582 1 56 1584 1 56 1586 1 56 1588 1 56 1590 1 56 1592 1 56 1593 1 56 1595 1 56 1596 1 56 1598 1 56 1600 1 56 1602 1 56 1603 1 56 1605 1 56 1606 1 56 1607 1 56 1609 1 56 1610 1 56 1611 1 56 1635 1 56 1638 1 56 1640 1 56 1642 1 56 1644 1 56 1646 1 56 1648 1 56 1649 1 56 1651 1 56 1652 1 56 1654 1 56 1656 1 56 1658 1 56 1659 1 56 1661 1 56 1662 1 56 1663 1 56 1665 1 56 1666 1 56 1667 1 56 1690 1 56 1692 1 56 1694 1 56 1695 1 56 1697 1 56 1698 1 56 1699 1 56 1701 1 56 1702 1 56 1703 1 56 1704 1 56 1706 1 56 1707 1 56 1708 1 56 1709 1 57 15 1 57 43 1 57 70 1 57 75 1 57 79 1 57 82 1 57 84 1 57 85 1 57 127 1 57 154 1 57 159 1 57 163 1 57 166 1 57 168 1 57 169 1 57 210 1 57 215 1 57 219 1 57 222 1 57 224 1 57 225 1 57 265 1 57 269 1 57 272 1 57 274 1 57 275 1 57 279 1 57 282 1 57 284 1 57 285 1 57 288 1 57 290 1 57 291 1 57 293 1 57 294 1 57 295 1 57 337 1 57 364 1 57 369 1 57 373 1 57 376 1 57 378 1 57 379 1 57 420 1 57 425 1 57 429 1 57 432 1 57 434 1 57 435 1 57 475 1 57 479 1 57 482 1 57 484 1 57 485 1 57 489 1 57 492 1 57 494 1 57 495 1 57 498 1 57 500 1 57 501 1 57 503 1 57 504 1 57 505 1 57 546 1 57 551 1 57 555 1 57 558 1 57 560 1 57 561 1 57 601 1 57 605 1 57 608 1 57 610 1 57 611 1 57 615 1 57 618 1 57 620 1 57 621 1 57 624 1 57 626 1 57 627 1 57 629 1 57 630 1 57 631 1 57 671 1 57 675 1 57 678 1 57 680 1 57 681 1 57 685 1 57 688 1 57 690 1 57 691 1 57 694 1 57 696 1 57 697 1 57 699 1 57 700 1 57 701 1 57 740 1 57 743 1 57 745 1 57 746 1 57 749 1 57 751 1 57 752 1 57 754 1 57 755 1 57 756 1 57 759 1 57 761 1 57 762 1 57 764 1 57 765 1 57 766 1 57 768 1 57 769 1 57 770 1 57 771 1 57 799 1 57 826 1 57 831 1 57 835 1 57 838 1 57 840 1 57 841 1 57 882 1 57 887 1 57 891 1 57 894 1 57 896 1 57 897 1 57 937 1 57 941 1 57 944 1 57 946 1 57 947 1 57 951 1 57 954 1 57 956 1 57 957 1 57 960 1 57 962 1 57 963 1 57 965 1 57 966 1 57 967 1 57 1008 1 57 1013 1 57 1017 1 57 1020 1 57 1022 1 57 1023 1 57 1063 1 57 1067 1 57 1070 1 57 1072 1 57 1073 1 57 1077 1 57 1080 1 57 1082 1 57 1083 1 57 1086 1 57 1088 1 57 1089 1 57 1091 1 57 1092 1 57 1093 1 57 1133 1 57 1137 1 57 1140 1 57 1142 1 57 1143 1 57 1147 1 57 1150 1 57 1152 1 57 1153 1 57 1156 1 57 1158 1 57 1159 1 57 1161 1 57 1162 1 57 1163 1 57 1202 1 57 1205 1 57 1207 1 57 1208 1 57 1211 1 57 1213 1 57 1214 1 57 1216 1 57 1217 1 57 1218 1 57 1221 1 57 1223 1 57 1224 1 57 1226 1 57 1227 1 57 1228 1 57 1230 1 57 1231 1 57 1232 1 57 1233 1 57 1260 1 57 1265 1 57 1269 1 57 1272 1 57 1274 1 57 1275 1 57 1315 1 57 1319 1 57 1322 1 57 1324 1 57 1325 1 57 1329 1 57 1332 1 57 1334 1 57 1335 1 57 1338 1 57 1340 1 57 1341 1 57 1343 1 57 1344 1 57 1345 1 57 1385 1 57 1389 1 57 1392 1 57 1394 1 57 1395 1 57 1399 1 57 1402 1 57 1404 1 57 1405 1 57 1408 1 57 1410 1 57 1411 1 57 1413 1 57 1414 1 57 1415 1 57 1454 1 57 1457 1 57 1459 1 57 1460 1 57 1463 1 57 1465 1 57 1466 1 57 1468 1 57 1469 1 57 1470 1 57 1473 1 57 1475 1 57 1476 1 57 1478 1 57 1479 1 57 1480 1 57 1482 1 57 1483 1 57 1484 1 57 1485 1 57 1511 1 57 1515 1 57 1518 1 57 1520 1 57 1521 1 57 1525 1 57 1528 1 57 1530 1 57 1531 1 57 1534 1 57 1536 1 57 1537 1 57 1539 1 57 1540 1 57 1541 1 57 1580 1 57 1583 1 57 1585 1 57 1586 1 57 1589 1 57 1591 1 57 1592 1 57 1594 1 57 1595 1 57 1596 1 57 1599 1 57 1601 1 57 1602 1 57 1604 1 57 1605 1 57 1606 1 57 1608 1 57 1609 1 57 1610 1 57 1611 1 57 1636 1 57 1639 1 57 1641 1 57 1642 1 57 1645 1 57 1647 1 57 1648 1 57 1650 1 57 1651 1 57 1652 1 57 1655 1 57 1657 1 57 1658 1 57 1660 1 57 1661 1 57 1662 1 57 1664 1 57 1665 1 57 1666 1 57 1667 1 57 1691 1 57 1693 1 57 1694 1 57 1696 1 57 1697 1 57 1698 1 57 1700 1 57 1701 1 57 1702 1 57 1703 1 57 1705 1 57 1706 1 57 1707 1 57 1708 1 57 1709 1 58 16 1 58 44 1 58 65 1 58 86 1 58 87 1 58 88 1 58 89 1 58 90 1 58 128 1 58 149 1 58 170 1 58 171 1 58 172 1 58 173 1 58 174 1 58 205 1 58 226 1 58 227 1 58 228 1 58 229 1 58 230 1 58 261 1 58 262 1 58 263 1 58 264 1 58 265 1 58 296 1 58 297 1 58 298 1 58 299 1 58 300 1 58 301 1 58 302 1 58 303 1 58 304 1 58 305 1 58 338 1 58 359 1 58 380 1 58 381 1 58 382 1 58 383 1 58 384 1 58 415 1 58 436 1 58 437 1 58 438 1 58 439 1 58 440 1 58 471 1 58 472 1 58 473 1 58 474 1 58 475 1 58 506 1 58 507 1 58 508 1 58 509 1 58 510 1 58 511 1 58 512 1 58 513 1 58 514 1 58 515 1 58 541 1 58 562 1 58 563 1 58 564 1 58 565 1 58 566 1 58 597 1 58 598 1 58 599 1 58 600 1 58 601 1 58 632 1 58 633 1 58 634 1 58 635 1 58 636 1 58 637 1 58 638 1 58 639 1 58 640 1 58 641 1 58 667 1 58 668 1 58 669 1 58 670 1 58 671 1 58 702 1 58 703 1 58 704 1 58 705 1 58 706 1 58 707 1 58 708 1 58 709 1 58 710 1 58 711 1 58 737 1 58 738 1 58 739 1 58 740 1 58 741 1 58 742 1 58 743 1 58 744 1 58 745 1 58 746 1 58 772 1 58 773 1 58 774 1 58 775 1 58 776 1 58 777 1 58 778 1 58 779 1 58 780 1 58 781 1 58 800 1 58 821 1 58 842 1 58 843 1 58 844 1 58 845 1 58 846 1 58 877 1 58 898 1 58 899 1 58 900 1 58 901 1 58 902 1 58 933 1 58 934 1 58 935 1 58 936 1 58 937 1 58 968 1 58 969 1 58 970 1 58 971 1 58 972 1 58 973 1 58 974 1 58 975 1 58 976 1 58 977 1 58 1003 1 58 1024 1 58 1025 1 58 1026 1 58 1027 1 58 1028 1 58 1059 1 58 1060 1 58 1061 1 58 1062 1 58 1063 1 58 1094 1 58 1095 1 58 1096 1 58 1097 1 58 1098 1 58 1099 1 58 1100 1 58 1101 1 58 1102 1 58 1103 1 58 1129 1 58 1130 1 58 1131 1 58 1132 1 58 1133 1 58 1164 1 58 1165 1 58 1166 1 58 1167 1 58 1168 1 58 1169 1 58 1170 1 58 1171 1 58 1172 1 58 1173 1 58 1199 1 58 1200 1 58 1201 1 58 1202 1 58 1203 1 58 1204 1 58 1205 1 58 1206 1 58 1207 1 58 1208 1 58 1234 1 58 1235 1 58 1236 1 58 1237 1 58 1238 1 58 1239 1 58 1240 1 58 1241 1 58 1242 1 58 1243 1 58 1255 1 58 1276 1 58 1277 1 58 1278 1 58 1279 1 58 1280 1 58 1311 1 58 1312 1 58 1313 1 58 1314 1 58 1315 1 58 1346 1 58 1347 1 58 1348 1 58 1349 1 58 1350 1 58 1351 1 58 1352 1 58 1353 1 58 1354 1 58 1355 1 58 1381 1 58 1382 1 58 1383 1 58 1384 1 58 1385 1 58 1416 1 58 1417 1 58 1418 1 58 1419 1 58 1420 1 58 1421 1 58 1422 1 58 1423 1 58 1424 1 58 1425 1 58 1451 1 58 1452 1 58 1453 1 58 1454 1 58 1455 1 58 1456 1 58 1457 1 58 1458 1 58 1459 1 58 1460 1 58 1486 1 58 1487 1 58 1488 1 58 1489 1 58 1490 1 58 1491 1 58 1492 1 58 1493 1 58 1494 1 58 1495 1 58 1507 1 58 1508 1 58 1509 1 58 1510 1 58 1511 1 58 1542 1 58 1543 1 58 1544 1 58 1545 1 58 1546 1 58 1547 1 58 1548 1 58 1549 1 58 1550 1 58 1551 1 58 1577 1 58 1578 1 58 1579 1 58 1580 1 58 1581 1 58 1582 1 58 1583 1 58 1584 1 58 1585 1 58 1586 1 58 1612 1 58 1613 1 58 1614 1 58 1615 1 58 1616 1 58 1617 1 58 1618 1 58 1619 1 58 1620 1 58 1621 1 58 1633 1 58 1634 1 58 1635 1 58 1636 1 58 1637 1 58 1638 1 58 1639 1 58 1640 1 58 1641 1 58 1642 1 58 1668 1 58 1669 1 58 1670 1 58 1671 1 58 1672 1 58 1673 1 58 1674 1 58 1675 1 58 1676 1 58 1677 1 58 1689 1 58 1690 1 58 1691 1 58 1692 1 58 1693 1 58 1694 1 58 1695 1 58 1696 1 58 1697 1 58 1698 1 58 1710 1 58 1711 1 58 1712 1 58 1713 1 58 1714 1 59 17 1 59 45 1 59 66 1 59 86 1 59 91 1 59 92 1 59 93 1 59 94 1 59 129 1 59 150 1 59 170 1 59 175 1 59 176 1 59 177 1 59 178 1 59 206 1 59 226 1 59 231 1 59 232 1 59 233 1 59 234 1 59 261 1 59 266 1 59 267 1 59 268 1 59 269 1 59 296 1 59 297 1 59 298 1 59 299 1 59 306 1 59 307 1 59 308 1 59 309 1 59 310 1 59 311 1 59 339 1 59 360 1 59 380 1 59 385 1 59 386 1 59 387 1 59 388 1 59 416 1 59 436 1 59 441 1 59 442 1 59 443 1 59 444 1 59 471 1 59 476 1 59 477 1 59 478 1 59 479 1 59 506 1 59 507 1 59 508 1 59 509 1 59 516 1 59 517 1 59 518 1 59 519 1 59 520 1 59 521 1 59 542 1 59 562 1 59 567 1 59 568 1 59 569 1 59 570 1 59 597 1 59 602 1 59 603 1 59 604 1 59 605 1 59 632 1 59 633 1 59 634 1 59 635 1 59 642 1 59 643 1 59 644 1 59 645 1 59 646 1 59 647 1 59 667 1 59 672 1 59 673 1 59 674 1 59 675 1 59 702 1 59 703 1 59 704 1 59 705 1 59 712 1 59 713 1 59 714 1 59 715 1 59 716 1 59 717 1 59 737 1 59 738 1 59 739 1 59 740 1 59 747 1 59 748 1 59 749 1 59 750 1 59 751 1 59 752 1 59 772 1 59 773 1 59 774 1 59 775 1 59 776 1 59 777 1 59 782 1 59 783 1 59 784 1 59 785 1 59 801 1 59 822 1 59 842 1 59 847 1 59 848 1 59 849 1 59 850 1 59 878 1 59 898 1 59 903 1 59 904 1 59 905 1 59 906 1 59 933 1 59 938 1 59 939 1 59 940 1 59 941 1 59 968 1 59 969 1 59 970 1 59 971 1 59 978 1 59 979 1 59 980 1 59 981 1 59 982 1 59 983 1 59 1004 1 59 1024 1 59 1029 1 59 1030 1 59 1031 1 59 1032 1 59 1059 1 59 1064 1 59 1065 1 59 1066 1 59 1067 1 59 1094 1 59 1095 1 59 1096 1 59 1097 1 59 1104 1 59 1105 1 59 1106 1 59 1107 1 59 1108 1 59 1109 1 59 1129 1 59 1134 1 59 1135 1 59 1136 1 59 1137 1 59 1164 1 59 1165 1 59 1166 1 59 1167 1 59 1174 1 59 1175 1 59 1176 1 59 1177 1 59 1178 1 59 1179 1 59 1199 1 59 1200 1 59 1201 1 59 1202 1 59 1209 1 59 1210 1 59 1211 1 59 1212 1 59 1213 1 59 1214 1 59 1234 1 59 1235 1 59 1236 1 59 1237 1 59 1238 1 59 1239 1 59 1244 1 59 1245 1 59 1246 1 59 1247 1 59 1256 1 59 1276 1 59 1281 1 59 1282 1 59 1283 1 59 1284 1 59 1311 1 59 1316 1 59 1317 1 59 1318 1 59 1319 1 59 1346 1 59 1347 1 59 1348 1 59 1349 1 59 1356 1 59 1357 1 59 1358 1 59 1359 1 59 1360 1 59 1361 1 59 1381 1 59 1386 1 59 1387 1 59 1388 1 59 1389 1 59 1416 1 59 1417 1 59 1418 1 59 1419 1 59 1426 1 59 1427 1 59 1428 1 59 1429 1 59 1430 1 59 1431 1 59 1451 1 59 1452 1 59 1453 1 59 1454 1 59 1461 1 59 1462 1 59 1463 1 59 1464 1 59 1465 1 59 1466 1 59 1486 1 59 1487 1 59 1488 1 59 1489 1 59 1490 1 59 1491 1 59 1496 1 59 1497 1 59 1498 1 59 1499 1 59 1507 1 59 1512 1 59 1513 1 59 1514 1 59 1515 1 59 1542 1 59 1543 1 59 1544 1 59 1545 1 59 1552 1 59 1553 1 59 1554 1 59 1555 1 59 1556 1 59 1557 1 59 1577 1 59 1578 1 59 1579 1 59 1580 1 59 1587 1 59 1588 1 59 1589 1 59 1590 1 59 1591 1 59 1592 1 59 1612 1 59 1613 1 59 1614 1 59 1615 1 59 1616 1 59 1617 1 59 1622 1 59 1623 1 59 1624 1 59 1625 1 59 1633 1 59 1634 1 59 1635 1 59 1636 1 59 1643 1 59 1644 1 59 1645 1 59 1646 1 59 1647 1 59 1648 1 59 1668 1 59 1669 1 59 1670 1 59 1671 1 59 1672 1 59 1673 1 59 1678 1 59 1679 1 59 1680 1 59 1681 1 59 1689 1 59 1690 1 59 1691 1 59 1692 1 59 1693 1 59 1694 1 59 1699 1 59 1700 1 59 1701 1 59 1702 1 59 1710 1 59 1711 1 59 1712 1 59 1713 1 59 1715 1 60 18 1 60 46 1 60 67 1 60 87 1 60 91 1 60 95 1 60 96 1 60 97 1 60 130 1 60 151 1 60 171 1 60 175 1 60 179 1 60 180 1 60 181 1 60 207 1 60 227 1 60 231 1 60 235 1 60 236 1 60 237 1 60 262 1 60 266 1 60 270 1 60 271 1 60 272 1 60 296 1 60 300 1 60 301 1 60 302 1 60 306 1 60 307 1 60 308 1 60 312 1 60 313 1 60 314 1 60 340 1 60 361 1 60 381 1 60 385 1 60 389 1 60 390 1 60 391 1 60 417 1 60 437 1 60 441 1 60 445 1 60 446 1 60 447 1 60 472 1 60 476 1 60 480 1 60 481 1 60 482 1 60 506 1 60 510 1 60 511 1 60 512 1 60 516 1 60 517 1 60 518 1 60 522 1 60 523 1 60 524 1 60 543 1 60 563 1 60 567 1 60 571 1 60 572 1 60 573 1 60 598 1 60 602 1 60 606 1 60 607 1 60 608 1 60 632 1 60 636 1 60 637 1 60 638 1 60 642 1 60 643 1 60 644 1 60 648 1 60 649 1 60 650 1 60 668 1 60 672 1 60 676 1 60 677 1 60 678 1 60 702 1 60 706 1 60 707 1 60 708 1 60 712 1 60 713 1 60 714 1 60 718 1 60 719 1 60 720 1 60 737 1 60 741 1 60 742 1 60 743 1 60 747 1 60 748 1 60 749 1 60 753 1 60 754 1 60 755 1 60 772 1 60 773 1 60 774 1 60 778 1 60 779 1 60 780 1 60 782 1 60 783 1 60 784 1 60 786 1 60 802 1 60 823 1 60 843 1 60 847 1 60 851 1 60 852 1 60 853 1 60 879 1 60 899 1 60 903 1 60 907 1 60 908 1 60 909 1 60 934 1 60 938 1 60 942 1 60 943 1 60 944 1 60 968 1 60 972 1 60 973 1 60 974 1 60 978 1 60 979 1 60 980 1 60 984 1 60 985 1 60 986 1 60 1005 1 60 1025 1 60 1029 1 60 1033 1 60 1034 1 60 1035 1 60 1060 1 60 1064 1 60 1068 1 60 1069 1 60 1070 1 60 1094 1 60 1098 1 60 1099 1 60 1100 1 60 1104 1 60 1105 1 60 1106 1 60 1110 1 60 1111 1 60 1112 1 60 1130 1 60 1134 1 60 1138 1 60 1139 1 60 1140 1 60 1164 1 60 1168 1 60 1169 1 60 1170 1 60 1174 1 60 1175 1 60 1176 1 60 1180 1 60 1181 1 60 1182 1 60 1199 1 60 1203 1 60 1204 1 60 1205 1 60 1209 1 60 1210 1 60 1211 1 60 1215 1 60 1216 1 60 1217 1 60 1234 1 60 1235 1 60 1236 1 60 1240 1 60 1241 1 60 1242 1 60 1244 1 60 1245 1 60 1246 1 60 1248 1 60 1257 1 60 1277 1 60 1281 1 60 1285 1 60 1286 1 60 1287 1 60 1312 1 60 1316 1 60 1320 1 60 1321 1 60 1322 1 60 1346 1 60 1350 1 60 1351 1 60 1352 1 60 1356 1 60 1357 1 60 1358 1 60 1362 1 60 1363 1 60 1364 1 60 1382 1 60 1386 1 60 1390 1 60 1391 1 60 1392 1 60 1416 1 60 1420 1 60 1421 1 60 1422 1 60 1426 1 60 1427 1 60 1428 1 60 1432 1 60 1433 1 60 1434 1 60 1451 1 60 1455 1 60 1456 1 60 1457 1 60 1461 1 60 1462 1 60 1463 1 60 1467 1 60 1468 1 60 1469 1 60 1486 1 60 1487 1 60 1488 1 60 1492 1 60 1493 1 60 1494 1 60 1496 1 60 1497 1 60 1498 1 60 1500 1 60 1508 1 60 1512 1 60 1516 1 60 1517 1 60 1518 1 60 1542 1 60 1546 1 60 1547 1 60 1548 1 60 1552 1 60 1553 1 60 1554 1 60 1558 1 60 1559 1 60 1560 1 60 1577 1 60 1581 1 60 1582 1 60 1583 1 60 1587 1 60 1588 1 60 1589 1 60 1593 1 60 1594 1 60 1595 1 60 1612 1 60 1613 1 60 1614 1 60 1618 1 60 1619 1 60 1620 1 60 1622 1 60 1623 1 60 1624 1 60 1626 1 60 1633 1 60 1637 1 60 1638 1 60 1639 1 60 1643 1 60 1644 1 60 1645 1 60 1649 1 60 1650 1 60 1651 1 60 1668 1 60 1669 1 60 1670 1 60 1674 1 60 1675 1 60 1676 1 60 1678 1 60 1679 1 60 1680 1 60 1682 1 60 1689 1 60 1690 1 60 1691 1 60 1695 1 60 1696 1 60 1697 1 60 1699 1 60 1700 1 60 1701 1 60 1703 1 60 1710 1 60 1711 1 60 1712 1 60 1714 1 60 1715 1 61 19 1 61 47 1 61 68 1 61 88 1 61 92 1 61 95 1 61 98 1 61 99 1 61 131 1 61 152 1 61 172 1 61 176 1 61 179 1 61 182 1 61 183 1 61 208 1 61 228 1 61 232 1 61 235 1 61 238 1 61 239 1 61 263 1 61 267 1 61 270 1 61 273 1 61 274 1 61 297 1 61 300 1 61 303 1 61 304 1 61 306 1 61 309 1 61 310 1 61 312 1 61 313 1 61 315 1 61 341 1 61 362 1 61 382 1 61 386 1 61 389 1 61 392 1 61 393 1 61 418 1 61 438 1 61 442 1 61 445 1 61 448 1 61 449 1 61 473 1 61 477 1 61 480 1 61 483 1 61 484 1 61 507 1 61 510 1 61 513 1 61 514 1 61 516 1 61 519 1 61 520 1 61 522 1 61 523 1 61 525 1 61 544 1 61 564 1 61 568 1 61 571 1 61 574 1 61 575 1 61 599 1 61 603 1 61 606 1 61 609 1 61 610 1 61 633 1 61 636 1 61 639 1 61 640 1 61 642 1 61 645 1 61 646 1 61 648 1 61 649 1 61 651 1 61 669 1 61 673 1 61 676 1 61 679 1 61 680 1 61 703 1 61 706 1 61 709 1 61 710 1 61 712 1 61 715 1 61 716 1 61 718 1 61 719 1 61 721 1 61 738 1 61 741 1 61 744 1 61 745 1 61 747 1 61 750 1 61 751 1 61 753 1 61 754 1 61 756 1 61 772 1 61 775 1 61 776 1 61 778 1 61 779 1 61 781 1 61 782 1 61 783 1 61 785 1 61 786 1 61 803 1 61 824 1 61 844 1 61 848 1 61 851 1 61 854 1 61 855 1 61 880 1 61 900 1 61 904 1 61 907 1 61 910 1 61 911 1 61 935 1 61 939 1 61 942 1 61 945 1 61 946 1 61 969 1 61 972 1 61 975 1 61 976 1 61 978 1 61 981 1 61 982 1 61 984 1 61 985 1 61 987 1 61 1006 1 61 1026 1 61 1030 1 61 1033 1 61 1036 1 61 1037 1 61 1061 1 61 1065 1 61 1068 1 61 1071 1 61 1072 1 61 1095 1 61 1098 1 61 1101 1 61 1102 1 61 1104 1 61 1107 1 61 1108 1 61 1110 1 61 1111 1 61 1113 1 61 1131 1 61 1135 1 61 1138 1 61 1141 1 61 1142 1 61 1165 1 61 1168 1 61 1171 1 61 1172 1 61 1174 1 61 1177 1 61 1178 1 61 1180 1 61 1181 1 61 1183 1 61 1200 1 61 1203 1 61 1206 1 61 1207 1 61 1209 1 61 1212 1 61 1213 1 61 1215 1 61 1216 1 61 1218 1 61 1234 1 61 1237 1 61 1238 1 61 1240 1 61 1241 1 61 1243 1 61 1244 1 61 1245 1 61 1247 1 61 1248 1 61 1258 1 61 1278 1 61 1282 1 61 1285 1 61 1288 1 61 1289 1 61 1313 1 61 1317 1 61 1320 1 61 1323 1 61 1324 1 61 1347 1 61 1350 1 61 1353 1 61 1354 1 61 1356 1 61 1359 1 61 1360 1 61 1362 1 61 1363 1 61 1365 1 61 1383 1 61 1387 1 61 1390 1 61 1393 1 61 1394 1 61 1417 1 61 1420 1 61 1423 1 61 1424 1 61 1426 1 61 1429 1 61 1430 1 61 1432 1 61 1433 1 61 1435 1 61 1452 1 61 1455 1 61 1458 1 61 1459 1 61 1461 1 61 1464 1 61 1465 1 61 1467 1 61 1468 1 61 1470 1 61 1486 1 61 1489 1 61 1490 1 61 1492 1 61 1493 1 61 1495 1 61 1496 1 61 1497 1 61 1499 1 61 1500 1 61 1509 1 61 1513 1 61 1516 1 61 1519 1 61 1520 1 61 1543 1 61 1546 1 61 1549 1 61 1550 1 61 1552 1 61 1555 1 61 1556 1 61 1558 1 61 1559 1 61 1561 1 61 1578 1 61 1581 1 61 1584 1 61 1585 1 61 1587 1 61 1590 1 61 1591 1 61 1593 1 61 1594 1 61 1596 1 61 1612 1 61 1615 1 61 1616 1 61 1618 1 61 1619 1 61 1621 1 61 1622 1 61 1623 1 61 1625 1 61 1626 1 61 1634 1 61 1637 1 61 1640 1 61 1641 1 61 1643 1 61 1646 1 61 1647 1 61 1649 1 61 1650 1 61 1652 1 61 1668 1 61 1671 1 61 1672 1 61 1674 1 61 1675 1 61 1677 1 61 1678 1 61 1679 1 61 1681 1 61 1682 1 61 1689 1 61 1692 1 61 1693 1 61 1695 1 61 1696 1 61 1698 1 61 1699 1 61 1700 1 61 1702 1 61 1703 1 61 1710 1 61 1711 1 61 1713 1 61 1714 1 61 1715 1 62 20 1 62 48 1 62 69 1 62 89 1 62 93 1 62 96 1 62 98 1 62 100 1 62 132 1 62 153 1 62 173 1 62 177 1 62 180 1 62 182 1 62 184 1 62 209 1 62 229 1 62 233 1 62 236 1 62 238 1 62 240 1 62 264 1 62 268 1 62 271 1 62 273 1 62 275 1 62 298 1 62 301 1 62 303 1 62 305 1 62 307 1 62 309 1 62 311 1 62 312 1 62 314 1 62 315 1 62 342 1 62 363 1 62 383 1 62 387 1 62 390 1 62 392 1 62 394 1 62 419 1 62 439 1 62 443 1 62 446 1 62 448 1 62 450 1 62 474 1 62 478 1 62 481 1 62 483 1 62 485 1 62 508 1 62 511 1 62 513 1 62 515 1 62 517 1 62 519 1 62 521 1 62 522 1 62 524 1 62 525 1 62 545 1 62 565 1 62 569 1 62 572 1 62 574 1 62 576 1 62 600 1 62 604 1 62 607 1 62 609 1 62 611 1 62 634 1 62 637 1 62 639 1 62 641 1 62 643 1 62 645 1 62 647 1 62 648 1 62 650 1 62 651 1 62 670 1 62 674 1 62 677 1 62 679 1 62 681 1 62 704 1 62 707 1 62 709 1 62 711 1 62 713 1 62 715 1 62 717 1 62 718 1 62 720 1 62 721 1 62 739 1 62 742 1 62 744 1 62 746 1 62 748 1 62 750 1 62 752 1 62 753 1 62 755 1 62 756 1 62 773 1 62 775 1 62 777 1 62 778 1 62 780 1 62 781 1 62 782 1 62 784 1 62 785 1 62 786 1 62 804 1 62 825 1 62 845 1 62 849 1 62 852 1 62 854 1 62 856 1 62 881 1 62 901 1 62 905 1 62 908 1 62 910 1 62 912 1 62 936 1 62 940 1 62 943 1 62 945 1 62 947 1 62 970 1 62 973 1 62 975 1 62 977 1 62 979 1 62 981 1 62 983 1 62 984 1 62 986 1 62 987 1 62 1007 1 62 1027 1 62 1031 1 62 1034 1 62 1036 1 62 1038 1 62 1062 1 62 1066 1 62 1069 1 62 1071 1 62 1073 1 62 1096 1 62 1099 1 62 1101 1 62 1103 1 62 1105 1 62 1107 1 62 1109 1 62 1110 1 62 1112 1 62 1113 1 62 1132 1 62 1136 1 62 1139 1 62 1141 1 62 1143 1 62 1166 1 62 1169 1 62 1171 1 62 1173 1 62 1175 1 62 1177 1 62 1179 1 62 1180 1 62 1182 1 62 1183 1 62 1201 1 62 1204 1 62 1206 1 62 1208 1 62 1210 1 62 1212 1 62 1214 1 62 1215 1 62 1217 1 62 1218 1 62 1235 1 62 1237 1 62 1239 1 62 1240 1 62 1242 1 62 1243 1 62 1244 1 62 1246 1 62 1247 1 62 1248 1 62 1259 1 62 1279 1 62 1283 1 62 1286 1 62 1288 1 62 1290 1 62 1314 1 62 1318 1 62 1321 1 62 1323 1 62 1325 1 62 1348 1 62 1351 1 62 1353 1 62 1355 1 62 1357 1 62 1359 1 62 1361 1 62 1362 1 62 1364 1 62 1365 1 62 1384 1 62 1388 1 62 1391 1 62 1393 1 62 1395 1 62 1418 1 62 1421 1 62 1423 1 62 1425 1 62 1427 1 62 1429 1 62 1431 1 62 1432 1 62 1434 1 62 1435 1 62 1453 1 62 1456 1 62 1458 1 62 1460 1 62 1462 1 62 1464 1 62 1466 1 62 1467 1 62 1469 1 62 1470 1 62 1487 1 62 1489 1 62 1491 1 62 1492 1 62 1494 1 62 1495 1 62 1496 1 62 1498 1 62 1499 1 62 1500 1 62 1510 1 62 1514 1 62 1517 1 62 1519 1 62 1521 1 62 1544 1 62 1547 1 62 1549 1 62 1551 1 62 1553 1 62 1555 1 62 1557 1 62 1558 1 62 1560 1 62 1561 1 62 1579 1 62 1582 1 62 1584 1 62 1586 1 62 1588 1 62 1590 1 62 1592 1 62 1593 1 62 1595 1 62 1596 1 62 1613 1 62 1615 1 62 1617 1 62 1618 1 62 1620 1 62 1621 1 62 1622 1 62 1624 1 62 1625 1 62 1626 1 62 1635 1 62 1638 1 62 1640 1 62 1642 1 62 1644 1 62 1646 1 62 1648 1 62 1649 1 62 1651 1 62 1652 1 62 1669 1 62 1671 1 62 1673 1 62 1674 1 62 1676 1 62 1677 1 62 1678 1 62 1680 1 62 1681 1 62 1682 1 62 1690 1 62 1692 1 62 1694 1 62 1695 1 62 1697 1 62 1698 1 62 1699 1 62 1701 1 62 1702 1 62 1703 1 62 1710 1 62 1712 1 62 1713 1 62 1714 1 62 1715 1 63 21 1 63 49 1 63 70 1 63 90 1 63 94 1 63 97 1 63 99 1 63 100 1 63 133 1 63 154 1 63 174 1 63 178 1 63 181 1 63 183 1 63 184 1 63 210 1 63 230 1 63 234 1 63 237 1 63 239 1 63 240 1 63 265 1 63 269 1 63 272 1 63 274 1 63 275 1 63 299 1 63 302 1 63 304 1 63 305 1 63 308 1 63 310 1 63 311 1 63 313 1 63 314 1 63 315 1 63 343 1 63 364 1 63 384 1 63 388 1 63 391 1 63 393 1 63 394 1 63 420 1 63 440 1 63 444 1 63 447 1 63 449 1 63 450 1 63 475 1 63 479 1 63 482 1 63 484 1 63 485 1 63 509 1 63 512 1 63 514 1 63 515 1 63 518 1 63 520 1 63 521 1 63 523 1 63 524 1 63 525 1 63 546 1 63 566 1 63 570 1 63 573 1 63 575 1 63 576 1 63 601 1 63 605 1 63 608 1 63 610 1 63 611 1 63 635 1 63 638 1 63 640 1 63 641 1 63 644 1 63 646 1 63 647 1 63 649 1 63 650 1 63 651 1 63 671 1 63 675 1 63 678 1 63 680 1 63 681 1 63 705 1 63 708 1 63 710 1 63 711 1 63 714 1 63 716 1 63 717 1 63 719 1 63 720 1 63 721 1 63 740 1 63 743 1 63 745 1 63 746 1 63 749 1 63 751 1 63 752 1 63 754 1 63 755 1 63 756 1 63 774 1 63 776 1 63 777 1 63 779 1 63 780 1 63 781 1 63 783 1 63 784 1 63 785 1 63 786 1 63 805 1 63 826 1 63 846 1 63 850 1 63 853 1 63 855 1 63 856 1 63 882 1 63 902 1 63 906 1 63 909 1 63 911 1 63 912 1 63 937 1 63 941 1 63 944 1 63 946 1 63 947 1 63 971 1 63 974 1 63 976 1 63 977 1 63 980 1 63 982 1 63 983 1 63 985 1 63 986 1 63 987 1 63 1008 1 63 1028 1 63 1032 1 63 1035 1 63 1037 1 63 1038 1 63 1063 1 63 1067 1 63 1070 1 63 1072 1 63 1073 1 63 1097 1 63 1100 1 63 1102 1 63 1103 1 63 1106 1 63 1108 1 63 1109 1 63 1111 1 63 1112 1 63 1113 1 63 1133 1 63 1137 1 63 1140 1 63 1142 1 63 1143 1 63 1167 1 63 1170 1 63 1172 1 63 1173 1 63 1176 1 63 1178 1 63 1179 1 63 1181 1 63 1182 1 63 1183 1 63 1202 1 63 1205 1 63 1207 1 63 1208 1 63 1211 1 63 1213 1 63 1214 1 63 1216 1 63 1217 1 63 1218 1 63 1236 1 63 1238 1 63 1239 1 63 1241 1 63 1242 1 63 1243 1 63 1245 1 63 1246 1 63 1247 1 63 1248 1 63 1260 1 63 1280 1 63 1284 1 63 1287 1 63 1289 1 63 1290 1 63 1315 1 63 1319 1 63 1322 1 63 1324 1 63 1325 1 63 1349 1 63 1352 1 63 1354 1 63 1355 1 63 1358 1 63 1360 1 63 1361 1 63 1363 1 63 1364 1 63 1365 1 63 1385 1 63 1389 1 63 1392 1 63 1394 1 63 1395 1 63 1419 1 63 1422 1 63 1424 1 63 1425 1 63 1428 1 63 1430 1 63 1431 1 63 1433 1 63 1434 1 63 1435 1 63 1454 1 63 1457 1 63 1459 1 63 1460 1 63 1463 1 63 1465 1 63 1466 1 63 1468 1 63 1469 1 63 1470 1 63 1488 1 63 1490 1 63 1491 1 63 1493 1 63 1494 1 63 1495 1 63 1497 1 63 1498 1 63 1499 1 63 1500 1 63 1511 1 63 1515 1 63 1518 1 63 1520 1 63 1521 1 63 1545 1 63 1548 1 63 1550 1 63 1551 1 63 1554 1 63 1556 1 63 1557 1 63 1559 1 63 1560 1 63 1561 1 63 1580 1 63 1583 1 63 1585 1 63 1586 1 63 1589 1 63 1591 1 63 1592 1 63 1594 1 63 1595 1 63 1596 1 63 1614 1 63 1616 1 63 1617 1 63 1619 1 63 1620 1 63 1621 1 63 1623 1 63 1624 1 63 1625 1 63 1626 1 63 1636 1 63 1639 1 63 1641 1 63 1642 1 63 1645 1 63 1647 1 63 1648 1 63 1650 1 63 1651 1 63 1652 1 63 1670 1 63 1672 1 63 1673 1 63 1675 1 63 1676 1 63 1677 1 63 1679 1 63 1680 1 63 1681 1 63 1682 1 63 1691 1 63 1693 1 63 1694 1 63 1696 1 63 1697 1 63 1698 1 63 1700 1 63 1701 1 63 1702 1 63 1703 1 63 1711 1 63 1712 1 63 1713 1 63 1714 1 63 1715 1 64 22 1 64 50 1 64 71 1 64 86 1 64 101 1 64 102 1 64 103 1 64 104 1 64 134 1 64 155 1 64 170 1 64 185 1 64 186 1 64 187 1 64 188 1 64 211 1 64 226 1 64 241 1 64 242 1 64 243 1 64 244 1 64 261 1 64 276 1 64 277 1 64 278 1 64 279 1 64 296 1 64 297 1 64 298 1 64 299 1 64 316 1 64 317 1 64 318 1 64 319 1 64 320 1 64 321 1 64 344 1 64 365 1 64 380 1 64 395 1 64 396 1 64 397 1 64 398 1 64 421 1 64 436 1 64 451 1 64 452 1 64 453 1 64 454 1 64 471 1 64 486 1 64 487 1 64 488 1 64 489 1 64 506 1 64 507 1 64 508 1 64 509 1 64 526 1 64 527 1 64 528 1 64 529 1 64 530 1 64 531 1 64 547 1 64 562 1 64 577 1 64 578 1 64 579 1 64 580 1 64 597 1 64 612 1 64 613 1 64 614 1 64 615 1 64 632 1 64 633 1 64 634 1 64 635 1 64 652 1 64 653 1 64 654 1 64 655 1 64 656 1 64 657 1 64 667 1 64 682 1 64 683 1 64 684 1 64 685 1 64 702 1 64 703 1 64 704 1 64 705 1 64 722 1 64 723 1 64 724 1 64 725 1 64 726 1 64 727 1 64 737 1 64 738 1 64 739 1 64 740 1 64 757 1 64 758 1 64 759 1 64 760 1 64 761 1 64 762 1 64 772 1 64 773 1 64 774 1 64 775 1 64 776 1 64 777 1 64 787 1 64 788 1 64 789 1 64 790 1 64 806 1 64 827 1 64 842 1 64 857 1 64 858 1 64 859 1 64 860 1 64 883 1 64 898 1 64 913 1 64 914 1 64 915 1 64 916 1 64 933 1 64 948 1 64 949 1 64 950 1 64 951 1 64 968 1 64 969 1 64 970 1 64 971 1 64 988 1 64 989 1 64 990 1 64 991 1 64 992 1 64 993 1 64 1009 1 64 1024 1 64 1039 1 64 1040 1 64 1041 1 64 1042 1 64 1059 1 64 1074 1 64 1075 1 64 1076 1 64 1077 1 64 1094 1 64 1095 1 64 1096 1 64 1097 1 64 1114 1 64 1115 1 64 1116 1 64 1117 1 64 1118 1 64 1119 1 64 1129 1 64 1144 1 64 1145 1 64 1146 1 64 1147 1 64 1164 1 64 1165 1 64 1166 1 64 1167 1 64 1184 1 64 1185 1 64 1186 1 64 1187 1 64 1188 1 64 1189 1 64 1199 1 64 1200 1 64 1201 1 64 1202 1 64 1219 1 64 1220 1 64 1221 1 64 1222 1 64 1223 1 64 1224 1 64 1234 1 64 1235 1 64 1236 1 64 1237 1 64 1238 1 64 1239 1 64 1249 1 64 1250 1 64 1251 1 64 1252 1 64 1261 1 64 1276 1 64 1291 1 64 1292 1 64 1293 1 64 1294 1 64 1311 1 64 1326 1 64 1327 1 64 1328 1 64 1329 1 64 1346 1 64 1347 1 64 1348 1 64 1349 1 64 1366 1 64 1367 1 64 1368 1 64 1369 1 64 1370 1 64 1371 1 64 1381 1 64 1396 1 64 1397 1 64 1398 1 64 1399 1 64 1416 1 64 1417 1 64 1418 1 64 1419 1 64 1436 1 64 1437 1 64 1438 1 64 1439 1 64 1440 1 64 1441 1 64 1451 1 64 1452 1 64 1453 1 64 1454 1 64 1471 1 64 1472 1 64 1473 1 64 1474 1 64 1475 1 64 1476 1 64 1486 1 64 1487 1 64 1488 1 64 1489 1 64 1490 1 64 1491 1 64 1501 1 64 1502 1 64 1503 1 64 1504 1 64 1507 1 64 1522 1 64 1523 1 64 1524 1 64 1525 1 64 1542 1 64 1543 1 64 1544 1 64 1545 1 64 1562 1 64 1563 1 64 1564 1 64 1565 1 64 1566 1 64 1567 1 64 1577 1 64 1578 1 64 1579 1 64 1580 1 64 1597 1 64 1598 1 64 1599 1 64 1600 1 64 1601 1 64 1602 1 64 1612 1 64 1613 1 64 1614 1 64 1615 1 64 1616 1 64 1617 1 64 1627 1 64 1628 1 64 1629 1 64 1630 1 64 1633 1 64 1634 1 64 1635 1 64 1636 1 64 1653 1 64 1654 1 64 1655 1 64 1656 1 64 1657 1 64 1658 1 64 1668 1 64 1669 1 64 1670 1 64 1671 1 64 1672 1 64 1673 1 64 1683 1 64 1684 1 64 1685 1 64 1686 1 64 1689 1 64 1690 1 64 1691 1 64 1692 1 64 1693 1 64 1694 1 64 1704 1 64 1705 1 64 1706 1 64 1707 1 64 1710 1 64 1711 1 64 1712 1 64 1713 1 64 1716 1 65 23 1 65 51 1 65 72 1 65 87 1 65 101 1 65 105 1 65 106 1 65 107 1 65 135 1 65 156 1 65 171 1 65 185 1 65 189 1 65 190 1 65 191 1 65 212 1 65 227 1 65 241 1 65 245 1 65 246 1 65 247 1 65 262 1 65 276 1 65 280 1 65 281 1 65 282 1 65 296 1 65 300 1 65 301 1 65 302 1 65 316 1 65 317 1 65 318 1 65 322 1 65 323 1 65 324 1 65 345 1 65 366 1 65 381 1 65 395 1 65 399 1 65 400 1 65 401 1 65 422 1 65 437 1 65 451 1 65 455 1 65 456 1 65 457 1 65 472 1 65 486 1 65 490 1 65 491 1 65 492 1 65 506 1 65 510 1 65 511 1 65 512 1 65 526 1 65 527 1 65 528 1 65 532 1 65 533 1 65 534 1 65 548 1 65 563 1 65 577 1 65 581 1 65 582 1 65 583 1 65 598 1 65 612 1 65 616 1 65 617 1 65 618 1 65 632 1 65 636 1 65 637 1 65 638 1 65 652 1 65 653 1 65 654 1 65 658 1 65 659 1 65 660 1 65 668 1 65 682 1 65 686 1 65 687 1 65 688 1 65 702 1 65 706 1 65 707 1 65 708 1 65 722 1 65 723 1 65 724 1 65 728 1 65 729 1 65 730 1 65 737 1 65 741 1 65 742 1 65 743 1 65 757 1 65 758 1 65 759 1 65 763 1 65 764 1 65 765 1 65 772 1 65 773 1 65 774 1 65 778 1 65 779 1 65 780 1 65 787 1 65 788 1 65 789 1 65 791 1 65 807 1 65 828 1 65 843 1 65 857 1 65 861 1 65 862 1 65 863 1 65 884 1 65 899 1 65 913 1 65 917 1 65 918 1 65 919 1 65 934 1 65 948 1 65 952 1 65 953 1 65 954 1 65 968 1 65 972 1 65 973 1 65 974 1 65 988 1 65 989 1 65 990 1 65 994 1 65 995 1 65 996 1 65 1010 1 65 1025 1 65 1039 1 65 1043 1 65 1044 1 65 1045 1 65 1060 1 65 1074 1 65 1078 1 65 1079 1 65 1080 1 65 1094 1 65 1098 1 65 1099 1 65 1100 1 65 1114 1 65 1115 1 65 1116 1 65 1120 1 65 1121 1 65 1122 1 65 1130 1 65 1144 1 65 1148 1 65 1149 1 65 1150 1 65 1164 1 65 1168 1 65 1169 1 65 1170 1 65 1184 1 65 1185 1 65 1186 1 65 1190 1 65 1191 1 65 1192 1 65 1199 1 65 1203 1 65 1204 1 65 1205 1 65 1219 1 65 1220 1 65 1221 1 65 1225 1 65 1226 1 65 1227 1 65 1234 1 65 1235 1 65 1236 1 65 1240 1 65 1241 1 65 1242 1 65 1249 1 65 1250 1 65 1251 1 65 1253 1 65 1262 1 65 1277 1 65 1291 1 65 1295 1 65 1296 1 65 1297 1 65 1312 1 65 1326 1 65 1330 1 65 1331 1 65 1332 1 65 1346 1 65 1350 1 65 1351 1 65 1352 1 65 1366 1 65 1367 1 65 1368 1 65 1372 1 65 1373 1 65 1374 1 65 1382 1 65 1396 1 65 1400 1 65 1401 1 65 1402 1 65 1416 1 65 1420 1 65 1421 1 65 1422 1 65 1436 1 65 1437 1 65 1438 1 65 1442 1 65 1443 1 65 1444 1 65 1451 1 65 1455 1 65 1456 1 65 1457 1 65 1471 1 65 1472 1 65 1473 1 65 1477 1 65 1478 1 65 1479 1 65 1486 1 65 1487 1 65 1488 1 65 1492 1 65 1493 1 65 1494 1 65 1501 1 65 1502 1 65 1503 1 65 1505 1 65 1508 1 65 1522 1 65 1526 1 65 1527 1 65 1528 1 65 1542 1 65 1546 1 65 1547 1 65 1548 1 65 1562 1 65 1563 1 65 1564 1 65 1568 1 65 1569 1 65 1570 1 65 1577 1 65 1581 1 65 1582 1 65 1583 1 65 1597 1 65 1598 1 65 1599 1 65 1603 1 65 1604 1 65 1605 1 65 1612 1 65 1613 1 65 1614 1 65 1618 1 65 1619 1 65 1620 1 65 1627 1 65 1628 1 65 1629 1 65 1631 1 65 1633 1 65 1637 1 65 1638 1 65 1639 1 65 1653 1 65 1654 1 65 1655 1 65 1659 1 65 1660 1 65 1661 1 65 1668 1 65 1669 1 65 1670 1 65 1674 1 65 1675 1 65 1676 1 65 1683 1 65 1684 1 65 1685 1 65 1687 1 65 1689 1 65 1690 1 65 1691 1 65 1695 1 65 1696 1 65 1697 1 65 1704 1 65 1705 1 65 1706 1 65 1708 1 65 1710 1 65 1711 1 65 1712 1 65 1714 1 65 1716 1 66 24 1 66 52 1 66 73 1 66 88 1 66 102 1 66 105 1 66 108 1 66 109 1 66 136 1 66 157 1 66 172 1 66 186 1 66 189 1 66 192 1 66 193 1 66 213 1 66 228 1 66 242 1 66 245 1 66 248 1 66 249 1 66 263 1 66 277 1 66 280 1 66 283 1 66 284 1 66 297 1 66 300 1 66 303 1 66 304 1 66 316 1 66 319 1 66 320 1 66 322 1 66 323 1 66 325 1 66 346 1 66 367 1 66 382 1 66 396 1 66 399 1 66 402 1 66 403 1 66 423 1 66 438 1 66 452 1 66 455 1 66 458 1 66 459 1 66 473 1 66 487 1 66 490 1 66 493 1 66 494 1 66 507 1 66 510 1 66 513 1 66 514 1 66 526 1 66 529 1 66 530 1 66 532 1 66 533 1 66 535 1 66 549 1 66 564 1 66 578 1 66 581 1 66 584 1 66 585 1 66 599 1 66 613 1 66 616 1 66 619 1 66 620 1 66 633 1 66 636 1 66 639 1 66 640 1 66 652 1 66 655 1 66 656 1 66 658 1 66 659 1 66 661 1 66 669 1 66 683 1 66 686 1 66 689 1 66 690 1 66 703 1 66 706 1 66 709 1 66 710 1 66 722 1 66 725 1 66 726 1 66 728 1 66 729 1 66 731 1 66 738 1 66 741 1 66 744 1 66 745 1 66 757 1 66 760 1 66 761 1 66 763 1 66 764 1 66 766 1 66 772 1 66 775 1 66 776 1 66 778 1 66 779 1 66 781 1 66 787 1 66 788 1 66 790 1 66 791 1 66 808 1 66 829 1 66 844 1 66 858 1 66 861 1 66 864 1 66 865 1 66 885 1 66 900 1 66 914 1 66 917 1 66 920 1 66 921 1 66 935 1 66 949 1 66 952 1 66 955 1 66 956 1 66 969 1 66 972 1 66 975 1 66 976 1 66 988 1 66 991 1 66 992 1 66 994 1 66 995 1 66 997 1 66 1011 1 66 1026 1 66 1040 1 66 1043 1 66 1046 1 66 1047 1 66 1061 1 66 1075 1 66 1078 1 66 1081 1 66 1082 1 66 1095 1 66 1098 1 66 1101 1 66 1102 1 66 1114 1 66 1117 1 66 1118 1 66 1120 1 66 1121 1 66 1123 1 66 1131 1 66 1145 1 66 1148 1 66 1151 1 66 1152 1 66 1165 1 66 1168 1 66 1171 1 66 1172 1 66 1184 1 66 1187 1 66 1188 1 66 1190 1 66 1191 1 66 1193 1 66 1200 1 66 1203 1 66 1206 1 66 1207 1 66 1219 1 66 1222 1 66 1223 1 66 1225 1 66 1226 1 66 1228 1 66 1234 1 66 1237 1 66 1238 1 66 1240 1 66 1241 1 66 1243 1 66 1249 1 66 1250 1 66 1252 1 66 1253 1 66 1263 1 66 1278 1 66 1292 1 66 1295 1 66 1298 1 66 1299 1 66 1313 1 66 1327 1 66 1330 1 66 1333 1 66 1334 1 66 1347 1 66 1350 1 66 1353 1 66 1354 1 66 1366 1 66 1369 1 66 1370 1 66 1372 1 66 1373 1 66 1375 1 66 1383 1 66 1397 1 66 1400 1 66 1403 1 66 1404 1 66 1417 1 66 1420 1 66 1423 1 66 1424 1 66 1436 1 66 1439 1 66 1440 1 66 1442 1 66 1443 1 66 1445 1 66 1452 1 66 1455 1 66 1458 1 66 1459 1 66 1471 1 66 1474 1 66 1475 1 66 1477 1 66 1478 1 66 1480 1 66 1486 1 66 1489 1 66 1490 1 66 1492 1 66 1493 1 66 1495 1 66 1501 1 66 1502 1 66 1504 1 66 1505 1 66 1509 1 66 1523 1 66 1526 1 66 1529 1 66 1530 1 66 1543 1 66 1546 1 66 1549 1 66 1550 1 66 1562 1 66 1565 1 66 1566 1 66 1568 1 66 1569 1 66 1571 1 66 1578 1 66 1581 1 66 1584 1 66 1585 1 66 1597 1 66 1600 1 66 1601 1 66 1603 1 66 1604 1 66 1606 1 66 1612 1 66 1615 1 66 1616 1 66 1618 1 66 1619 1 66 1621 1 66 1627 1 66 1628 1 66 1630 1 66 1631 1 66 1634 1 66 1637 1 66 1640 1 66 1641 1 66 1653 1 66 1656 1 66 1657 1 66 1659 1 66 1660 1 66 1662 1 66 1668 1 66 1671 1 66 1672 1 66 1674 1 66 1675 1 66 1677 1 66 1683 1 66 1684 1 66 1686 1 66 1687 1 66 1689 1 66 1692 1 66 1693 1 66 1695 1 66 1696 1 66 1698 1 66 1704 1 66 1705 1 66 1707 1 66 1708 1 66 1710 1 66 1711 1 66 1713 1 66 1714 1 66 1716 1 67 25 1 67 53 1 67 74 1 67 89 1 67 103 1 67 106 1 67 108 1 67 110 1 67 137 1 67 158 1 67 173 1 67 187 1 67 190 1 67 192 1 67 194 1 67 214 1 67 229 1 67 243 1 67 246 1 67 248 1 67 250 1 67 264 1 67 278 1 67 281 1 67 283 1 67 285 1 67 298 1 67 301 1 67 303 1 67 305 1 67 317 1 67 319 1 67 321 1 67 322 1 67 324 1 67 325 1 67 347 1 67 368 1 67 383 1 67 397 1 67 400 1 67 402 1 67 404 1 67 424 1 67 439 1 67 453 1 67 456 1 67 458 1 67 460 1 67 474 1 67 488 1 67 491 1 67 493 1 67 495 1 67 508 1 67 511 1 67 513 1 67 515 1 67 527 1 67 529 1 67 531 1 67 532 1 67 534 1 67 535 1 67 550 1 67 565 1 67 579 1 67 582 1 67 584 1 67 586 1 67 600 1 67 614 1 67 617 1 67 619 1 67 621 1 67 634 1 67 637 1 67 639 1 67 641 1 67 653 1 67 655 1 67 657 1 67 658 1 67 660 1 67 661 1 67 670 1 67 684 1 67 687 1 67 689 1 67 691 1 67 704 1 67 707 1 67 709 1 67 711 1 67 723 1 67 725 1 67 727 1 67 728 1 67 730 1 67 731 1 67 739 1 67 742 1 67 744 1 67 746 1 67 758 1 67 760 1 67 762 1 67 763 1 67 765 1 67 766 1 67 773 1 67 775 1 67 777 1 67 778 1 67 780 1 67 781 1 67 787 1 67 789 1 67 790 1 67 791 1 67 809 1 67 830 1 67 845 1 67 859 1 67 862 1 67 864 1 67 866 1 67 886 1 67 901 1 67 915 1 67 918 1 67 920 1 67 922 1 67 936 1 67 950 1 67 953 1 67 955 1 67 957 1 67 970 1 67 973 1 67 975 1 67 977 1 67 989 1 67 991 1 67 993 1 67 994 1 67 996 1 67 997 1 67 1012 1 67 1027 1 67 1041 1 67 1044 1 67 1046 1 67 1048 1 67 1062 1 67 1076 1 67 1079 1 67 1081 1 67 1083 1 67 1096 1 67 1099 1 67 1101 1 67 1103 1 67 1115 1 67 1117 1 67 1119 1 67 1120 1 67 1122 1 67 1123 1 67 1132 1 67 1146 1 67 1149 1 67 1151 1 67 1153 1 67 1166 1 67 1169 1 67 1171 1 67 1173 1 67 1185 1 67 1187 1 67 1189 1 67 1190 1 67 1192 1 67 1193 1 67 1201 1 67 1204 1 67 1206 1 67 1208 1 67 1220 1 67 1222 1 67 1224 1 67 1225 1 67 1227 1 67 1228 1 67 1235 1 67 1237 1 67 1239 1 67 1240 1 67 1242 1 67 1243 1 67 1249 1 67 1251 1 67 1252 1 67 1253 1 67 1264 1 67 1279 1 67 1293 1 67 1296 1 67 1298 1 67 1300 1 67 1314 1 67 1328 1 67 1331 1 67 1333 1 67 1335 1 67 1348 1 67 1351 1 67 1353 1 67 1355 1 67 1367 1 67 1369 1 67 1371 1 67 1372 1 67 1374 1 67 1375 1 67 1384 1 67 1398 1 67 1401 1 67 1403 1 67 1405 1 67 1418 1 67 1421 1 67 1423 1 67 1425 1 67 1437 1 67 1439 1 67 1441 1 67 1442 1 67 1444 1 67 1445 1 67 1453 1 67 1456 1 67 1458 1 67 1460 1 67 1472 1 67 1474 1 67 1476 1 67 1477 1 67 1479 1 67 1480 1 67 1487 1 67 1489 1 67 1491 1 67 1492 1 67 1494 1 67 1495 1 67 1501 1 67 1503 1 67 1504 1 67 1505 1 67 1510 1 67 1524 1 67 1527 1 67 1529 1 67 1531 1 67 1544 1 67 1547 1 67 1549 1 67 1551 1 67 1563 1 67 1565 1 67 1567 1 67 1568 1 67 1570 1 67 1571 1 67 1579 1 67 1582 1 67 1584 1 67 1586 1 67 1598 1 67 1600 1 67 1602 1 67 1603 1 67 1605 1 67 1606 1 67 1613 1 67 1615 1 67 1617 1 67 1618 1 67 1620 1 67 1621 1 67 1627 1 67 1629 1 67 1630 1 67 1631 1 67 1635 1 67 1638 1 67 1640 1 67 1642 1 67 1654 1 67 1656 1 67 1658 1 67 1659 1 67 1661 1 67 1662 1 67 1669 1 67 1671 1 67 1673 1 67 1674 1 67 1676 1 67 1677 1 67 1683 1 67 1685 1 67 1686 1 67 1687 1 67 1690 1 67 1692 1 67 1694 1 67 1695 1 67 1697 1 67 1698 1 67 1704 1 67 1706 1 67 1707 1 67 1708 1 67 1710 1 67 1712 1 67 1713 1 67 1714 1 67 1716 1 68 26 1 68 54 1 68 75 1 68 90 1 68 104 1 68 107 1 68 109 1 68 110 1 68 138 1 68 159 1 68 174 1 68 188 1 68 191 1 68 193 1 68 194 1 68 215 1 68 230 1 68 244 1 68 247 1 68 249 1 68 250 1 68 265 1 68 279 1 68 282 1 68 284 1 68 285 1 68 299 1 68 302 1 68 304 1 68 305 1 68 318 1 68 320 1 68 321 1 68 323 1 68 324 1 68 325 1 68 348 1 68 369 1 68 384 1 68 398 1 68 401 1 68 403 1 68 404 1 68 425 1 68 440 1 68 454 1 68 457 1 68 459 1 68 460 1 68 475 1 68 489 1 68 492 1 68 494 1 68 495 1 68 509 1 68 512 1 68 514 1 68 515 1 68 528 1 68 530 1 68 531 1 68 533 1 68 534 1 68 535 1 68 551 1 68 566 1 68 580 1 68 583 1 68 585 1 68 586 1 68 601 1 68 615 1 68 618 1 68 620 1 68 621 1 68 635 1 68 638 1 68 640 1 68 641 1 68 654 1 68 656 1 68 657 1 68 659 1 68 660 1 68 661 1 68 671 1 68 685 1 68 688 1 68 690 1 68 691 1 68 705 1 68 708 1 68 710 1 68 711 1 68 724 1 68 726 1 68 727 1 68 729 1 68 730 1 68 731 1 68 740 1 68 743 1 68 745 1 68 746 1 68 759 1 68 761 1 68 762 1 68 764 1 68 765 1 68 766 1 68 774 1 68 776 1 68 777 1 68 779 1 68 780 1 68 781 1 68 788 1 68 789 1 68 790 1 68 791 1 68 810 1 68 831 1 68 846 1 68 860 1 68 863 1 68 865 1 68 866 1 68 887 1 68 902 1 68 916 1 68 919 1 68 921 1 68 922 1 68 937 1 68 951 1 68 954 1 68 956 1 68 957 1 68 971 1 68 974 1 68 976 1 68 977 1 68 990 1 68 992 1 68 993 1 68 995 1 68 996 1 68 997 1 68 1013 1 68 1028 1 68 1042 1 68 1045 1 68 1047 1 68 1048 1 68 1063 1 68 1077 1 68 1080 1 68 1082 1 68 1083 1 68 1097 1 68 1100 1 68 1102 1 68 1103 1 68 1116 1 68 1118 1 68 1119 1 68 1121 1 68 1122 1 68 1123 1 68 1133 1 68 1147 1 68 1150 1 68 1152 1 68 1153 1 68 1167 1 68 1170 1 68 1172 1 68 1173 1 68 1186 1 68 1188 1 68 1189 1 68 1191 1 68 1192 1 68 1193 1 68 1202 1 68 1205 1 68 1207 1 68 1208 1 68 1221 1 68 1223 1 68 1224 1 68 1226 1 68 1227 1 68 1228 1 68 1236 1 68 1238 1 68 1239 1 68 1241 1 68 1242 1 68 1243 1 68 1250 1 68 1251 1 68 1252 1 68 1253 1 68 1265 1 68 1280 1 68 1294 1 68 1297 1 68 1299 1 68 1300 1 68 1315 1 68 1329 1 68 1332 1 68 1334 1 68 1335 1 68 1349 1 68 1352 1 68 1354 1 68 1355 1 68 1368 1 68 1370 1 68 1371 1 68 1373 1 68 1374 1 68 1375 1 68 1385 1 68 1399 1 68 1402 1 68 1404 1 68 1405 1 68 1419 1 68 1422 1 68 1424 1 68 1425 1 68 1438 1 68 1440 1 68 1441 1 68 1443 1 68 1444 1 68 1445 1 68 1454 1 68 1457 1 68 1459 1 68 1460 1 68 1473 1 68 1475 1 68 1476 1 68 1478 1 68 1479 1 68 1480 1 68 1488 1 68 1490 1 68 1491 1 68 1493 1 68 1494 1 68 1495 1 68 1502 1 68 1503 1 68 1504 1 68 1505 1 68 1511 1 68 1525 1 68 1528 1 68 1530 1 68 1531 1 68 1545 1 68 1548 1 68 1550 1 68 1551 1 68 1564 1 68 1566 1 68 1567 1 68 1569 1 68 1570 1 68 1571 1 68 1580 1 68 1583 1 68 1585 1 68 1586 1 68 1599 1 68 1601 1 68 1602 1 68 1604 1 68 1605 1 68 1606 1 68 1614 1 68 1616 1 68 1617 1 68 1619 1 68 1620 1 68 1621 1 68 1628 1 68 1629 1 68 1630 1 68 1631 1 68 1636 1 68 1639 1 68 1641 1 68 1642 1 68 1655 1 68 1657 1 68 1658 1 68 1660 1 68 1661 1 68 1662 1 68 1670 1 68 1672 1 68 1673 1 68 1675 1 68 1676 1 68 1677 1 68 1684 1 68 1685 1 68 1686 1 68 1687 1 68 1691 1 68 1693 1 68 1694 1 68 1696 1 68 1697 1 68 1698 1 68 1705 1 68 1706 1 68 1707 1 68 1708 1 68 1711 1 68 1712 1 68 1713 1 68 1714 1 68 1716 1 69 27 1 69 55 1 69 76 1 69 91 1 69 101 1 69 111 1 69 112 1 69 113 1 69 139 1 69 160 1 69 175 1 69 185 1 69 195 1 69 196 1 69 197 1 69 216 1 69 231 1 69 241 1 69 251 1 69 252 1 69 253 1 69 266 1 69 276 1 69 286 1 69 287 1 69 288 1 69 296 1 69 306 1 69 307 1 69 308 1 69 316 1 69 317 1 69 318 1 69 326 1 69 327 1 69 328 1 69 349 1 69 370 1 69 385 1 69 395 1 69 405 1 69 406 1 69 407 1 69 426 1 69 441 1 69 451 1 69 461 1 69 462 1 69 463 1 69 476 1 69 486 1 69 496 1 69 497 1 69 498 1 69 506 1 69 516 1 69 517 1 69 518 1 69 526 1 69 527 1 69 528 1 69 536 1 69 537 1 69 538 1 69 552 1 69 567 1 69 577 1 69 587 1 69 588 1 69 589 1 69 602 1 69 612 1 69 622 1 69 623 1 69 624 1 69 632 1 69 642 1 69 643 1 69 644 1 69 652 1 69 653 1 69 654 1 69 662 1 69 663 1 69 664 1 69 672 1 69 682 1 69 692 1 69 693 1 69 694 1 69 702 1 69 712 1 69 713 1 69 714 1 69 722 1 69 723 1 69 724 1 69 732 1 69 733 1 69 734 1 69 737 1 69 747 1 69 748 1 69 749 1 69 757 1 69 758 1 69 759 1 69 767 1 69 768 1 69 769 1 69 772 1 69 773 1 69 774 1 69 782 1 69 783 1 69 784 1 69 787 1 69 788 1 69 789 1 69 792 1 69 811 1 69 832 1 69 847 1 69 857 1 69 867 1 69 868 1 69 869 1 69 888 1 69 903 1 69 913 1 69 923 1 69 924 1 69 925 1 69 938 1 69 948 1 69 958 1 69 959 1 69 960 1 69 968 1 69 978 1 69 979 1 69 980 1 69 988 1 69 989 1 69 990 1 69 998 1 69 999 1 69 1000 1 69 1014 1 69 1029 1 69 1039 1 69 1049 1 69 1050 1 69 1051 1 69 1064 1 69 1074 1 69 1084 1 69 1085 1 69 1086 1 69 1094 1 69 1104 1 69 1105 1 69 1106 1 69 1114 1 69 1115 1 69 1116 1 69 1124 1 69 1125 1 69 1126 1 69 1134 1 69 1144 1 69 1154 1 69 1155 1 69 1156 1 69 1164 1 69 1174 1 69 1175 1 69 1176 1 69 1184 1 69 1185 1 69 1186 1 69 1194 1 69 1195 1 69 1196 1 69 1199 1 69 1209 1 69 1210 1 69 1211 1 69 1219 1 69 1220 1 69 1221 1 69 1229 1 69 1230 1 69 1231 1 69 1234 1 69 1235 1 69 1236 1 69 1244 1 69 1245 1 69 1246 1 69 1249 1 69 1250 1 69 1251 1 69 1254 1 69 1266 1 69 1281 1 69 1291 1 69 1301 1 69 1302 1 69 1303 1 69 1316 1 69 1326 1 69 1336 1 69 1337 1 69 1338 1 69 1346 1 69 1356 1 69 1357 1 69 1358 1 69 1366 1 69 1367 1 69 1368 1 69 1376 1 69 1377 1 69 1378 1 69 1386 1 69 1396 1 69 1406 1 69 1407 1 69 1408 1 69 1416 1 69 1426 1 69 1427 1 69 1428 1 69 1436 1 69 1437 1 69 1438 1 69 1446 1 69 1447 1 69 1448 1 69 1451 1 69 1461 1 69 1462 1 69 1463 1 69 1471 1 69 1472 1 69 1473 1 69 1481 1 69 1482 1 69 1483 1 69 1486 1 69 1487 1 69 1488 1 69 1496 1 69 1497 1 69 1498 1 69 1501 1 69 1502 1 69 1503 1 69 1506 1 69 1512 1 69 1522 1 69 1532 1 69 1533 1 69 1534 1 69 1542 1 69 1552 1 69 1553 1 69 1554 1 69 1562 1 69 1563 1 69 1564 1 69 1572 1 69 1573 1 69 1574 1 69 1577 1 69 1587 1 69 1588 1 69 1589 1 69 1597 1 69 1598 1 69 1599 1 69 1607 1 69 1608 1 69 1609 1 69 1612 1 69 1613 1 69 1614 1 69 1622 1 69 1623 1 69 1624 1 69 1627 1 69 1628 1 69 1629 1 69 1632 1 69 1633 1 69 1643 1 69 1644 1 69 1645 1 69 1653 1 69 1654 1 69 1655 1 69 1663 1 69 1664 1 69 1665 1 69 1668 1 69 1669 1 69 1670 1 69 1678 1 69 1679 1 69 1680 1 69 1683 1 69 1684 1 69 1685 1 69 1688 1 69 1689 1 69 1690 1 69 1691 1 69 1699 1 69 1700 1 69 1701 1 69 1704 1 69 1705 1 69 1706 1 69 1709 1 69 1710 1 69 1711 1 69 1712 1 69 1715 1 69 1716 1 70 28 1 70 56 1 70 77 1 70 92 1 70 102 1 70 111 1 70 114 1 70 115 1 70 140 1 70 161 1 70 176 1 70 186 1 70 195 1 70 198 1 70 199 1 70 217 1 70 232 1 70 242 1 70 251 1 70 254 1 70 255 1 70 267 1 70 277 1 70 286 1 70 289 1 70 290 1 70 297 1 70 306 1 70 309 1 70 310 1 70 316 1 70 319 1 70 320 1 70 326 1 70 327 1 70 329 1 70 350 1 70 371 1 70 386 1 70 396 1 70 405 1 70 408 1 70 409 1 70 427 1 70 442 1 70 452 1 70 461 1 70 464 1 70 465 1 70 477 1 70 487 1 70 496 1 70 499 1 70 500 1 70 507 1 70 516 1 70 519 1 70 520 1 70 526 1 70 529 1 70 530 1 70 536 1 70 537 1 70 539 1 70 553 1 70 568 1 70 578 1 70 587 1 70 590 1 70 591 1 70 603 1 70 613 1 70 622 1 70 625 1 70 626 1 70 633 1 70 642 1 70 645 1 70 646 1 70 652 1 70 655 1 70 656 1 70 662 1 70 663 1 70 665 1 70 673 1 70 683 1 70 692 1 70 695 1 70 696 1 70 703 1 70 712 1 70 715 1 70 716 1 70 722 1 70 725 1 70 726 1 70 732 1 70 733 1 70 735 1 70 738 1 70 747 1 70 750 1 70 751 1 70 757 1 70 760 1 70 761 1 70 767 1 70 768 1 70 770 1 70 772 1 70 775 1 70 776 1 70 782 1 70 783 1 70 785 1 70 787 1 70 788 1 70 790 1 70 792 1 70 812 1 70 833 1 70 848 1 70 858 1 70 867 1 70 870 1 70 871 1 70 889 1 70 904 1 70 914 1 70 923 1 70 926 1 70 927 1 70 939 1 70 949 1 70 958 1 70 961 1 70 962 1 70 969 1 70 978 1 70 981 1 70 982 1 70 988 1 70 991 1 70 992 1 70 998 1 70 999 1 70 1001 1 70 1015 1 70 1030 1 70 1040 1 70 1049 1 70 1052 1 70 1053 1 70 1065 1 70 1075 1 70 1084 1 70 1087 1 70 1088 1 70 1095 1 70 1104 1 70 1107 1 70 1108 1 70 1114 1 70 1117 1 70 1118 1 70 1124 1 70 1125 1 70 1127 1 70 1135 1 70 1145 1 70 1154 1 70 1157 1 70 1158 1 70 1165 1 70 1174 1 70 1177 1 70 1178 1 70 1184 1 70 1187 1 70 1188 1 70 1194 1 70 1195 1 70 1197 1 70 1200 1 70 1209 1 70 1212 1 70 1213 1 70 1219 1 70 1222 1 70 1223 1 70 1229 1 70 1230 1 70 1232 1 70 1234 1 70 1237 1 70 1238 1 70 1244 1 70 1245 1 70 1247 1 70 1249 1 70 1250 1 70 1252 1 70 1254 1 70 1267 1 70 1282 1 70 1292 1 70 1301 1 70 1304 1 70 1305 1 70 1317 1 70 1327 1 70 1336 1 70 1339 1 70 1340 1 70 1347 1 70 1356 1 70 1359 1 70 1360 1 70 1366 1 70 1369 1 70 1370 1 70 1376 1 70 1377 1 70 1379 1 70 1387 1 70 1397 1 70 1406 1 70 1409 1 70 1410 1 70 1417 1 70 1426 1 70 1429 1 70 1430 1 70 1436 1 70 1439 1 70 1440 1 70 1446 1 70 1447 1 70 1449 1 70 1452 1 70 1461 1 70 1464 1 70 1465 1 70 1471 1 70 1474 1 70 1475 1 70 1481 1 70 1482 1 70 1484 1 70 1486 1 70 1489 1 70 1490 1 70 1496 1 70 1497 1 70 1499 1 70 1501 1 70 1502 1 70 1504 1 70 1506 1 70 1513 1 70 1523 1 70 1532 1 70 1535 1 70 1536 1 70 1543 1 70 1552 1 70 1555 1 70 1556 1 70 1562 1 70 1565 1 70 1566 1 70 1572 1 70 1573 1 70 1575 1 70 1578 1 70 1587 1 70 1590 1 70 1591 1 70 1597 1 70 1600 1 70 1601 1 70 1607 1 70 1608 1 70 1610 1 70 1612 1 70 1615 1 70 1616 1 70 1622 1 70 1623 1 70 1625 1 70 1627 1 70 1628 1 70 1630 1 70 1632 1 70 1634 1 70 1643 1 70 1646 1 70 1647 1 70 1653 1 70 1656 1 70 1657 1 70 1663 1 70 1664 1 70 1666 1 70 1668 1 70 1671 1 70 1672 1 70 1678 1 70 1679 1 70 1681 1 70 1683 1 70 1684 1 70 1686 1 70 1688 1 70 1689 1 70 1692 1 70 1693 1 70 1699 1 70 1700 1 70 1702 1 70 1704 1 70 1705 1 70 1707 1 70 1709 1 70 1710 1 70 1711 1 70 1713 1 70 1715 1 70 1716 1 71 29 1 71 57 1 71 78 1 71 93 1 71 103 1 71 112 1 71 114 1 71 116 1 71 141 1 71 162 1 71 177 1 71 187 1 71 196 1 71 198 1 71 200 1 71 218 1 71 233 1 71 243 1 71 252 1 71 254 1 71 256 1 71 268 1 71 278 1 71 287 1 71 289 1 71 291 1 71 298 1 71 307 1 71 309 1 71 311 1 71 317 1 71 319 1 71 321 1 71 326 1 71 328 1 71 329 1 71 351 1 71 372 1 71 387 1 71 397 1 71 406 1 71 408 1 71 410 1 71 428 1 71 443 1 71 453 1 71 462 1 71 464 1 71 466 1 71 478 1 71 488 1 71 497 1 71 499 1 71 501 1 71 508 1 71 517 1 71 519 1 71 521 1 71 527 1 71 529 1 71 531 1 71 536 1 71 538 1 71 539 1 71 554 1 71 569 1 71 579 1 71 588 1 71 590 1 71 592 1 71 604 1 71 614 1 71 623 1 71 625 1 71 627 1 71 634 1 71 643 1 71 645 1 71 647 1 71 653 1 71 655 1 71 657 1 71 662 1 71 664 1 71 665 1 71 674 1 71 684 1 71 693 1 71 695 1 71 697 1 71 704 1 71 713 1 71 715 1 71 717 1 71 723 1 71 725 1 71 727 1 71 732 1 71 734 1 71 735 1 71 739 1 71 748 1 71 750 1 71 752 1 71 758 1 71 760 1 71 762 1 71 767 1 71 769 1 71 770 1 71 773 1 71 775 1 71 777 1 71 782 1 71 784 1 71 785 1 71 787 1 71 789 1 71 790 1 71 792 1 71 813 1 71 834 1 71 849 1 71 859 1 71 868 1 71 870 1 71 872 1 71 890 1 71 905 1 71 915 1 71 924 1 71 926 1 71 928 1 71 940 1 71 950 1 71 959 1 71 961 1 71 963 1 71 970 1 71 979 1 71 981 1 71 983 1 71 989 1 71 991 1 71 993 1 71 998 1 71 1000 1 71 1001 1 71 1016 1 71 1031 1 71 1041 1 71 1050 1 71 1052 1 71 1054 1 71 1066 1 71 1076 1 71 1085 1 71 1087 1 71 1089 1 71 1096 1 71 1105 1 71 1107 1 71 1109 1 71 1115 1 71 1117 1 71 1119 1 71 1124 1 71 1126 1 71 1127 1 71 1136 1 71 1146 1 71 1155 1 71 1157 1 71 1159 1 71 1166 1 71 1175 1 71 1177 1 71 1179 1 71 1185 1 71 1187 1 71 1189 1 71 1194 1 71 1196 1 71 1197 1 71 1201 1 71 1210 1 71 1212 1 71 1214 1 71 1220 1 71 1222 1 71 1224 1 71 1229 1 71 1231 1 71 1232 1 71 1235 1 71 1237 1 71 1239 1 71 1244 1 71 1246 1 71 1247 1 71 1249 1 71 1251 1 71 1252 1 71 1254 1 71 1268 1 71 1283 1 71 1293 1 71 1302 1 71 1304 1 71 1306 1 71 1318 1 71 1328 1 71 1337 1 71 1339 1 71 1341 1 71 1348 1 71 1357 1 71 1359 1 71 1361 1 71 1367 1 71 1369 1 71 1371 1 71 1376 1 71 1378 1 71 1379 1 71 1388 1 71 1398 1 71 1407 1 71 1409 1 71 1411 1 71 1418 1 71 1427 1 71 1429 1 71 1431 1 71 1437 1 71 1439 1 71 1441 1 71 1446 1 71 1448 1 71 1449 1 71 1453 1 71 1462 1 71 1464 1 71 1466 1 71 1472 1 71 1474 1 71 1476 1 71 1481 1 71 1483 1 71 1484 1 71 1487 1 71 1489 1 71 1491 1 71 1496 1 71 1498 1 71 1499 1 71 1501 1 71 1503 1 71 1504 1 71 1506 1 71 1514 1 71 1524 1 71 1533 1 71 1535 1 71 1537 1 71 1544 1 71 1553 1 71 1555 1 71 1557 1 71 1563 1 71 1565 1 71 1567 1 71 1572 1 71 1574 1 71 1575 1 71 1579 1 71 1588 1 71 1590 1 71 1592 1 71 1598 1 71 1600 1 71 1602 1 71 1607 1 71 1609 1 71 1610 1 71 1613 1 71 1615 1 71 1617 1 71 1622 1 71 1624 1 71 1625 1 71 1627 1 71 1629 1 71 1630 1 71 1632 1 71 1635 1 71 1644 1 71 1646 1 71 1648 1 71 1654 1 71 1656 1 71 1658 1 71 1663 1 71 1665 1 71 1666 1 71 1669 1 71 1671 1 71 1673 1 71 1678 1 71 1680 1 71 1681 1 71 1683 1 71 1685 1 71 1686 1 71 1688 1 71 1690 1 71 1692 1 71 1694 1 71 1699 1 71 1701 1 71 1702 1 71 1704 1 71 1706 1 71 1707 1 71 1709 1 71 1710 1 71 1712 1 71 1713 1 71 1715 1 71 1716 1 72 30 1 72 58 1 72 79 1 72 94 1 72 104 1 72 113 1 72 115 1 72 116 1 72 142 1 72 163 1 72 178 1 72 188 1 72 197 1 72 199 1 72 200 1 72 219 1 72 234 1 72 244 1 72 253 1 72 255 1 72 256 1 72 269 1 72 279 1 72 288 1 72 290 1 72 291 1 72 299 1 72 308 1 72 310 1 72 311 1 72 318 1 72 320 1 72 321 1 72 327 1 72 328 1 72 329 1 72 352 1 72 373 1 72 388 1 72 398 1 72 407 1 72 409 1 72 410 1 72 429 1 72 444 1 72 454 1 72 463 1 72 465 1 72 466 1 72 479 1 72 489 1 72 498 1 72 500 1 72 501 1 72 509 1 72 518 1 72 520 1 72 521 1 72 528 1 72 530 1 72 531 1 72 537 1 72 538 1 72 539 1 72 555 1 72 570 1 72 580 1 72 589 1 72 591 1 72 592 1 72 605 1 72 615 1 72 624 1 72 626 1 72 627 1 72 635 1 72 644 1 72 646 1 72 647 1 72 654 1 72 656 1 72 657 1 72 663 1 72 664 1 72 665 1 72 675 1 72 685 1 72 694 1 72 696 1 72 697 1 72 705 1 72 714 1 72 716 1 72 717 1 72 724 1 72 726 1 72 727 1 72 733 1 72 734 1 72 735 1 72 740 1 72 749 1 72 751 1 72 752 1 72 759 1 72 761 1 72 762 1 72 768 1 72 769 1 72 770 1 72 774 1 72 776 1 72 777 1 72 783 1 72 784 1 72 785 1 72 788 1 72 789 1 72 790 1 72 792 1 72 814 1 72 835 1 72 850 1 72 860 1 72 869 1 72 871 1 72 872 1 72 891 1 72 906 1 72 916 1 72 925 1 72 927 1 72 928 1 72 941 1 72 951 1 72 960 1 72 962 1 72 963 1 72 971 1 72 980 1 72 982 1 72 983 1 72 990 1 72 992 1 72 993 1 72 999 1 72 1000 1 72 1001 1 72 1017 1 72 1032 1 72 1042 1 72 1051 1 72 1053 1 72 1054 1 72 1067 1 72 1077 1 72 1086 1 72 1088 1 72 1089 1 72 1097 1 72 1106 1 72 1108 1 72 1109 1 72 1116 1 72 1118 1 72 1119 1 72 1125 1 72 1126 1 72 1127 1 72 1137 1 72 1147 1 72 1156 1 72 1158 1 72 1159 1 72 1167 1 72 1176 1 72 1178 1 72 1179 1 72 1186 1 72 1188 1 72 1189 1 72 1195 1 72 1196 1 72 1197 1 72 1202 1 72 1211 1 72 1213 1 72 1214 1 72 1221 1 72 1223 1 72 1224 1 72 1230 1 72 1231 1 72 1232 1 72 1236 1 72 1238 1 72 1239 1 72 1245 1 72 1246 1 72 1247 1 72 1250 1 72 1251 1 72 1252 1 72 1254 1 72 1269 1 72 1284 1 72 1294 1 72 1303 1 72 1305 1 72 1306 1 72 1319 1 72 1329 1 72 1338 1 72 1340 1 72 1341 1 72 1349 1 72 1358 1 72 1360 1 72 1361 1 72 1368 1 72 1370 1 72 1371 1 72 1377 1 72 1378 1 72 1379 1 72 1389 1 72 1399 1 72 1408 1 72 1410 1 72 1411 1 72 1419 1 72 1428 1 72 1430 1 72 1431 1 72 1438 1 72 1440 1 72 1441 1 72 1447 1 72 1448 1 72 1449 1 72 1454 1 72 1463 1 72 1465 1 72 1466 1 72 1473 1 72 1475 1 72 1476 1 72 1482 1 72 1483 1 72 1484 1 72 1488 1 72 1490 1 72 1491 1 72 1497 1 72 1498 1 72 1499 1 72 1502 1 72 1503 1 72 1504 1 72 1506 1 72 1515 1 72 1525 1 72 1534 1 72 1536 1 72 1537 1 72 1545 1 72 1554 1 72 1556 1 72 1557 1 72 1564 1 72 1566 1 72 1567 1 72 1573 1 72 1574 1 72 1575 1 72 1580 1 72 1589 1 72 1591 1 72 1592 1 72 1599 1 72 1601 1 72 1602 1 72 1608 1 72 1609 1 72 1610 1 72 1614 1 72 1616 1 72 1617 1 72 1623 1 72 1624 1 72 1625 1 72 1628 1 72 1629 1 72 1630 1 72 1632 1 72 1636 1 72 1645 1 72 1647 1 72 1648 1 72 1655 1 72 1657 1 72 1658 1 72 1664 1 72 1665 1 72 1666 1 72 1670 1 72 1672 1 72 1673 1 72 1679 1 72 1680 1 72 1681 1 72 1684 1 72 1685 1 72 1686 1 72 1688 1 72 1691 1 72 1693 1 72 1694 1 72 1700 1 72 1701 1 72 1702 1 72 1705 1 72 1706 1 72 1707 1 72 1709 1 72 1711 1 72 1712 1 72 1713 1 72 1715 1 72 1716 1 73 31 1 73 59 1 73 80 1 73 95 1 73 105 1 73 111 1 73 117 1 73 118 1 73 143 1 73 164 1 73 179 1 73 189 1 73 195 1 73 201 1 73 202 1 73 220 1 73 235 1 73 245 1 73 251 1 73 257 1 73 258 1 73 270 1 73 280 1 73 286 1 73 292 1 73 293 1 73 300 1 73 306 1 73 312 1 73 313 1 73 316 1 73 322 1 73 323 1 73 326 1 73 327 1 73 330 1 73 353 1 73 374 1 73 389 1 73 399 1 73 405 1 73 411 1 73 412 1 73 430 1 73 445 1 73 455 1 73 461 1 73 467 1 73 468 1 73 480 1 73 490 1 73 496 1 73 502 1 73 503 1 73 510 1 73 516 1 73 522 1 73 523 1 73 526 1 73 532 1 73 533 1 73 536 1 73 537 1 73 540 1 73 556 1 73 571 1 73 581 1 73 587 1 73 593 1 73 594 1 73 606 1 73 616 1 73 622 1 73 628 1 73 629 1 73 636 1 73 642 1 73 648 1 73 649 1 73 652 1 73 658 1 73 659 1 73 662 1 73 663 1 73 666 1 73 676 1 73 686 1 73 692 1 73 698 1 73 699 1 73 706 1 73 712 1 73 718 1 73 719 1 73 722 1 73 728 1 73 729 1 73 732 1 73 733 1 73 736 1 73 741 1 73 747 1 73 753 1 73 754 1 73 757 1 73 763 1 73 764 1 73 767 1 73 768 1 73 771 1 73 772 1 73 778 1 73 779 1 73 782 1 73 783 1 73 786 1 73 787 1 73 788 1 73 791 1 73 792 1 73 815 1 73 836 1 73 851 1 73 861 1 73 867 1 73 873 1 73 874 1 73 892 1 73 907 1 73 917 1 73 923 1 73 929 1 73 930 1 73 942 1 73 952 1 73 958 1 73 964 1 73 965 1 73 972 1 73 978 1 73 984 1 73 985 1 73 988 1 73 994 1 73 995 1 73 998 1 73 999 1 73 1002 1 73 1018 1 73 1033 1 73 1043 1 73 1049 1 73 1055 1 73 1056 1 73 1068 1 73 1078 1 73 1084 1 73 1090 1 73 1091 1 73 1098 1 73 1104 1 73 1110 1 73 1111 1 73 1114 1 73 1120 1 73 1121 1 73 1124 1 73 1125 1 73 1128 1 73 1138 1 73 1148 1 73 1154 1 73 1160 1 73 1161 1 73 1168 1 73 1174 1 73 1180 1 73 1181 1 73 1184 1 73 1190 1 73 1191 1 73 1194 1 73 1195 1 73 1198 1 73 1203 1 73 1209 1 73 1215 1 73 1216 1 73 1219 1 73 1225 1 73 1226 1 73 1229 1 73 1230 1 73 1233 1 73 1234 1 73 1240 1 73 1241 1 73 1244 1 73 1245 1 73 1248 1 73 1249 1 73 1250 1 73 1253 1 73 1254 1 73 1270 1 73 1285 1 73 1295 1 73 1301 1 73 1307 1 73 1308 1 73 1320 1 73 1330 1 73 1336 1 73 1342 1 73 1343 1 73 1350 1 73 1356 1 73 1362 1 73 1363 1 73 1366 1 73 1372 1 73 1373 1 73 1376 1 73 1377 1 73 1380 1 73 1390 1 73 1400 1 73 1406 1 73 1412 1 73 1413 1 73 1420 1 73 1426 1 73 1432 1 73 1433 1 73 1436 1 73 1442 1 73 1443 1 73 1446 1 73 1447 1 73 1450 1 73 1455 1 73 1461 1 73 1467 1 73 1468 1 73 1471 1 73 1477 1 73 1478 1 73 1481 1 73 1482 1 73 1485 1 73 1486 1 73 1492 1 73 1493 1 73 1496 1 73 1497 1 73 1500 1 73 1501 1 73 1502 1 73 1505 1 73 1506 1 73 1516 1 73 1526 1 73 1532 1 73 1538 1 73 1539 1 73 1546 1 73 1552 1 73 1558 1 73 1559 1 73 1562 1 73 1568 1 73 1569 1 73 1572 1 73 1573 1 73 1576 1 73 1581 1 73 1587 1 73 1593 1 73 1594 1 73 1597 1 73 1603 1 73 1604 1 73 1607 1 73 1608 1 73 1611 1 73 1612 1 73 1618 1 73 1619 1 73 1622 1 73 1623 1 73 1626 1 73 1627 1 73 1628 1 73 1631 1 73 1632 1 73 1637 1 73 1643 1 73 1649 1 73 1650 1 73 1653 1 73 1659 1 73 1660 1 73 1663 1 73 1664 1 73 1667 1 73 1668 1 73 1674 1 73 1675 1 73 1678 1 73 1679 1 73 1682 1 73 1683 1 73 1684 1 73 1687 1 73 1688 1 73 1689 1 73 1695 1 73 1696 1 73 1699 1 73 1700 1 73 1703 1 73 1704 1 73 1705 1 73 1708 1 73 1709 1 73 1710 1 73 1711 1 73 1714 1 73 1715 1 73 1716 1 74 32 1 74 60 1 74 81 1 74 96 1 74 106 1 74 112 1 74 117 1 74 119 1 74 144 1 74 165 1 74 180 1 74 190 1 74 196 1 74 201 1 74 203 1 74 221 1 74 236 1 74 246 1 74 252 1 74 257 1 74 259 1 74 271 1 74 281 1 74 287 1 74 292 1 74 294 1 74 301 1 74 307 1 74 312 1 74 314 1 74 317 1 74 322 1 74 324 1 74 326 1 74 328 1 74 330 1 74 354 1 74 375 1 74 390 1 74 400 1 74 406 1 74 411 1 74 413 1 74 431 1 74 446 1 74 456 1 74 462 1 74 467 1 74 469 1 74 481 1 74 491 1 74 497 1 74 502 1 74 504 1 74 511 1 74 517 1 74 522 1 74 524 1 74 527 1 74 532 1 74 534 1 74 536 1 74 538 1 74 540 1 74 557 1 74 572 1 74 582 1 74 588 1 74 593 1 74 595 1 74 607 1 74 617 1 74 623 1 74 628 1 74 630 1 74 637 1 74 643 1 74 648 1 74 650 1 74 653 1 74 658 1 74 660 1 74 662 1 74 664 1 74 666 1 74 677 1 74 687 1 74 693 1 74 698 1 74 700 1 74 707 1 74 713 1 74 718 1 74 720 1 74 723 1 74 728 1 74 730 1 74 732 1 74 734 1 74 736 1 74 742 1 74 748 1 74 753 1 74 755 1 74 758 1 74 763 1 74 765 1 74 767 1 74 769 1 74 771 1 74 773 1 74 778 1 74 780 1 74 782 1 74 784 1 74 786 1 74 787 1 74 789 1 74 791 1 74 792 1 74 816 1 74 837 1 74 852 1 74 862 1 74 868 1 74 873 1 74 875 1 74 893 1 74 908 1 74 918 1 74 924 1 74 929 1 74 931 1 74 943 1 74 953 1 74 959 1 74 964 1 74 966 1 74 973 1 74 979 1 74 984 1 74 986 1 74 989 1 74 994 1 74 996 1 74 998 1 74 1000 1 74 1002 1 74 1019 1 74 1034 1 74 1044 1 74 1050 1 74 1055 1 74 1057 1 74 1069 1 74 1079 1 74 1085 1 74 1090 1 74 1092 1 74 1099 1 74 1105 1 74 1110 1 74 1112 1 74 1115 1 74 1120 1 74 1122 1 74 1124 1 74 1126 1 74 1128 1 74 1139 1 74 1149 1 74 1155 1 74 1160 1 74 1162 1 74 1169 1 74 1175 1 74 1180 1 74 1182 1 74 1185 1 74 1190 1 74 1192 1 74 1194 1 74 1196 1 74 1198 1 74 1204 1 74 1210 1 74 1215 1 74 1217 1 74 1220 1 74 1225 1 74 1227 1 74 1229 1 74 1231 1 74 1233 1 74 1235 1 74 1240 1 74 1242 1 74 1244 1 74 1246 1 74 1248 1 74 1249 1 74 1251 1 74 1253 1 74 1254 1 74 1271 1 74 1286 1 74 1296 1 74 1302 1 74 1307 1 74 1309 1 74 1321 1 74 1331 1 74 1337 1 74 1342 1 74 1344 1 74 1351 1 74 1357 1 74 1362 1 74 1364 1 74 1367 1 74 1372 1 74 1374 1 74 1376 1 74 1378 1 74 1380 1 74 1391 1 74 1401 1 74 1407 1 74 1412 1 74 1414 1 74 1421 1 74 1427 1 74 1432 1 74 1434 1 74 1437 1 74 1442 1 74 1444 1 74 1446 1 74 1448 1 74 1450 1 74 1456 1 74 1462 1 74 1467 1 74 1469 1 74 1472 1 74 1477 1 74 1479 1 74 1481 1 74 1483 1 74 1485 1 74 1487 1 74 1492 1 74 1494 1 74 1496 1 74 1498 1 74 1500 1 74 1501 1 74 1503 1 74 1505 1 74 1506 1 74 1517 1 74 1527 1 74 1533 1 74 1538 1 74 1540 1 74 1547 1 74 1553 1 74 1558 1 74 1560 1 74 1563 1 74 1568 1 74 1570 1 74 1572 1 74 1574 1 74 1576 1 74 1582 1 74 1588 1 74 1593 1 74 1595 1 74 1598 1 74 1603 1 74 1605 1 74 1607 1 74 1609 1 74 1611 1 74 1613 1 74 1618 1 74 1620 1 74 1622 1 74 1624 1 74 1626 1 74 1627 1 74 1629 1 74 1631 1 74 1632 1 74 1638 1 74 1644 1 74 1649 1 74 1651 1 74 1654 1 74 1659 1 74 1661 1 74 1663 1 74 1665 1 74 1667 1 74 1669 1 74 1674 1 74 1676 1 74 1678 1 74 1680 1 74 1682 1 74 1683 1 74 1685 1 74 1687 1 74 1688 1 74 1690 1 74 1695 1 74 1697 1 74 1699 1 74 1701 1 74 1703 1 74 1704 1 74 1706 1 74 1708 1 74 1709 1 74 1710 1 74 1712 1 74 1714 1 74 1715 1 74 1716 1 75 33 1 75 61 1 75 82 1 75 97 1 75 107 1 75 113 1 75 118 1 75 119 1 75 145 1 75 166 1 75 181 1 75 191 1 75 197 1 75 202 1 75 203 1 75 222 1 75 237 1 75 247 1 75 253 1 75 258 1 75 259 1 75 272 1 75 282 1 75 288 1 75 293 1 75 294 1 75 302 1 75 308 1 75 313 1 75 314 1 75 318 1 75 323 1 75 324 1 75 327 1 75 328 1 75 330 1 75 355 1 75 376 1 75 391 1 75 401 1 75 407 1 75 412 1 75 413 1 75 432 1 75 447 1 75 457 1 75 463 1 75 468 1 75 469 1 75 482 1 75 492 1 75 498 1 75 503 1 75 504 1 75 512 1 75 518 1 75 523 1 75 524 1 75 528 1 75 533 1 75 534 1 75 537 1 75 538 1 75 540 1 75 558 1 75 573 1 75 583 1 75 589 1 75 594 1 75 595 1 75 608 1 75 618 1 75 624 1 75 629 1 75 630 1 75 638 1 75 644 1 75 649 1 75 650 1 75 654 1 75 659 1 75 660 1 75 663 1 75 664 1 75 666 1 75 678 1 75 688 1 75 694 1 75 699 1 75 700 1 75 708 1 75 714 1 75 719 1 75 720 1 75 724 1 75 729 1 75 730 1 75 733 1 75 734 1 75 736 1 75 743 1 75 749 1 75 754 1 75 755 1 75 759 1 75 764 1 75 765 1 75 768 1 75 769 1 75 771 1 75 774 1 75 779 1 75 780 1 75 783 1 75 784 1 75 786 1 75 788 1 75 789 1 75 791 1 75 792 1 75 817 1 75 838 1 75 853 1 75 863 1 75 869 1 75 874 1 75 875 1 75 894 1 75 909 1 75 919 1 75 925 1 75 930 1 75 931 1 75 944 1 75 954 1 75 960 1 75 965 1 75 966 1 75 974 1 75 980 1 75 985 1 75 986 1 75 990 1 75 995 1 75 996 1 75 999 1 75 1000 1 75 1002 1 75 1020 1 75 1035 1 75 1045 1 75 1051 1 75 1056 1 75 1057 1 75 1070 1 75 1080 1 75 1086 1 75 1091 1 75 1092 1 75 1100 1 75 1106 1 75 1111 1 75 1112 1 75 1116 1 75 1121 1 75 1122 1 75 1125 1 75 1126 1 75 1128 1 75 1140 1 75 1150 1 75 1156 1 75 1161 1 75 1162 1 75 1170 1 75 1176 1 75 1181 1 75 1182 1 75 1186 1 75 1191 1 75 1192 1 75 1195 1 75 1196 1 75 1198 1 75 1205 1 75 1211 1 75 1216 1 75 1217 1 75 1221 1 75 1226 1 75 1227 1 75 1230 1 75 1231 1 75 1233 1 75 1236 1 75 1241 1 75 1242 1 75 1245 1 75 1246 1 75 1248 1 75 1250 1 75 1251 1 75 1253 1 75 1254 1 75 1272 1 75 1287 1 75 1297 1 75 1303 1 75 1308 1 75 1309 1 75 1322 1 75 1332 1 75 1338 1 75 1343 1 75 1344 1 75 1352 1 75 1358 1 75 1363 1 75 1364 1 75 1368 1 75 1373 1 75 1374 1 75 1377 1 75 1378 1 75 1380 1 75 1392 1 75 1402 1 75 1408 1 75 1413 1 75 1414 1 75 1422 1 75 1428 1 75 1433 1 75 1434 1 75 1438 1 75 1443 1 75 1444 1 75 1447 1 75 1448 1 75 1450 1 75 1457 1 75 1463 1 75 1468 1 75 1469 1 75 1473 1 75 1478 1 75 1479 1 75 1482 1 75 1483 1 75 1485 1 75 1488 1 75 1493 1 75 1494 1 75 1497 1 75 1498 1 75 1500 1 75 1502 1 75 1503 1 75 1505 1 75 1506 1 75 1518 1 75 1528 1 75 1534 1 75 1539 1 75 1540 1 75 1548 1 75 1554 1 75 1559 1 75 1560 1 75 1564 1 75 1569 1 75 1570 1 75 1573 1 75 1574 1 75 1576 1 75 1583 1 75 1589 1 75 1594 1 75 1595 1 75 1599 1 75 1604 1 75 1605 1 75 1608 1 75 1609 1 75 1611 1 75 1614 1 75 1619 1 75 1620 1 75 1623 1 75 1624 1 75 1626 1 75 1628 1 75 1629 1 75 1631 1 75 1632 1 75 1639 1 75 1645 1 75 1650 1 75 1651 1 75 1655 1 75 1660 1 75 1661 1 75 1664 1 75 1665 1 75 1667 1 75 1670 1 75 1675 1 75 1676 1 75 1679 1 75 1680 1 75 1682 1 75 1684 1 75 1685 1 75 1687 1 75 1688 1 75 1691 1 75 1696 1 75 1697 1 75 1700 1 75 1701 1 75 1703 1 75 1705 1 75 1706 1 75 1708 1 75 1709 1 75 1711 1 75 1712 1 75 1714 1 75 1715 1 75 1716 1 76 34 1 76 62 1 76 83 1 76 98 1 76 108 1 76 114 1 76 117 1 76 120 1 76 146 1 76 167 1 76 182 1 76 192 1 76 198 1 76 201 1 76 204 1 76 223 1 76 238 1 76 248 1 76 254 1 76 257 1 76 260 1 76 273 1 76 283 1 76 289 1 76 292 1 76 295 1 76 303 1 76 309 1 76 312 1 76 315 1 76 319 1 76 322 1 76 325 1 76 326 1 76 329 1 76 330 1 76 356 1 76 377 1 76 392 1 76 402 1 76 408 1 76 411 1 76 414 1 76 433 1 76 448 1 76 458 1 76 464 1 76 467 1 76 470 1 76 483 1 76 493 1 76 499 1 76 502 1 76 505 1 76 513 1 76 519 1 76 522 1 76 525 1 76 529 1 76 532 1 76 535 1 76 536 1 76 539 1 76 540 1 76 559 1 76 574 1 76 584 1 76 590 1 76 593 1 76 596 1 76 609 1 76 619 1 76 625 1 76 628 1 76 631 1 76 639 1 76 645 1 76 648 1 76 651 1 76 655 1 76 658 1 76 661 1 76 662 1 76 665 1 76 666 1 76 679 1 76 689 1 76 695 1 76 698 1 76 701 1 76 709 1 76 715 1 76 718 1 76 721 1 76 725 1 76 728 1 76 731 1 76 732 1 76 735 1 76 736 1 76 744 1 76 750 1 76 753 1 76 756 1 76 760 1 76 763 1 76 766 1 76 767 1 76 770 1 76 771 1 76 775 1 76 778 1 76 781 1 76 782 1 76 785 1 76 786 1 76 787 1 76 790 1 76 791 1 76 792 1 76 818 1 76 839 1 76 854 1 76 864 1 76 870 1 76 873 1 76 876 1 76 895 1 76 910 1 76 920 1 76 926 1 76 929 1 76 932 1 76 945 1 76 955 1 76 961 1 76 964 1 76 967 1 76 975 1 76 981 1 76 984 1 76 987 1 76 991 1 76 994 1 76 997 1 76 998 1 76 1001 1 76 1002 1 76 1021 1 76 1036 1 76 1046 1 76 1052 1 76 1055 1 76 1058 1 76 1071 1 76 1081 1 76 1087 1 76 1090 1 76 1093 1 76 1101 1 76 1107 1 76 1110 1 76 1113 1 76 1117 1 76 1120 1 76 1123 1 76 1124 1 76 1127 1 76 1128 1 76 1141 1 76 1151 1 76 1157 1 76 1160 1 76 1163 1 76 1171 1 76 1177 1 76 1180 1 76 1183 1 76 1187 1 76 1190 1 76 1193 1 76 1194 1 76 1197 1 76 1198 1 76 1206 1 76 1212 1 76 1215 1 76 1218 1 76 1222 1 76 1225 1 76 1228 1 76 1229 1 76 1232 1 76 1233 1 76 1237 1 76 1240 1 76 1243 1 76 1244 1 76 1247 1 76 1248 1 76 1249 1 76 1252 1 76 1253 1 76 1254 1 76 1273 1 76 1288 1 76 1298 1 76 1304 1 76 1307 1 76 1310 1 76 1323 1 76 1333 1 76 1339 1 76 1342 1 76 1345 1 76 1353 1 76 1359 1 76 1362 1 76 1365 1 76 1369 1 76 1372 1 76 1375 1 76 1376 1 76 1379 1 76 1380 1 76 1393 1 76 1403 1 76 1409 1 76 1412 1 76 1415 1 76 1423 1 76 1429 1 76 1432 1 76 1435 1 76 1439 1 76 1442 1 76 1445 1 76 1446 1 76 1449 1 76 1450 1 76 1458 1 76 1464 1 76 1467 1 76 1470 1 76 1474 1 76 1477 1 76 1480 1 76 1481 1 76 1484 1 76 1485 1 76 1489 1 76 1492 1 76 1495 1 76 1496 1 76 1499 1 76 1500 1 76 1501 1 76 1504 1 76 1505 1 76 1506 1 76 1519 1 76 1529 1 76 1535 1 76 1538 1 76 1541 1 76 1549 1 76 1555 1 76 1558 1 76 1561 1 76 1565 1 76 1568 1 76 1571 1 76 1572 1 76 1575 1 76 1576 1 76 1584 1 76 1590 1 76 1593 1 76 1596 1 76 1600 1 76 1603 1 76 1606 1 76 1607 1 76 1610 1 76 1611 1 76 1615 1 76 1618 1 76 1621 1 76 1622 1 76 1625 1 76 1626 1 76 1627 1 76 1630 1 76 1631 1 76 1632 1 76 1640 1 76 1646 1 76 1649 1 76 1652 1 76 1656 1 76 1659 1 76 1662 1 76 1663 1 76 1666 1 76 1667 1 76 1671 1 76 1674 1 76 1677 1 76 1678 1 76 1681 1 76 1682 1 76 1683 1 76 1686 1 76 1687 1 76 1688 1 76 1692 1 76 1695 1 76 1698 1 76 1699 1 76 1702 1 76 1703 1 76 1704 1 76 1707 1 76 1708 1 76 1709 1 76 1710 1 76 1713 1 76 1714 1 76 1715 1 76 1716 1 77 35 1 77 63 1 77 84 1 77 99 1 77 109 1 77 115 1 77 118 1 77 120 1 77 147 1 77 168 1 77 183 1 77 193 1 77 199 1 77 202 1 77 204 1 77 224 1 77 239 1 77 249 1 77 255 1 77 258 1 77 260 1 77 274 1 77 284 1 77 290 1 77 293 1 77 295 1 77 304 1 77 310 1 77 313 1 77 315 1 77 320 1 77 323 1 77 325 1 77 327 1 77 329 1 77 330 1 77 357 1 77 378 1 77 393 1 77 403 1 77 409 1 77 412 1 77 414 1 77 434 1 77 449 1 77 459 1 77 465 1 77 468 1 77 470 1 77 484 1 77 494 1 77 500 1 77 503 1 77 505 1 77 514 1 77 520 1 77 523 1 77 525 1 77 530 1 77 533 1 77 535 1 77 537 1 77 539 1 77 540 1 77 560 1 77 575 1 77 585 1 77 591 1 77 594 1 77 596 1 77 610 1 77 620 1 77 626 1 77 629 1 77 631 1 77 640 1 77 646 1 77 649 1 77 651 1 77 656 1 77 659 1 77 661 1 77 663 1 77 665 1 77 666 1 77 680 1 77 690 1 77 696 1 77 699 1 77 701 1 77 710 1 77 716 1 77 719 1 77 721 1 77 726 1 77 729 1 77 731 1 77 733 1 77 735 1 77 736 1 77 745 1 77 751 1 77 754 1 77 756 1 77 761 1 77 764 1 77 766 1 77 768 1 77 770 1 77 771 1 77 776 1 77 779 1 77 781 1 77 783 1 77 785 1 77 786 1 77 788 1 77 790 1 77 791 1 77 792 1 77 819 1 77 840 1 77 855 1 77 865 1 77 871 1 77 874 1 77 876 1 77 896 1 77 911 1 77 921 1 77 927 1 77 930 1 77 932 1 77 946 1 77 956 1 77 962 1 77 965 1 77 967 1 77 976 1 77 982 1 77 985 1 77 987 1 77 992 1 77 995 1 77 997 1 77 999 1 77 1001 1 77 1002 1 77 1022 1 77 1037 1 77 1047 1 77 1053 1 77 1056 1 77 1058 1 77 1072 1 77 1082 1 77 1088 1 77 1091 1 77 1093 1 77 1102 1 77 1108 1 77 1111 1 77 1113 1 77 1118 1 77 1121 1 77 1123 1 77 1125 1 77 1127 1 77 1128 1 77 1142 1 77 1152 1 77 1158 1 77 1161 1 77 1163 1 77 1172 1 77 1178 1 77 1181 1 77 1183 1 77 1188 1 77 1191 1 77 1193 1 77 1195 1 77 1197 1 77 1198 1 77 1207 1 77 1213 1 77 1216 1 77 1218 1 77 1223 1 77 1226 1 77 1228 1 77 1230 1 77 1232 1 77 1233 1 77 1238 1 77 1241 1 77 1243 1 77 1245 1 77 1247 1 77 1248 1 77 1250 1 77 1252 1 77 1253 1 77 1254 1 77 1274 1 77 1289 1 77 1299 1 77 1305 1 77 1308 1 77 1310 1 77 1324 1 77 1334 1 77 1340 1 77 1343 1 77 1345 1 77 1354 1 77 1360 1 77 1363 1 77 1365 1 77 1370 1 77 1373 1 77 1375 1 77 1377 1 77 1379 1 77 1380 1 77 1394 1 77 1404 1 77 1410 1 77 1413 1 77 1415 1 77 1424 1 77 1430 1 77 1433 1 77 1435 1 77 1440 1 77 1443 1 77 1445 1 77 1447 1 77 1449 1 77 1450 1 77 1459 1 77 1465 1 77 1468 1 77 1470 1 77 1475 1 77 1478 1 77 1480 1 77 1482 1 77 1484 1 77 1485 1 77 1490 1 77 1493 1 77 1495 1 77 1497 1 77 1499 1 77 1500 1 77 1502 1 77 1504 1 77 1505 1 77 1506 1 77 1520 1 77 1530 1 77 1536 1 77 1539 1 77 1541 1 77 1550 1 77 1556 1 77 1559 1 77 1561 1 77 1566 1 77 1569 1 77 1571 1 77 1573 1 77 1575 1 77 1576 1 77 1585 1 77 1591 1 77 1594 1 77 1596 1 77 1601 1 77 1604 1 77 1606 1 77 1608 1 77 1610 1 77 1611 1 77 1616 1 77 1619 1 77 1621 1 77 1623 1 77 1625 1 77 1626 1 77 1628 1 77 1630 1 77 1631 1 77 1632 1 77 1641 1 77 1647 1 77 1650 1 77 1652 1 77 1657 1 77 1660 1 77 1662 1 77 1664 1 77 1666 1 77 1667 1 77 1672 1 77 1675 1 77 1677 1 77 1679 1 77 1681 1 77 1682 1 77 1684 1 77 1686 1 77 1687 1 77 1688 1 77 1693 1 77 1696 1 77 1698 1 77 1700 1 77 1702 1 77 1703 1 77 1705 1 77 1707 1 77 1708 1 77 1709 1 77 1711 1 77 1713 1 77 1714 1 77 1715 1 77 1716 1 78 36 1 78 64 1 78 85 1 78 100 1 78 110 1 78 116 1 78 119 1 78 120 1 78 148 1 78 169 1 78 184 1 78 194 1 78 200 1 78 203 1 78 204 1 78 225 1 78 240 1 78 250 1 78 256 1 78 259 1 78 260 1 78 275 1 78 285 1 78 291 1 78 294 1 78 295 1 78 305 1 78 311 1 78 314 1 78 315 1 78 321 1 78 324 1 78 325 1 78 328 1 78 329 1 78 330 1 78 358 1 78 379 1 78 394 1 78 404 1 78 410 1 78 413 1 78 414 1 78 435 1 78 450 1 78 460 1 78 466 1 78 469 1 78 470 1 78 485 1 78 495 1 78 501 1 78 504 1 78 505 1 78 515 1 78 521 1 78 524 1 78 525 1 78 531 1 78 534 1 78 535 1 78 538 1 78 539 1 78 540 1 78 561 1 78 576 1 78 586 1 78 592 1 78 595 1 78 596 1 78 611 1 78 621 1 78 627 1 78 630 1 78 631 1 78 641 1 78 647 1 78 650 1 78 651 1 78 657 1 78 660 1 78 661 1 78 664 1 78 665 1 78 666 1 78 681 1 78 691 1 78 697 1 78 700 1 78 701 1 78 711 1 78 717 1 78 720 1 78 721 1 78 727 1 78 730 1 78 731 1 78 734 1 78 735 1 78 736 1 78 746 1 78 752 1 78 755 1 78 756 1 78 762 1 78 765 1 78 766 1 78 769 1 78 770 1 78 771 1 78 777 1 78 780 1 78 781 1 78 784 1 78 785 1 78 786 1 78 789 1 78 790 1 78 791 1 78 792 1 78 820 1 78 841 1 78 856 1 78 866 1 78 872 1 78 875 1 78 876 1 78 897 1 78 912 1 78 922 1 78 928 1 78 931 1 78 932 1 78 947 1 78 957 1 78 963 1 78 966 1 78 967 1 78 977 1 78 983 1 78 986 1 78 987 1 78 993 1 78 996 1 78 997 1 78 1000 1 78 1001 1 78 1002 1 78 1023 1 78 1038 1 78 1048 1 78 1054 1 78 1057 1 78 1058 1 78 1073 1 78 1083 1 78 1089 1 78 1092 1 78 1093 1 78 1103 1 78 1109 1 78 1112 1 78 1113 1 78 1119 1 78 1122 1 78 1123 1 78 1126 1 78 1127 1 78 1128 1 78 1143 1 78 1153 1 78 1159 1 78 1162 1 78 1163 1 78 1173 1 78 1179 1 78 1182 1 78 1183 1 78 1189 1 78 1192 1 78 1193 1 78 1196 1 78 1197 1 78 1198 1 78 1208 1 78 1214 1 78 1217 1 78 1218 1 78 1224 1 78 1227 1 78 1228 1 78 1231 1 78 1232 1 78 1233 1 78 1239 1 78 1242 1 78 1243 1 78 1246 1 78 1247 1 78 1248 1 78 1251 1 78 1252 1 78 1253 1 78 1254 1 78 1275 1 78 1290 1 78 1300 1 78 1306 1 78 1309 1 78 1310 1 78 1325 1 78 1335 1 78 1341 1 78 1344 1 78 1345 1 78 1355 1 78 1361 1 78 1364 1 78 1365 1 78 1371 1 78 1374 1 78 1375 1 78 1378 1 78 1379 1 78 1380 1 78 1395 1 78 1405 1 78 1411 1 78 1414 1 78 1415 1 78 1425 1 78 1431 1 78 1434 1 78 1435 1 78 1441 1 78 1444 1 78 1445 1 78 1448 1 78 1449 1 78 1450 1 78 1460 1 78 1466 1 78 1469 1 78 1470 1 78 1476 1 78 1479 1 78 1480 1 78 1483 1 78 1484 1 78 1485 1 78 1491 1 78 1494 1 78 1495 1 78 1498 1 78 1499 1 78 1500 1 78 1503 1 78 1504 1 78 1505 1 78 1506 1 78 1521 1 78 1531 1 78 1537 1 78 1540 1 78 1541 1 78 1551 1 78 1557 1 78 1560 1 78 1561 1 78 1567 1 78 1570 1 78 1571 1 78 1574 1 78 1575 1 78 1576 1 78 1586 1 78 1592 1 78 1595 1 78 1596 1 78 1602 1 78 1605 1 78 1606 1 78 1609 1 78 1610 1 78 1611 1 78 1617 1 78 1620 1 78 1621 1 78 1624 1 78 1625 1 78 1626 1 78 1629 1 78 1630 1 78 1631 1 78 1632 1 78 1642 1 78 1648 1 78 1651 1 78 1652 1 78 1658 1 78 1661 1 78 1662 1 78 1665 1 78 1666 1 78 1667 1 78 1673 1 78 1676 1 78 1677 1 78 1680 1 78 1681 1 78 1682 1 78 1685 1 78 1686 1 78 1687 1 78 1688 1 78 1694 1 78 1697 1 78 1698 1 78 1701 1 78 1702 1 78 1703 1 78 1706 1 78 1707 1 78 1708 1 78 1709 1 78 1712 1 78 1713 1 78 1714 1 78 1715 1 78 1716 1 0 0 0 linbox-1.6.3/benchmarks/matrix/bibd_13_6_78x1716.sms.gz000066400000000000000000001754231347646240000222770ustar00rootroot00000000000000.Rbibd_13_6_78x1716.smsLٱ:lAgߝ#gEEًE V~z|}}`}b}.?.?.?.r>.r4܏\~\~\~\%%>.qɏK~\ǥ>.qK}\R6\Rǥ?.qK\ҒK\2e>.q|\FBI#{$yD=GH$#2Œ4#Β%^?P/IX/`/Ih/:(I{I$|Iėd|Iȗ|IEsO$K$KҾ$K$K@$KR$Kr$K$K$+9[OKK:KZKzJ K KڰKK9OZKzKKKڱTcK?cK?cK?cK?c/h~lǖ~lǖ~lǖ~l{|ǙϡϩϱϹ/ҏ-؇+D[[[[r'cK?cK?cK?cK?cI?cK?cK?cK?cK?vrkcK?cK?cK?cK?cװI?cK?cK?cK?cK?vscK?cK?cK?cK?c@ 8ҏ#8ҏ#8ҏ#8ҏ#8 !~ҏ#8ҏ#8ҏ#8ҏ#8ҏ#8ҏ#8ҏ#8ҏ#8ҏ2zcoooooooooooooooooooooooooooooT>.r>.r>.r>.r?.r"qqqK|\~\%?.qɏK~\ڟK~\ǥ>.qK}\JqK}\ǥ?.qKKZ>.q|\2e>.q R'{$w=GHI#{b,~2(#3Ҍ8K FI#<"H$")<#<sndl t| 葄@]OBz$Gbz$Gz$Gz$Gz?II)Z$G{$G{$G{$G|$§9!OR|$Gr|$G|$G|$G|#3GJJJJ.1<_<_<_<_<ͩ(~:S꘾:꫓꨾ҏ{8fOqWqWq9999}n'7G7g7J?J?I?J?J?J?J?nrJ?J?J?J?WI?J?J?J?J?nsJ?J?J?J?)SGH?Bҏ~#!G,g~#!GH?Bҏ~?GH?Bҏ~#!GI?Bҏ~#y1y1y1y1y1y1y1y1y1000000000000000000000000000ޑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rY,Gn#7ˑrf9rA#x D.q =%>.qK|\%?.FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^rB9WPU(*sʹ \rB9WPU(*sʹ \rB9WPU(*sʹ \rB9WPU(*sʹ \rB9WPU(*sʹ \rB9WPU(*sʹ \rB9WPU(*sʹ \a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0 u冺rC]PWn+7ԕ u冺rC]PWn+7ԕ u冺rC]PWn+7ԕ u冺rC]PWn+7ԕ u冺rC]PWn+7ԕ u冺rC]PWn+7ԕ u冺rC]PWn+7FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0FˆW #^a+x0kPM75|SM75|SM75|SM75|SM75|SM75|SM75|SM;77z.n^~t}ZOKi>-ݧtοW:J_+tοW:J_+tοW:J__1^`|9s9R)ƇC!b|H1f|B6 mڌ/_h3f|B6 mڌ/_h3f|B6 mb)b)b)bK҅t!/]K҅t!/]K҅t!/]K҅t!/]K҅t!/]KB!B!B!B!B!B!B!B!B!B!BPrK(%Jn %[B-PrK(%Jn %[B-PrK(%Jn %[B-PrK(%Jn %[B-PrK(%CH1CH1CH1C^. yB^. yB^. yB^. yB^. yB^R !R !R !R !R !R !R !R !R !R !R BP`. BP`. BP`. BP`. BP`. BP`. BP`. BP`. BP`.CH1CH1CH1CH1CH1CH1CH1CH1CH1CH1C^,5 yB^,5 yB^,5 yB^,5 yB^,5 yB^,5 yB^,5 yB^,5 yB^,5 !R !R !R !R !R !R !R !R !R !R !R !R !R !R !R !R !R !?!\!tS7%|SHKr_ܗ$%/}I+='/}IKr_ܗy_:+AQ'9(AdG)/8_p8p~!wb}X,/K,܉aB 2/d\VeX˰>a}.\콇Êab J/ ^@(PzB %b 4"ƥq)b\"%X%aoX@c 4@c 4@c){=Wʞ+eϕJsR\){=W%aoX%a 4@c 4@c 4"n)["n)["n 4@c 4@c 4%`X%`X%` 4@c 4@c 4@c 4@c 4@cedJ/^&+LVz2Yed%b 4"ƥq)b\"%X%aoX@c 4@c 4@c){=Wʞ+eϕJsR\){=W%aoX%a 4@c 4@c 4"n)["n)["n 4@c 4@c 4%`X%`X%` 4@c 4@c 4@c 4@c 4@c)_J/%—KDR"|)_%aoX%a 4@c 4@c 4"n)["n)["n 4@c 4@c 4%`X%`X%` 4@c 4@c 4@c 4@c 4@c)KVR+eJYj,RZ)KV%X%X%`X%`X%`X%X%X%X%X%X̖"l)2[̖"l)2[̖"%X%X%X%X%X%`X%`X%`X%X%X%X%X%vڷҾ}77s@cHH8_|b4d/<_yGőGqQh'JF(}d8 G<#8zdQ8zaQ(pi80@(< 3#8(<#4@4ޯ_;zvyGqi84e<#8 3̣04<#ȣ8#8w?:?/9?\o2?O.?,?=w"?|_>~7>ru?|_$~÷>&?|_}÷|>އ>|_}7v>U݇>|?_}t7s>ۇ>|C_}d÷i>Fه>|o_}÷d>؇>|7ჱ_}÷_>ׇϻ>|_p}t÷Z>ևϴ>|ì_b}÷W>ՇϬ>|__V}÷T>ՇϨ>|?_P}t#4zm??| \G }X:%"1,(,L,e}d^^E/| 1H༜Sqq`_"y#~H=X  ,#@zu7@z @z 6%8m 88?t 1_?![ `wD=/%hӴa/Kl7} ݉u}^$GJ"^${lA._״a OV>9ޓ-HndO9YDAIΖDS-HNDeI6%ѝ4@w%K IM(QJΨd+ ٦M|+6ظbê,Nb+͗[YleV[YhS6[z5Q(Q*.bO *bOPbO,TJ8 ,UvWwS!PhnZ (TX[eP/y 5]B*Pn*TS T(B-P"'7 eKTBEuE9E^TYYEq^YEE%EEME^XXXTXXEEEYE^TXXԶXE5Ev Wp ׬pQ Wpy דp! WpׄpWpypaWtp)ppWmpkpWfp \pWYpYQpWNpJpWIpyGpAW@p,Awy>,ay$8~ $r\QpYb1/KwYω:A/"yL,e.{9%.bs^JX} "ϗG Ɨs"<+`9X`u7` 7؂@z?KЋM v'8AGMLp|/؋@ԃ^mz pg_ v7z7~ 8J8u+> j%nKml|y'ߙgNiΝitFltǙ34tpAtpAtpJ8:8ࠃ:8ࠃ} tpAtpAࠃ:8ࠃ:8ࠃ:8ࠃ:8ࠃ:8k ࠃ:8ࠃ:8o<8:8ࠃ:8ࠃSL:8ࠃ:8ࠃNo~_}~ >5`*YjYYYu+> j%nKm{|=_iO}=_kn{|=_o{|=_sY1Z0wYϗ|Yϗ|Yϗ|YZϗ|Yϗ|Yϗ|Yϗ|YϗB(C8DHEEA~|P?>ԏwu}+W/+~W*~!~!~!~!~)~)~)~)~)~ZX?~n ,`X?~`X?~`SlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQ%^lbf/6{ً^lbf/6{ً^lb^MبF6ʰц:laبF'`X?~`X?~`X?~`>Xkc |5>Xkc |5>Xkc |5>Xkc |5>Xkc |5>Xkc |5>Xkc |5𱆱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~뇱~rbߍwRkw.wrw. }ǯZ^Z^Z^Z^Z #=Fz_rH#=Fy1c(QW|\IvQ%j-[2+>%>%>)++++kkkkk`^Vbnr 0`0 -pN8' g}_,bH(II(JJ bC  gbf/6YjlVcf5WQF7ҸǍRFrQGrQHrQI%4֨L24*ӨL3V#4\ o߀&_oś|&_oś|&_oo\ q7.7 o$4 0ML$4 0ML$4 o|oW7^+x|o߀7 oߚߚߚߚߚߚߚߚߚo{o6o6ovc\q=]cz1Ǹɓ#=FzS-=Fy1ch1c!>/[ڕڕ>j?z4y>>_mYޝ9yYnw#mMfX:$vcV%DA4m^8) ( i1jQF%jNfFh@9W^^^^^^^rsܜ!7gW>yC>^?x?Hk!fHk?>??UK3Z=c+&L)gx1~r;_swnnƗ6̧kK8iS*TR-Іu[,bKYO^)`6+M՗ ³͊}ba62IK0D6H0_39fy7˻6m ^%P*aE\/û!`?w&&܆A9k҇22 >װÂ% +?l {1uY7-1b?jݱWMYe.nRI;v=__*%|KdͥͥͥMHߔy} z%mW2/Cq#mHlĥo|Ou@UOB zG! S`S22/muZHB{$OG\mwm|=Ͼzb7;w{^}}m.\q^zFۅyW{W?8?dcX?!5k9Xc.`F`BJ2~le_/1Z hQk7/ŧl%gd0RZJ~oO;7-2{`>{UfW|POĶGUG͢ƋYq$} ނ1+XVK Y/%SwD~HdyJk` H0^,r`6&׻5~[" ~o~뾖`6m|ek=@Sح:[uanՃݪUu.Vխz[uVnOݪUuVӭz[Ln)ݪOq! 66@DB ^^,l `gEz z_?;%s C0~p0ozmo =2}>8 T2>88z%S,F7nq,f7 .(թ q!PG .?s ` ` @ MYMM]MMMM=MMAMMMMEMMMmMmMMMMMMM)M)MMMMQMMUM MMMYMMMMMMMMMaM=M=MMMMMMMMMEMMMMMmMmMIMIMIMMMqMqM)MMMMMMMuMuMQMQMQM-}lKq>+ W³cv" r;/7~hV |<鿖Q~rrvv;>O{\?2Rwaqs?6R}\aqN yu; .^J?}wzywzywz0X1 8w=Vz@dydWw'?}qϱ8qϱ886 dcp?6 cpl~c86 ~u{Wwu{Wwu{Wwu{W_Ybi1x-1[ns-~[mDtqw*A.Or||0pppppp8<p8 s9pN/! s\p.8 spn87 sùpn8y"  EA/zQы(fQ̢E3f,Y4hf̢E3f,Y4hf5Y6i7y8͉9JcnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnvL)n\Nzfm6Y;=Fz1c(Qp:09F:uv19<Ǩ1c{1c{1x18x18x1Ǹz1Ǹz1Ǹ#g,ße 2Z@ h-àe 2ZB`h -áe< Q|PۻۻۻۻUwnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ9 9m"!X sX89,a} tXHU:,a uXR.6g;YnÆov|{ͦov}yyyyge/Rj1U˪^\ ً^\{܋^d"is9p.q֧nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnX?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?X?(ZZZZZZZZZZ]Z]Z]Z]Z]Z1Xcy1Xcy1c{1c{1x1|n,ceBa2Y"Hd,ce0F2Y$ˈd,aWWC)/}KҫnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ[u{sĆ8e +1q'A8y O䉃:|v@#4@#4{E^4{1ưj 1ǍB1ưñ=Jnnnnnnnnnnnnnnnnnnnnnnn nF?is?is?is?is?is?is?is?is?iğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiğFiG{{{{įZ{Z{Z{Z{Z{Z{Z{F!0d,e$ E2YF#pd,eD I0Wwu{T0[mnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ[u{nݪۻUwnVޭ[u{Λ]_ w}//  _@"HF)Qd"HF)Qd"HF)Qd"HF)Q _@/w»^x z]/w»^x z _@/  _@+(XĂBM 6%ؔ`SM 66778hGː ː ːN/;N/;N/;N/2/C2/C2/C2/C2/C2/C2/C2Ǹz1c#yC>?x?!fHk!fH??|??^^^Hx!Q,Y4J(QD5H`͡nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnr<(*_{3N'匓r>O  #Uc.L,WY+Smyvm;nwq;Ďt11~~111)---Nv^g|c?c?-|M/MM:?ߏc?ߏzwz 26X`,e!2FQk=k=7Xb]>O  n߾n^:Gu{={TnQޣGu{={TnQޣGu{={Tn? 1G,x@MC 3" ā1 qwqј8_aQe,eY.rY˲\,W%~w"?by4@r.+/A mE@.z^?,g0hO^@\3+旧B[?Gbס^cDwgu{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{u{g;PQ\#s[Yvo6vqqq;lWL~Tb7AKQnqvί ]?)r'R1cƯ=:1cxNozWOo\g%||E/ԯ] |Q/ʗ(N_o\" 6kA\|"Y ā:/IJ7Y{ ڰ„/Ʊ,e,N:7|Ueۗסׅe?1:#_y $O 4fU/ܽ^"f9f.R6KІuoٗ@EQ`|>xÙ-_^^l/v~{PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP,|ձÇ?|/ۏܷ͏W~G{nnOzْ}Drnuvv#'_|=FG]x1=cxNztt_)^rr򓖹ۍ:xFH$k*M1TiJ(=ݿcxwz}_}Z  G5`,Ãe| 2D/<k6/̥=_Q$'/|^~_޿'({TnQޣGu{={TnQޣGu{={TnQޣGu{y DBffm Ał,XÜb\o}]|* `X; es_Bm.!rY}t?::A˟.#0R\ Kw]߽sG[/C첼A=oVK0h,oG:I/Qp4pf %R|^^hn;<OCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC޳6 +/RLSa}16~ۍI*S8ۍgA?,eY.rY&`}%^<G9/(%hI F0{/^My9!?8G9,o  h`}~p p p0{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ c8|”or;pxWp(?pl c7A/v;z4n86^c 91czNooox/B|5//3yΗ4K1i cplN_ﴯr}86^}׻~c86^}=,` ,#eH9~c8Rbݿr?6 clpnnnn_ 6āh gD|G Oxx'<|'<< OxxOxp8s9ЏgC)~|N?>ԏg9~|d?>ڏOs~|t?c\#7Fs#|nύ>7Fs#|nύ>7Fs#|nύaT2VY+he,eX!2fY-˨e,eಌ\2vY/e,e`!2Y1(f,e d~\=?R7rtv1c~bǎqÀaxp VpN8' s9pN88ˊ\\\\\\'<< Oxx s\pF4= A\#"+""+""+""+""+""+""+""+""+""+""Bxh>&'Y||Z>>.1c(Q<﫧7Fs#C=ύ>7F܈1cǘ]x1 fba2Y2Hf,a_-J~['elĊH IT!*$Q$D+""+""+""EqѸ8 <7&W > > > > #xO371p8#yX @HI $A$ @HI $AĊHĊHĊHĊHĊHĊHĊHϚCy|||%–[)ɦ$lJ)ɦ3Zhe$4 ,TPͅРq!+ćććiLN_7.t4ii%<% Oi+"mE"VDiiii+"mE"VDڊH[i+"mE"VDڊc1c<rwpywpywpy1XcyŠH[i+"mE?O{^?O{^?O{^?O{VDڊH[i+"mE"VDڊH[i+"mEG]q= eÌcq 4wxwx}/_˷u|/_K"VDڊH[i+"mE"VDڊH[i+"O>?O>?O>?O>?O>?mE"VDڊH[i+"mE"VDڊH[i+"mE"oS5~=T2|9/3/L0:9'ztG Q6#fDٌ( ʁr(( ʁr(( ʁQ6#fDٌ(e3lF͈Q6#(k24X4ޅ.wxbP,#eH)A2X˸bX,#eh-2 PP@A9PP6#fDٌ(e3lF͈Q6#fK$-%i)QBo?rZQC[~ &јri|劽Ѥ 5)HM RԘM44&Иј6C͸ BP %&y% BP `^:&/A/ua^yua^z\Rtݤ&јM RԤ 5)HDHCih" јј++++++DHCih" јјMQC59DMQCԘјBWh M\+4fDcF4fDcF4fDcF#؝D2酈 ΐfŚkVYfEhYfEh&HCih" H>H>H>H~ ~5` foHG/1lI}82͈6#fKO'.Y ǿmF (C;Ў2͈6#fD;g3j s9Cm3mF͈ю(# B;Ў(# m3mF͈6#f\}" fD;yGO)e< (V־D}6T,eX+2hm3mF͈vQ;G#jm3mF͈6#QvehGfDیhm3^~==zb4Bv̈O)LCb0# `F YICVҐ4Ca9 !̈ς5hZ#AMKGK0:0/rhxSC ̈uuu!1CVҐ4d% frBCa0#3b0#ׅׅׅ `F YICVҐ4Ca9 !̈777 9 !!01CҐ4 f`F frBCa0#3b0#=a 5+H^_^_^_R _,BeF YICVҐD?j̫m"5:>dzL]SmF(cc3b4NG#͈qaof،/v>b،#ӑHc3bo16#f# f807 c3blF͈q8hz46#f،qalF͈R<:oD3b+ ،#ӑHc3bo16#fKڵ)xxxqvOp Ǻ 3bo16#f8hz4N=c3blF x806#f،3sxCt17 x،c3~~*}xz^#~'KИE%x0V#Yόx ,ڠ$zڄ:| A/4 BmНόx 8#c 8V_%bwK3#^ /!|fKO9WhYfEhr3U`P&̫f:}q<dyShbQ۔1+svkO'#|'i}ە۵}UE>=si8~|/a(}5U Qǔ./QA|\yQA?r_nߺ+}mm<uMJJ ܟvրsր1(3߻R>cHH:֊<֏<֔b/p . >*M^ϗnce^ό((Q3'r>sdF| }x+n 3|6E0k^{e@(!2X˨bV,e`!3"eD˝)3ԯ/Oj"3⣶0e.חJa*2#>\,Ci5~Q ~Ob ށG>\A傸4{}%O S76m6C`Ӭ ,:^#bA8hLuX-G|* `XlDӋyua^_ ] B\J?ąH=Ɨt)BX3Xz%S"KІ= KF| =s"Hߗ/^j$ ^K/Bmmm6mo=paF,0ѝ/pF%J DdF,e.^Nz_%ZBAkV/q)Gp4ӬF"4,B3/鏈 Awf:tY4'3b)sR%ԫ/)xc}1#^n }~̈EG)?ǧcVfKy(kkkK[z)ŏgo0U܃cL1r}kv_̈E ׫/*饼۫:R^ݾu\뷽~u VG)x%reΖ:^r/3ΰk Gu.fK5xgNuxA1 9֏ͭGuFe3bٌX퇏=+İv;xx+^ >}qz xWX3b(MW<3Q7XfK (!2X˨bV,e`e: ny 3bٌX >\,%~@}-/,-9,f"R,W2#[OG+~KbU-Z|OwC#" 4N?{Ӧi3 m !3bؘ3b˭euH} ,hI0/y2R^Eua^yqR^@\2#6A*H_*H߭/ Bؘ[OşcFliڴ虃Eo3bcFl>gN.z%hiH'7A Bl̈K™OHA1#R^^_h$^"2#6f֗[ YF61+֬O"4,Bܛ~)L/Awf̫N3N!󐳥F ݥB!K1IbfK_;1m3⏺n }ubfv bی6#(/UG |>q}?h+1m3bیx)X ͈MG)Xh0fĶI`(]{AlfĶG)^lyuo/eηm3|SØ1m3bیx)ZČx)+mFǽ`Ō6#^cǰ ^zAl1m3bیx)~r_^>_1#zu”ϗt9,uqWыS`-8%{pYgZnkqu<c\q=c\q=c#7Fs#.b{1|҄OI>i'M 4&|҄OI>i TVssssssss8 Ka3,}ϰ>gX Ka3,}ϰI>i'MI4&}ҤOI>i'MV9o~C_Wf?6gCDB`OC̈Ħ1oFߌ}3B,>p>p||hshsW3bF\̈ /_F~ztﴷ{n_EK K K K K K KKKKKKKKKKKKKKK?pN8' s9͹\p.87[BDBDCsRWH]!uRWQ_Q_Q_Q_Q_QO>4Ӭ̈xx}}}}}}Xa1sXa1Č6#͈k3ڌ6#={lؿOG9~18x N;>1#͈k3ڌ6#͈k3ڌ6#͈?*=Fz1c(Q=,ϲ,W6gkO=F{cq<cq<c1c1 t]BKt]y^꘺R3iA!0  8s"j0`^BRQ"Ge@1/+ 3e"E BfD`FfD`FfDgMI8'i sy<,3"0#3"0#3"0#3"0#3"0#R!H T(QDJT(Q8Ȍ}% !ħyfOlYf1Ŕ΍Af%DA47O±pl![fD،a3"lFQc\q=c\q=ca3"lF͈#HA8R#HA8R#a3"lF͈6#fD،a3"lFQ1ch=x116G+pl![±6#fD،>ce§@ KC4FMoz7B3,ӧ@#ҧ̈6#fe6YF;pg [7⦒RQN7$) B$fbAP"1#$)AJr3"4$$ҐD3"1#3"1#AM&& 4aL |)y:ym" B$fD %9HIRbF$$ҐDHCbF$fDbF$f?"iIڤr:2$)AJrb}P}P}P}P)m6myMfh3 B'KӒHCiH" IQD$%IDIQDBWH I\!+$fDbF$fDbF$fDbF#PB %C/ DbF>@Obv_q5'3"4$$ҐD3"1#3"1#,˰,òv{3"zN=JSfD:ʐ2 (CڌHi3"mFۅۅۅۡ96#Qt!eHGfDڌHi3"4NJ' IC餡6#fDڌHGtD!QHG6#fDڌHi3Eo ̈tQ:(zN=J(C:ʐ2 i3"mF͈w-l~_~r,Vڔрx]θ0B*SmLMX߮.]nW,tD!mF͈6#fDڌx)~(R <8B2 (CڌHi3"mFIC餡tP:i(46#fDڌHB:(# B:6#fDڌHi3"mFQ>'CzYge_2^gyz陧g>3O<=3=4aF͈2 (C:ʐ6#fDڌH/n-QJb*E!Jf_7.wQ0AŒ(>Z|xHa*QPPP! 3J*Œ(BEȡ9fDaFf6 y"/A蕯"BfDBBB(̈"+J* 39!"PQ4 QPP@O݋6EMӦinmBh$"/Œ(BEȡɌ(̈Œ(^8(^8(^8(̈"PCaFfDaF9HERTQEȡ9!Œ(̈Œ#x<|2#l*^.R DaF+++AŒ("+0#Cr(BQGІetr lFQ(P~G(tr:R9lF xC9P6#fDٌx)C/yٺ(tr:R9lF xC9P6#fDٌ(]P~vAٌ(rlF͈QN=*SfDٌ(xC9P7͈Q6#^gA lFQ(P~G(tr:R9lF xC9P6#fDٌx_6\= xCٌ(e3vAe3o(Q6#fD9zTN=*e3lF xC9P6#fDٌ3T6#ro(e3lF.(]P~lF xC9P6#fDٌ(SʩGe3lF͈ro(fDٌ(/3g3O`zӧmK[M<=yz/=eFB(e3lF xC9P6#fDٌ((͈Q6#1_݈+ԭw ZIL(Dˌ+& B4f?iѤ05Aƌh^rn^rnR DcF42424Aƌh<ƌhbM1#3zà;LPAƌh>|yIajѼܼܤ05Aƌh^eh^eh)5yJCcF4fğxhR(^ C+ 0Ѽм@?iӴi4: 14g5z0_ḧUU&јMRԘM졉=4fDcF4+7Aƌh<ƌhbM1#3y1#C{ḧƌh31# DcF4O7/@4)L~4V6٬a* B4fD*C*Cḧ&OSj̈&31#=o?1~Zs;h7o0cm3NQjC;6#fKS{՘_9lA͈vR;EmF#Cیh/uLytr1c{hm;;;;;~14~ hךۯ51~C;6#)Jю<#m3mFN`j fD  Dیh(SfD;Ў<͈~5hvRیhGڑ6#-͈vyhm36#fD;6# LDیx)ճ 2)Jm3yhGfDیkWmF͈vRیhDیh fD;E6#ڑvmF͈ڦ3O陧ϿgDk>7ҫ^OOǬ__?OIcЃюA͈1_݈FPށ%1#3r/ O/@ )LCb0# ק !1' !1ËC ̈-!1C`F A>4>=10Q%h]!iB f!iB f"4!3bxaB fĐ4Cb0#ק &Wz^R(^tMӦiӴAeF KT~ Jf *ËE!iB f̈!si0# `F )LCb0# `F K1!3bB fĐ4Cb0#3bB f`F _^^R(^4 Umvٸf 5lpX10 A^R `F o9 A23bB fq blF4~a4A͈q blFo f8milFcc3b[S{ 'fp fK]w{pq blFە(Q=Fooo\S~1Tdq816#D0N` fq816#7cc3b46#11~a4A͈q blFo f8milFcc3b4A͈ ،-͈q blFcc3b46#116#116#?~'0cc3,c[xn-͈q blF1GYú}c̈q blFcc3b46#116#116# L،xmr3Os7}=yyKAz 'az5gbz '! 116#116#f816#f`F`|r~.ӭ9y^" h|KKaz ACßNA҆7̈8 JKATà;{%0<'/nl Aue^y]uY\fq/ &A>;F^" +"sOm6MM : 1zz}3\/AT Bm+=3#^bA8/q! }fKk =-dPόxAw3#<|ͣ6O !B}fKІчeAë?eePF}w1ř0I >A|||>>AvhbuM)EC^~ ~'n'Xvv~qo4 >}}c(++Q75:,3ڔ.mx๦ _b[xnṅg2#>g -<sº>sºoX QS 3 2#>2~(g>M[z陧g>23O陧g>k>-ҫ^OȌ__狑̈X'f&Z_[~w5O?/]q G|_jz(g\@lf2ly^s?"X| Oxx\z% !Y6?'< /Oxy[p.8 sùpnq)K zVK4 bC "6$bM"6_WilFIH9YduN9g9Ydu.NC^1\s:\ΨgzYgp84{CO" ԽYf}i֧YF  Ql,氘b9,氘b9,QTJS 2My1cHS<W_gX^q=Sz #4NKvZ^%.uIKe,g \>'p~۲#wW?W/*pK$DA4TKlq!h4N'KDC@pn88_|#aГ Q Ɨ|ؗBИleo.sٝ Q cy<,;bSM/,xXv5$!D 9DA άs)ɦ$";bcGlc<HB:'뜬s:ˎ;bcGl숍#6vƎ g4J8DJT(Q8@ IhwA4@lYf1lSvƎ;bcG#A9pbC95_ &>jrpttttҔ1chcGlvĶmGQH^4Uڔ#Uwqi'MX6rӰ4,aFX6²Ӈ>{zFX6²lD,F`,c Sd%;ϯ]jS~g~gԥ.-uiKK]ZR>7(!2ض#m;bێض#g\Sa*MǿQȎ~կ;eĂꥳAtPv:(;Gp5b X8;`G#6MMfhʎ+ ο6z]f*;AtPve^y]ue^y]u m66<]aJSeA:Ck8;`GĦ ry IFGZMI6EjTզjAtP7:ԍFu:tLUCdY8DCdY8;`G숃q#zD\LYfU/E(vT 'Q@߱M35㬺D`@-\ta̵~b-&ڦ6c 11 Y6f٘ecbEb#jzQRTFZ#Hkr\)W-rK-}ncEag'%RΑZhƇn1nQLgO.D[-:Ws Zm..:CC }7p 414n9c|r)/%bfMyĔGLy408L#S1S P7=rӺܵBLy4#i4HiaqFn҄~q+}g|[GGGOmj**9\:#r=H5O><2yD`8Cp!C<"HU RDC#'Oc63:::tH<"1  U)HU xD}xDp!A!><"AR#!׳0]j(,#+`Å 6LM# q  U)HU xD}xZ8+9La"ך^ĪjHkeR[-\=]G")B<"<b!,G0GǬ(D#,0K)a!=<"مG0GJ!yDyDx"a !xl0QGS a"aR0Ba7}maCۧ`#,0K)a!=<"WSٞ6}%Lt3t:Ff B0 0)B<"<b!,G0G5 {_#5'7b$QIxD#(D#(D#,0K)a!=<"E ~/zbeZ5"洕;ʶ %F!BGQG<}Ws <7[CISHx~tW$ sM!$) C$<"9 d1%aG$'0D#䥄G$aGd~Vg1%aGЏ3!.>`\vkD^Ŕ!tH H!NApq @ "d1%aG$,$ CHxD$ W?ZNbbJ HN:pupqup_y;) C$<"9鐄!$/%<" C$<" C$<"I^JxDHxD#0D#׳`y;) C$<&ˇvSHxDDŔ!N0D#I"IR#0D# 4)B<"\Sz"aJ)H@9Li"4 4s)i" 4)B<"=0QGg(D#̥GQG9Li"4 4s)i"i"iR#(D#RF!Rr˺ܳ.7]iSHyDz:aJ)H8QGK)H)HO@9Li"4)B<"=F!Rf.<"B<"aJ)H8QGK)H)H)H3RF!R4 G' 4 cC? 3B?yDHyDÔF!RqH)H3RF!RF!Rf.<"B<"i")Hs(D#tzߛu^]2%¬wޝs W~-GQG<"xDwQWcCTן}= MM$`Zw uq0ȤBFntQFb*((xDLDT! Q|8C]L2%@&zMCES(xDT! Q! QL7W4-p =CES(xDT! Q! Q uqX/d0f$$NX(xWXWX?k!"CT.Apshn&ڦb*(AYLEES(xD(xD#ʯ/eS(yDy~<Q0QG' 2 Q2BM\xB 'PعsaggZaE>}.\c ұ^,ǂ}QFoT)L7n ^ Sآc-: vAqE\ny86܌fL7cӍ}6gc}6}{MSY5\eb7>c3>[^Ktxu[cXcXcXcXWN(E%Z" zqǭzLƒ,9Aajګi–˖ll 9Ie2Z1ɮ2-3g>C=.7˝rko0pѫUA  1cnj {ʹ:sYcYcYcY7x=җ>}Q_Wu/?<(E>C}#Цdžzl象oFo6M}`BOn˷|_V [b/{_|;[myĖGlyĖGlGl31m6ZVlyĖGlyĖGlyĖG4;;;-L]sۓ\mb#H9]i_ևleʲE+r-nnn,βECMzT.O.Dj}o4gtm]]sۓ\mb#D mb봍Vl[[[ֽ [[iI%._&.&._'VlyĖGlyĖGlyĖG<ȺZ7n:R6MmM-V%n/9o9vs}~W}wnXDK?5=gmZc*g/{_eWn ײí7FbH$YL8ĐH C"1$,abH$q!abH$DbH$J,t?C"18A"J;ir# 7_abH$DbpE>mmܴO{?tFM^ 8ĐH ċJsrTEbH$Db4C 01$C"1C ĐH A|?_n}Eʅr b01$C"18!.ov Db4C 01$C"1C ĐH AC 0 @t_l]=X݅/-ӫ7`Yiߑ9M1u"Xd?@?}П^kg>`/<}'%n&4Ī&S4IbB3~˿ߡ~272O@f>! ,:9ʹL@OILҜ&a  *1T2 XT_T_T{ /pxdndndneOS4IbB3::DPEg7Mv1 SLhƄf,v?kQ -tEW]]tua,86xo~@Y6sOILҜ&a (Qpod pci 1!ʕu1E}Jb4 TL<`BOnuL[2m%KRTn)>mNVCu7|n{o[9=v;cV-}pT>Gk8Z#KGٗ%.ASOz#&xMm?Y6eyu^}'ċO.Dj}0)Ә-| r軡)9MSqP*9#?ٗ{wBt&H +Lc4?D>wa}_$`9K\L\M\N]ΣRKw˗˷+R_K}-]UU%]U|u|w﻾))xS7^ޙ^O[\$AQPTZ-Ӂu%$BfL2HE%.p\^8u<}I˽x\$F7n~wա )T\"UF?'.!=#8qp n~@=̓L RpK\ez9?"z3qވ3+p˜w"t7jhL R),^vIK\"Hp A"Ĺк{}עDyZݍżh.q@nuqߌf71#l(D{#EYĉK!~hӺe)cw=h)a6b!D%/  #s RT.+rײWn?dԲOJNa"!ăcf!DF(E%B.rF\u%r;^T^ {5BT.}c9J9a,l[[ =q:F1rK\"i,zys^npK\Au^%B.&80BrK\A!.nϗ OJNa"!ă>9 g~_pK\"r/"4}.r0)PK\"9SrزK\"R=ghԒ%y0BrK\AtMWtUIgh:2K^s>D%¸D%Uܶ}gHH{0=(Zov?cɩ$p,vuH7W?9a$)I"B$\"tz>ZhwcN>i$p,FKpsٿi.H.D!(D%.q@w,^pD%hQ k$H,X>|z'N HI" ޒj⫉U9H.D!(D%.qh/shiQ$ =VP`G!(D%.8%\"I8"`΢ /z`ii?l.8mn3qߌfp7Fac6Kf48@ /шK<+nZ\MtY\try'vJDHc)Hă57<.qPX>-KJ9k٫eYmuYF\"=,f;\"A1K\ADHc)HDrKшK"Gv{D#R. Kck^ N)Hci ")x=sVLG˭{>9Dw>R. D%R. zyq^['\"A1K\e|θ%R.8\"i4"BnϗM4"a4)i "A\"i+7˝rki "A\"%DHD%K\"F\"F\ =,]D%R. {%S3*Re.F#R.r4 R.r4))H)HD%hD%R.Q޵;߾ME8տN=EWQZ.2pD%N>x]d4ሂKp{e:QpD(DTp"QpJ{-8ۙ4؋gT# .I;R(R# .gdG\8/Q# .Q$2\G\\c鵩h*8I{b哇&>'~(DTp"QpuT# .gV0^= .Q(( .Q# .Qd4ሂKphQhщL%DKሂK\G\"G\6q(N.2pD%wc6F(k3w6KS# .qVpE%x_Z,-We+Ew+0-KYL%(%(^Le4F*ʕr.ײW;˷%|{TF#J.Q(%(J.QF#J.QF#J.Qf1\F\e4%8(#}Z:nQs_e$F\A1a}\^ GD(Dyg*%x5ܭ7(Tr2Qr2F\S(Dy^F\b*D(D(DTr2QrKшK\g*%x=)zSH[vmOgTjtML.ҕ?];SB4eS%hD%J.QF#J.QrKшK\"k]1^PBu\AQkQNE8b%~]}zq(bѴG,7XP^G,WY'W'U'UpuW;pĂK,Lj%.2_"MpĂKp}[&hj0T- .?$^z 'J|,1TsEF"pĂK,7X@_M?qIzq_ur_F1K, .\e\\WWIpĂK,wZ'WY'WY'7X'7X'7X?q5/XtuahZ#\Vƴը3͸o}3ac6zmfi̝ .qVIÉe>2˳|e4b%'"LhĒK,ш%XF#\b%g'"LhĒK,OD,ш%X3-K.F,ĒK,OD,ш%X3-K.F,ĒK,ш%XF#\b%ш%Xr%8(#}oE%g'"LhĒK,OD,ш%X3-K.F,ĒK,^/OD,ш%XX3-K.gZF#\bXr%XX3-K.gZF#\bXr%X3-K.F,ĒK,K.K.q '"LhĒK,OD,ш%X3-K.F,ĒK,OD,ш%X3-K.F,ĒK,ш%XF#\b%ш%Xr%x-;}K,ш%XF#\b%LhĒK,K.hĒK,ĒK,ш%XF#\b%ш%Xr%XF#\b%\b%w^us^bopFwXq/S? Ge#z܀~h_L9/K@:::F(6n0WNu5 @^TH@3iyD7u묓WR`(:::4Wg,Zt~Օv-t?p &6!7}}Y'Y?"lvqEb큉(.iE^ubK0%aŇP>\)nFpm/t.QR KռC[q\}H_uR[ÇJ@oć HKRGpe#8-˽퇨1 >H9u6mۜNK;yw Ql A\,{gm)K -ҊQ7|[4>d }7!5™Z#FWFn{N6D%h,U2]|K|M|O 0[ZqKo&9mC[q}⇾R{C KZvkgj⹭몒ZܷJ+wr')r-W[_|ӆL|,_3ϋ1i _Hd{w6{vwg0q&yo;.KhyZ%h覝@n+d ' NT~?W@;.i,~f-(((( d 8^T:  @?ŝ@f"H%lTp&V-Υ(((P2-_2q@RoTZD;LYʗLwZ?%0}FXNw@آ? td `A56(>`!7Qpo`iscY#\B'};݃JD,ן.3oU,,-mVnoS*\؞zdEʕrvۥn/xRa/RG}ċ|.3ċB#}-;nXUN ס_ w_tr у 7BP.KKҲ{8s,5X/)w+LGfTnsZQp9/˽ċ,u6e5\>wۿmgWpwpCzq\ucj,-.[~78(^%Nd{|Kh2"y۲~/|/>5ۗQ<(-RKf}-nWo^HٲkgtEPz]uJSL9ˑ)_K 2qn~v:۾~]}bw/{Lus\x@?7zc :Ԣ7j2q-$.EE7EwhTwuЍ^iH<248Q<cx>k3e߀(@Ay#X/8:o 2q@b ŚL\t6LldX| s ZZZ4: d0(.~L\8)S9[v3ennSsd#3mTMܲS=Ľr줦YO -Ijzжǰۈ-el _YC9=֝OM- - - V-z?XQ-Vie,:iKX-5}]k] -tY5E;e6K!7Lt7}/d2(E,_̫`c4/F|KhҺ%g?f'D:J'rQ,--Rۖhi{i{qrK]v۵R{7 Ny},UOnǭ:hZʌ$41tӊY,]̆:ȱt! a_^7RT.--KJ;!jM9SݦMuĐVn;yw KSߝ8nsكm+BHGQmrWܖpziBPN?iĐV<Ȗ[~4^4E_)=HװsJo ЊȖ]rزˡZ}ޔd_&,7Ժ?^CCZq˖];S粮/Z/.Њ/5]+ǣ\m}r)&kso$:ML=d4!72E%@fSkw{B&@Lxj0Z[T>PWIӄLк2?P}r*2ItcC;iB&f hݛL/>=u?8LĹDf"EAޜذL@2ntĹ258Y#U V}jNE(JhoQ̋Ntoz]gѡ Fbttb,Zfc̍C68^ ;0<&ddPpJl֨\$duKs>m#׿Lă\/KoKoK1,)8h)W^ڞz\So'7+NS6 lzo}ƕ`D)x-,ϰ)&lb&*KЯܛ=? "鰧þ n8n#KKҲl $hoꓓ? "rΣnSݦIY'NS6 K=]C"kS/ԋ$Ulel =$圿ev ˽rsItDX`"3 d"|DD&~hIS1`r}R8 .n.n~ 37a@-)\ЫТDD&庸QXc3nTD&庸lxl,|.F$B6]R[Ga_\G$B6&:MMl3CʥUʹ_K9uvm۫ѫR[-oD0"0"MNaD"daD"d!#!D&*[u`_M1>ܴ.? "RT.--KҲ;!`릣0r6m$l"dT};/7OˆD&ˆD&B6&:MMl"Hl"d!8,혈D&^\*g8l"di rw')Hl"Hl"daSDD&ˆD&B6YCLΰT+MNaD"daD"d!#!D&D0"0"MMl"daD"d!D&wϜ b߿:&_^dX\$6q@7ɮ?0@&;wQk vd.~@tld.nnnu#3N+mr:Mz^s@"UgC'*Nbt $6q2ձ ~@ݍ^&620v Aҟ"{/2  {pIQ$ޒjE oĹ(((ZX{IdMp7 h6Ņ=? Ef <]8?yZf߂tm`3ܛQĪ֗Խ ]ץ._}Kψ)W)[ʩۥnק۶WW%ub&6 nKoKtrNcaMD&R6qPo˺j9MGp܎M<͇=\*ʥeiYdD&r߇tzLc:s(nSݦMg3| qu^'GA6s)mǰ46HD&܎M 95"s;6q39B?pk/7ݝilA_)O}{]& 6Q}M 4m6Q.btW?<6q-bn5u!J_Yw}\7/?씱M<&>#>di^ڞz\RRKݾ=j۫m/ۭ76Q.c%(c%(DyMlMldeld%(A%Zխ ib%8{дԞ{:|Hʕei}%,}M݃t S=19Sns~%WQp:/͓eldeld%8h+?םD&J6Q|r[u(A \sBk7Ҵ,airwu(D(D&[ lMldeld%(AZ-V KGiLk:J3ri޵WCb%(D&D&J6QMۛ߿uֿgֿ; nvtX^"iA'~C\vtM'ԢEӂNpnnntOذяq=@LA1EuׇX6Ϡw}|AޖpZ%8h*>RN.utߦb6z/~%NK>qmvJ%xٴTkNĒO,3|b'| u3 w]AL;2|r\ZZ.ZU/~k8H=1r6mۜ_+w˭rpZeӒO,AmK?k'|bK>\|iŇ|i %X򉃖ș~eӒO,3|b'DҗK_pZ%Xf8-ĒO,ACYҕ7 A,| O,3|b'| 2i'|bK> %X%X̶linbox-1.6.3/benchmarks/matrix/bibd_14_7_91x3432.sms000066400000000000000000025042711347646240000216510ustar00rootroot0000000000000091 3432 M 1 1 1 1 2 1 1 3 1 1 4 1 1 5 1 1 6 1 1 7 1 1 8 1 1 9 1 1 10 1 1 11 1 1 12 1 1 13 1 1 14 1 1 15 1 1 16 1 1 17 1 1 18 1 1 19 1 1 20 1 1 21 1 1 22 1 1 23 1 1 24 1 1 25 1 1 26 1 1 27 1 1 28 1 1 29 1 1 30 1 1 31 1 1 32 1 1 33 1 1 34 1 1 35 1 1 36 1 1 37 1 1 38 1 1 39 1 1 40 1 1 41 1 1 42 1 1 43 1 1 44 1 1 45 1 1 46 1 1 47 1 1 48 1 1 49 1 1 50 1 1 51 1 1 52 1 1 53 1 1 54 1 1 55 1 1 56 1 1 57 1 1 58 1 1 59 1 1 60 1 1 61 1 1 62 1 1 63 1 1 64 1 1 65 1 1 66 1 1 67 1 1 68 1 1 69 1 1 70 1 1 71 1 1 72 1 1 73 1 1 74 1 1 75 1 1 76 1 1 77 1 1 78 1 1 79 1 1 80 1 1 81 1 1 82 1 1 83 1 1 84 1 1 85 1 1 86 1 1 87 1 1 88 1 1 89 1 1 90 1 1 91 1 1 92 1 1 93 1 1 94 1 1 95 1 1 96 1 1 97 1 1 98 1 1 99 1 1 100 1 1 101 1 1 102 1 1 103 1 1 104 1 1 105 1 1 106 1 1 107 1 1 108 1 1 109 1 1 110 1 1 111 1 1 112 1 1 113 1 1 114 1 1 115 1 1 116 1 1 117 1 1 118 1 1 119 1 1 120 1 1 121 1 1 122 1 1 123 1 1 124 1 1 125 1 1 126 1 1 127 1 1 128 1 1 129 1 1 130 1 1 131 1 1 132 1 1 133 1 1 134 1 1 135 1 1 136 1 1 137 1 1 138 1 1 139 1 1 140 1 1 141 1 1 142 1 1 143 1 1 144 1 1 145 1 1 146 1 1 147 1 1 148 1 1 149 1 1 150 1 1 151 1 1 152 1 1 153 1 1 154 1 1 155 1 1 156 1 1 157 1 1 158 1 1 159 1 1 160 1 1 161 1 1 162 1 1 163 1 1 164 1 1 165 1 1 166 1 1 167 1 1 168 1 1 169 1 1 170 1 1 171 1 1 172 1 1 173 1 1 174 1 1 175 1 1 176 1 1 177 1 1 178 1 1 179 1 1 180 1 1 181 1 1 182 1 1 183 1 1 184 1 1 185 1 1 186 1 1 187 1 1 188 1 1 189 1 1 190 1 1 191 1 1 192 1 1 193 1 1 194 1 1 195 1 1 196 1 1 197 1 1 198 1 1 199 1 1 200 1 1 201 1 1 202 1 1 203 1 1 204 1 1 205 1 1 206 1 1 207 1 1 208 1 1 209 1 1 210 1 1 211 1 1 212 1 1 213 1 1 214 1 1 215 1 1 216 1 1 217 1 1 218 1 1 219 1 1 220 1 1 221 1 1 222 1 1 223 1 1 224 1 1 225 1 1 226 1 1 227 1 1 228 1 1 229 1 1 230 1 1 231 1 1 232 1 1 233 1 1 234 1 1 235 1 1 236 1 1 237 1 1 238 1 1 239 1 1 240 1 1 241 1 1 242 1 1 243 1 1 244 1 1 245 1 1 246 1 1 247 1 1 248 1 1 249 1 1 250 1 1 251 1 1 252 1 1 253 1 1 254 1 1 255 1 1 256 1 1 257 1 1 258 1 1 259 1 1 260 1 1 261 1 1 262 1 1 263 1 1 264 1 1 265 1 1 266 1 1 267 1 1 268 1 1 269 1 1 270 1 1 271 1 1 272 1 1 273 1 1 274 1 1 275 1 1 276 1 1 277 1 1 278 1 1 279 1 1 280 1 1 281 1 1 282 1 1 283 1 1 284 1 1 285 1 1 286 1 1 287 1 1 288 1 1 289 1 1 290 1 1 291 1 1 292 1 1 293 1 1 294 1 1 295 1 1 296 1 1 297 1 1 298 1 1 299 1 1 300 1 1 301 1 1 302 1 1 303 1 1 304 1 1 305 1 1 306 1 1 307 1 1 308 1 1 309 1 1 310 1 1 311 1 1 312 1 1 313 1 1 314 1 1 315 1 1 316 1 1 317 1 1 318 1 1 319 1 1 320 1 1 321 1 1 322 1 1 323 1 1 324 1 1 325 1 1 326 1 1 327 1 1 328 1 1 329 1 1 330 1 1 331 1 1 332 1 1 333 1 1 334 1 1 335 1 1 336 1 1 337 1 1 338 1 1 339 1 1 340 1 1 341 1 1 342 1 1 343 1 1 344 1 1 345 1 1 346 1 1 347 1 1 348 1 1 349 1 1 350 1 1 351 1 1 352 1 1 353 1 1 354 1 1 355 1 1 356 1 1 357 1 1 358 1 1 359 1 1 360 1 1 361 1 1 362 1 1 363 1 1 364 1 1 365 1 1 366 1 1 367 1 1 368 1 1 369 1 1 370 1 1 371 1 1 372 1 1 373 1 1 374 1 1 375 1 1 376 1 1 377 1 1 378 1 1 379 1 1 380 1 1 381 1 1 382 1 1 383 1 1 384 1 1 385 1 1 386 1 1 387 1 1 388 1 1 389 1 1 390 1 1 391 1 1 392 1 1 393 1 1 394 1 1 395 1 1 396 1 1 397 1 1 398 1 1 399 1 1 400 1 1 401 1 1 402 1 1 403 1 1 404 1 1 405 1 1 406 1 1 407 1 1 408 1 1 409 1 1 410 1 1 411 1 1 412 1 1 413 1 1 414 1 1 415 1 1 416 1 1 417 1 1 418 1 1 419 1 1 420 1 1 421 1 1 422 1 1 423 1 1 424 1 1 425 1 1 426 1 1 427 1 1 428 1 1 429 1 1 430 1 1 431 1 1 432 1 1 433 1 1 434 1 1 435 1 1 436 1 1 437 1 1 438 1 1 439 1 1 440 1 1 441 1 1 442 1 1 443 1 1 444 1 1 445 1 1 446 1 1 447 1 1 448 1 1 449 1 1 450 1 1 451 1 1 452 1 1 453 1 1 454 1 1 455 1 1 456 1 1 457 1 1 458 1 1 459 1 1 460 1 1 461 1 1 462 1 1 463 1 1 464 1 1 465 1 1 466 1 1 467 1 1 468 1 1 469 1 1 470 1 1 471 1 1 472 1 1 473 1 1 474 1 1 475 1 1 476 1 1 477 1 1 478 1 1 479 1 1 480 1 1 481 1 1 482 1 1 483 1 1 484 1 1 485 1 1 486 1 1 487 1 1 488 1 1 489 1 1 490 1 1 491 1 1 492 1 1 493 1 1 494 1 1 495 1 1 496 1 1 497 1 1 498 1 1 499 1 1 500 1 1 501 1 1 502 1 1 503 1 1 504 1 1 505 1 1 506 1 1 507 1 1 508 1 1 509 1 1 510 1 1 511 1 1 512 1 1 513 1 1 514 1 1 515 1 1 516 1 1 517 1 1 518 1 1 519 1 1 520 1 1 521 1 1 522 1 1 523 1 1 524 1 1 525 1 1 526 1 1 527 1 1 528 1 1 529 1 1 530 1 1 531 1 1 532 1 1 533 1 1 534 1 1 535 1 1 536 1 1 537 1 1 538 1 1 539 1 1 540 1 1 541 1 1 542 1 1 543 1 1 544 1 1 545 1 1 546 1 1 547 1 1 548 1 1 549 1 1 550 1 1 551 1 1 552 1 1 553 1 1 554 1 1 555 1 1 556 1 1 557 1 1 558 1 1 559 1 1 560 1 1 561 1 1 562 1 1 563 1 1 564 1 1 565 1 1 566 1 1 567 1 1 568 1 1 569 1 1 570 1 1 571 1 1 572 1 1 573 1 1 574 1 1 575 1 1 576 1 1 577 1 1 578 1 1 579 1 1 580 1 1 581 1 1 582 1 1 583 1 1 584 1 1 585 1 1 586 1 1 587 1 1 588 1 1 589 1 1 590 1 1 591 1 1 592 1 1 593 1 1 594 1 1 595 1 1 596 1 1 597 1 1 598 1 1 599 1 1 600 1 1 601 1 1 602 1 1 603 1 1 604 1 1 605 1 1 606 1 1 607 1 1 608 1 1 609 1 1 610 1 1 611 1 1 612 1 1 613 1 1 614 1 1 615 1 1 616 1 1 617 1 1 618 1 1 619 1 1 620 1 1 621 1 1 622 1 1 623 1 1 624 1 1 625 1 1 626 1 1 627 1 1 628 1 1 629 1 1 630 1 1 631 1 1 632 1 1 633 1 1 634 1 1 635 1 1 636 1 1 637 1 1 638 1 1 639 1 1 640 1 1 641 1 1 642 1 1 643 1 1 644 1 1 645 1 1 646 1 1 647 1 1 648 1 1 649 1 1 650 1 1 651 1 1 652 1 1 653 1 1 654 1 1 655 1 1 656 1 1 657 1 1 658 1 1 659 1 1 660 1 1 661 1 1 662 1 1 663 1 1 664 1 1 665 1 1 666 1 1 667 1 1 668 1 1 669 1 1 670 1 1 671 1 1 672 1 1 673 1 1 674 1 1 675 1 1 676 1 1 677 1 1 678 1 1 679 1 1 680 1 1 681 1 1 682 1 1 683 1 1 684 1 1 685 1 1 686 1 1 687 1 1 688 1 1 689 1 1 690 1 1 691 1 1 692 1 1 693 1 1 694 1 1 695 1 1 696 1 1 697 1 1 698 1 1 699 1 1 700 1 1 701 1 1 702 1 1 703 1 1 704 1 1 705 1 1 706 1 1 707 1 1 708 1 1 709 1 1 710 1 1 711 1 1 712 1 1 713 1 1 714 1 1 715 1 1 716 1 1 717 1 1 718 1 1 719 1 1 720 1 1 721 1 1 722 1 1 723 1 1 724 1 1 725 1 1 726 1 1 727 1 1 728 1 1 729 1 1 730 1 1 731 1 1 732 1 1 733 1 1 734 1 1 735 1 1 736 1 1 737 1 1 738 1 1 739 1 1 740 1 1 741 1 1 742 1 1 743 1 1 744 1 1 745 1 1 746 1 1 747 1 1 748 1 1 749 1 1 750 1 1 751 1 1 752 1 1 753 1 1 754 1 1 755 1 1 756 1 1 757 1 1 758 1 1 759 1 1 760 1 1 761 1 1 762 1 1 763 1 1 764 1 1 765 1 1 766 1 1 767 1 1 768 1 1 769 1 1 770 1 1 771 1 1 772 1 1 773 1 1 774 1 1 775 1 1 776 1 1 777 1 1 778 1 1 779 1 1 780 1 1 781 1 1 782 1 1 783 1 1 784 1 1 785 1 1 786 1 1 787 1 1 788 1 1 789 1 1 790 1 1 791 1 1 792 1 2 1 1 2 2 1 2 3 1 2 4 1 2 5 1 2 6 1 2 7 1 2 8 1 2 9 1 2 10 1 2 11 1 2 12 1 2 13 1 2 14 1 2 15 1 2 16 1 2 17 1 2 18 1 2 19 1 2 20 1 2 21 1 2 22 1 2 23 1 2 24 1 2 25 1 2 26 1 2 27 1 2 28 1 2 29 1 2 30 1 2 31 1 2 32 1 2 33 1 2 34 1 2 35 1 2 36 1 2 37 1 2 38 1 2 39 1 2 40 1 2 41 1 2 42 1 2 43 1 2 44 1 2 45 1 2 46 1 2 47 1 2 48 1 2 49 1 2 50 1 2 51 1 2 52 1 2 53 1 2 54 1 2 55 1 2 56 1 2 57 1 2 58 1 2 59 1 2 60 1 2 61 1 2 62 1 2 63 1 2 64 1 2 65 1 2 66 1 2 67 1 2 68 1 2 69 1 2 70 1 2 71 1 2 72 1 2 73 1 2 74 1 2 75 1 2 76 1 2 77 1 2 78 1 2 79 1 2 80 1 2 81 1 2 82 1 2 83 1 2 84 1 2 85 1 2 86 1 2 87 1 2 88 1 2 89 1 2 90 1 2 91 1 2 92 1 2 93 1 2 94 1 2 95 1 2 96 1 2 97 1 2 98 1 2 99 1 2 100 1 2 101 1 2 102 1 2 103 1 2 104 1 2 105 1 2 106 1 2 107 1 2 108 1 2 109 1 2 110 1 2 111 1 2 112 1 2 113 1 2 114 1 2 115 1 2 116 1 2 117 1 2 118 1 2 119 1 2 120 1 2 121 1 2 122 1 2 123 1 2 124 1 2 125 1 2 126 1 2 127 1 2 128 1 2 129 1 2 130 1 2 131 1 2 132 1 2 133 1 2 134 1 2 135 1 2 136 1 2 137 1 2 138 1 2 139 1 2 140 1 2 141 1 2 142 1 2 143 1 2 144 1 2 145 1 2 146 1 2 147 1 2 148 1 2 149 1 2 150 1 2 151 1 2 152 1 2 153 1 2 154 1 2 155 1 2 156 1 2 157 1 2 158 1 2 159 1 2 160 1 2 161 1 2 162 1 2 163 1 2 164 1 2 165 1 2 166 1 2 167 1 2 168 1 2 169 1 2 170 1 2 171 1 2 172 1 2 173 1 2 174 1 2 175 1 2 176 1 2 177 1 2 178 1 2 179 1 2 180 1 2 181 1 2 182 1 2 183 1 2 184 1 2 185 1 2 186 1 2 187 1 2 188 1 2 189 1 2 190 1 2 191 1 2 192 1 2 193 1 2 194 1 2 195 1 2 196 1 2 197 1 2 198 1 2 199 1 2 200 1 2 201 1 2 202 1 2 203 1 2 204 1 2 205 1 2 206 1 2 207 1 2 208 1 2 209 1 2 210 1 2 211 1 2 212 1 2 213 1 2 214 1 2 215 1 2 216 1 2 217 1 2 218 1 2 219 1 2 220 1 2 221 1 2 222 1 2 223 1 2 224 1 2 225 1 2 226 1 2 227 1 2 228 1 2 229 1 2 230 1 2 231 1 2 232 1 2 233 1 2 234 1 2 235 1 2 236 1 2 237 1 2 238 1 2 239 1 2 240 1 2 241 1 2 242 1 2 243 1 2 244 1 2 245 1 2 246 1 2 247 1 2 248 1 2 249 1 2 250 1 2 251 1 2 252 1 2 253 1 2 254 1 2 255 1 2 256 1 2 257 1 2 258 1 2 259 1 2 260 1 2 261 1 2 262 1 2 263 1 2 264 1 2 265 1 2 266 1 2 267 1 2 268 1 2 269 1 2 270 1 2 271 1 2 272 1 2 273 1 2 274 1 2 275 1 2 276 1 2 277 1 2 278 1 2 279 1 2 280 1 2 281 1 2 282 1 2 283 1 2 284 1 2 285 1 2 286 1 2 287 1 2 288 1 2 289 1 2 290 1 2 291 1 2 292 1 2 293 1 2 294 1 2 295 1 2 296 1 2 297 1 2 298 1 2 299 1 2 300 1 2 301 1 2 302 1 2 303 1 2 304 1 2 305 1 2 306 1 2 307 1 2 308 1 2 309 1 2 310 1 2 311 1 2 312 1 2 313 1 2 314 1 2 315 1 2 316 1 2 317 1 2 318 1 2 319 1 2 320 1 2 321 1 2 322 1 2 323 1 2 324 1 2 325 1 2 326 1 2 327 1 2 328 1 2 329 1 2 330 1 2 793 1 2 794 1 2 795 1 2 796 1 2 797 1 2 798 1 2 799 1 2 800 1 2 801 1 2 802 1 2 803 1 2 804 1 2 805 1 2 806 1 2 807 1 2 808 1 2 809 1 2 810 1 2 811 1 2 812 1 2 813 1 2 814 1 2 815 1 2 816 1 2 817 1 2 818 1 2 819 1 2 820 1 2 821 1 2 822 1 2 823 1 2 824 1 2 825 1 2 826 1 2 827 1 2 828 1 2 829 1 2 830 1 2 831 1 2 832 1 2 833 1 2 834 1 2 835 1 2 836 1 2 837 1 2 838 1 2 839 1 2 840 1 2 841 1 2 842 1 2 843 1 2 844 1 2 845 1 2 846 1 2 847 1 2 848 1 2 849 1 2 850 1 2 851 1 2 852 1 2 853 1 2 854 1 2 855 1 2 856 1 2 857 1 2 858 1 2 859 1 2 860 1 2 861 1 2 862 1 2 863 1 2 864 1 2 865 1 2 866 1 2 867 1 2 868 1 2 869 1 2 870 1 2 871 1 2 872 1 2 873 1 2 874 1 2 875 1 2 876 1 2 877 1 2 878 1 2 879 1 2 880 1 2 881 1 2 882 1 2 883 1 2 884 1 2 885 1 2 886 1 2 887 1 2 888 1 2 889 1 2 890 1 2 891 1 2 892 1 2 893 1 2 894 1 2 895 1 2 896 1 2 897 1 2 898 1 2 899 1 2 900 1 2 901 1 2 902 1 2 903 1 2 904 1 2 905 1 2 906 1 2 907 1 2 908 1 2 909 1 2 910 1 2 911 1 2 912 1 2 913 1 2 914 1 2 915 1 2 916 1 2 917 1 2 918 1 2 919 1 2 920 1 2 921 1 2 922 1 2 923 1 2 924 1 2 925 1 2 926 1 2 927 1 2 928 1 2 929 1 2 930 1 2 931 1 2 932 1 2 933 1 2 934 1 2 935 1 2 936 1 2 937 1 2 938 1 2 939 1 2 940 1 2 941 1 2 942 1 2 943 1 2 944 1 2 945 1 2 946 1 2 947 1 2 948 1 2 949 1 2 950 1 2 951 1 2 952 1 2 953 1 2 954 1 2 955 1 2 956 1 2 957 1 2 958 1 2 959 1 2 960 1 2 961 1 2 962 1 2 963 1 2 964 1 2 965 1 2 966 1 2 967 1 2 968 1 2 969 1 2 970 1 2 971 1 2 972 1 2 973 1 2 974 1 2 975 1 2 976 1 2 977 1 2 978 1 2 979 1 2 980 1 2 981 1 2 982 1 2 983 1 2 984 1 2 985 1 2 986 1 2 987 1 2 988 1 2 989 1 2 990 1 2 991 1 2 992 1 2 993 1 2 994 1 2 995 1 2 996 1 2 997 1 2 998 1 2 999 1 2 1000 1 2 1001 1 2 1002 1 2 1003 1 2 1004 1 2 1005 1 2 1006 1 2 1007 1 2 1008 1 2 1009 1 2 1010 1 2 1011 1 2 1012 1 2 1013 1 2 1014 1 2 1015 1 2 1016 1 2 1017 1 2 1018 1 2 1019 1 2 1020 1 2 1021 1 2 1022 1 2 1023 1 2 1024 1 2 1025 1 2 1026 1 2 1027 1 2 1028 1 2 1029 1 2 1030 1 2 1031 1 2 1032 1 2 1033 1 2 1034 1 2 1035 1 2 1036 1 2 1037 1 2 1038 1 2 1039 1 2 1040 1 2 1041 1 2 1042 1 2 1043 1 2 1044 1 2 1045 1 2 1046 1 2 1047 1 2 1048 1 2 1049 1 2 1050 1 2 1051 1 2 1052 1 2 1053 1 2 1054 1 2 1055 1 2 1056 1 2 1057 1 2 1058 1 2 1059 1 2 1060 1 2 1061 1 2 1062 1 2 1063 1 2 1064 1 2 1065 1 2 1066 1 2 1067 1 2 1068 1 2 1069 1 2 1070 1 2 1071 1 2 1072 1 2 1073 1 2 1074 1 2 1075 1 2 1076 1 2 1077 1 2 1078 1 2 1079 1 2 1080 1 2 1081 1 2 1082 1 2 1083 1 2 1084 1 2 1085 1 2 1086 1 2 1087 1 2 1088 1 2 1089 1 2 1090 1 2 1091 1 2 1092 1 2 1093 1 2 1094 1 2 1095 1 2 1096 1 2 1097 1 2 1098 1 2 1099 1 2 1100 1 2 1101 1 2 1102 1 2 1103 1 2 1104 1 2 1105 1 2 1106 1 2 1107 1 2 1108 1 2 1109 1 2 1110 1 2 1111 1 2 1112 1 2 1113 1 2 1114 1 2 1115 1 2 1116 1 2 1117 1 2 1118 1 2 1119 1 2 1120 1 2 1121 1 2 1122 1 2 1123 1 2 1124 1 2 1125 1 2 1126 1 2 1127 1 2 1128 1 2 1129 1 2 1130 1 2 1131 1 2 1132 1 2 1133 1 2 1134 1 2 1135 1 2 1136 1 2 1137 1 2 1138 1 2 1139 1 2 1140 1 2 1141 1 2 1142 1 2 1143 1 2 1144 1 2 1145 1 2 1146 1 2 1147 1 2 1148 1 2 1149 1 2 1150 1 2 1151 1 2 1152 1 2 1153 1 2 1154 1 2 1155 1 2 1156 1 2 1157 1 2 1158 1 2 1159 1 2 1160 1 2 1161 1 2 1162 1 2 1163 1 2 1164 1 2 1165 1 2 1166 1 2 1167 1 2 1168 1 2 1169 1 2 1170 1 2 1171 1 2 1172 1 2 1173 1 2 1174 1 2 1175 1 2 1176 1 2 1177 1 2 1178 1 2 1179 1 2 1180 1 2 1181 1 2 1182 1 2 1183 1 2 1184 1 2 1185 1 2 1186 1 2 1187 1 2 1188 1 2 1189 1 2 1190 1 2 1191 1 2 1192 1 2 1193 1 2 1194 1 2 1195 1 2 1196 1 2 1197 1 2 1198 1 2 1199 1 2 1200 1 2 1201 1 2 1202 1 2 1203 1 2 1204 1 2 1205 1 2 1206 1 2 1207 1 2 1208 1 2 1209 1 2 1210 1 2 1211 1 2 1212 1 2 1213 1 2 1214 1 2 1215 1 2 1216 1 2 1217 1 2 1218 1 2 1219 1 2 1220 1 2 1221 1 2 1222 1 2 1223 1 2 1224 1 2 1225 1 2 1226 1 2 1227 1 2 1228 1 2 1229 1 2 1230 1 2 1231 1 2 1232 1 2 1233 1 2 1234 1 2 1235 1 2 1236 1 2 1237 1 2 1238 1 2 1239 1 2 1240 1 2 1241 1 2 1242 1 2 1243 1 2 1244 1 2 1245 1 2 1246 1 2 1247 1 2 1248 1 2 1249 1 2 1250 1 2 1251 1 2 1252 1 2 1253 1 2 1254 1 3 1 1 3 2 1 3 3 1 3 4 1 3 5 1 3 6 1 3 7 1 3 8 1 3 9 1 3 10 1 3 11 1 3 12 1 3 13 1 3 14 1 3 15 1 3 16 1 3 17 1 3 18 1 3 19 1 3 20 1 3 21 1 3 22 1 3 23 1 3 24 1 3 25 1 3 26 1 3 27 1 3 28 1 3 29 1 3 30 1 3 31 1 3 32 1 3 33 1 3 34 1 3 35 1 3 36 1 3 37 1 3 38 1 3 39 1 3 40 1 3 41 1 3 42 1 3 43 1 3 44 1 3 45 1 3 46 1 3 47 1 3 48 1 3 49 1 3 50 1 3 51 1 3 52 1 3 53 1 3 54 1 3 55 1 3 56 1 3 57 1 3 58 1 3 59 1 3 60 1 3 61 1 3 62 1 3 63 1 3 64 1 3 65 1 3 66 1 3 67 1 3 68 1 3 69 1 3 70 1 3 71 1 3 72 1 3 73 1 3 74 1 3 75 1 3 76 1 3 77 1 3 78 1 3 79 1 3 80 1 3 81 1 3 82 1 3 83 1 3 84 1 3 85 1 3 86 1 3 87 1 3 88 1 3 89 1 3 90 1 3 91 1 3 92 1 3 93 1 3 94 1 3 95 1 3 96 1 3 97 1 3 98 1 3 99 1 3 100 1 3 101 1 3 102 1 3 103 1 3 104 1 3 105 1 3 106 1 3 107 1 3 108 1 3 109 1 3 110 1 3 111 1 3 112 1 3 113 1 3 114 1 3 115 1 3 116 1 3 117 1 3 118 1 3 119 1 3 120 1 3 331 1 3 332 1 3 333 1 3 334 1 3 335 1 3 336 1 3 337 1 3 338 1 3 339 1 3 340 1 3 341 1 3 342 1 3 343 1 3 344 1 3 345 1 3 346 1 3 347 1 3 348 1 3 349 1 3 350 1 3 351 1 3 352 1 3 353 1 3 354 1 3 355 1 3 356 1 3 357 1 3 358 1 3 359 1 3 360 1 3 361 1 3 362 1 3 363 1 3 364 1 3 365 1 3 366 1 3 367 1 3 368 1 3 369 1 3 370 1 3 371 1 3 372 1 3 373 1 3 374 1 3 375 1 3 376 1 3 377 1 3 378 1 3 379 1 3 380 1 3 381 1 3 382 1 3 383 1 3 384 1 3 385 1 3 386 1 3 387 1 3 388 1 3 389 1 3 390 1 3 391 1 3 392 1 3 393 1 3 394 1 3 395 1 3 396 1 3 397 1 3 398 1 3 399 1 3 400 1 3 401 1 3 402 1 3 403 1 3 404 1 3 405 1 3 406 1 3 407 1 3 408 1 3 409 1 3 410 1 3 411 1 3 412 1 3 413 1 3 414 1 3 415 1 3 416 1 3 417 1 3 418 1 3 419 1 3 420 1 3 421 1 3 422 1 3 423 1 3 424 1 3 425 1 3 426 1 3 427 1 3 428 1 3 429 1 3 430 1 3 431 1 3 432 1 3 433 1 3 434 1 3 435 1 3 436 1 3 437 1 3 438 1 3 439 1 3 440 1 3 441 1 3 442 1 3 443 1 3 444 1 3 445 1 3 446 1 3 447 1 3 448 1 3 449 1 3 450 1 3 451 1 3 452 1 3 453 1 3 454 1 3 455 1 3 456 1 3 457 1 3 458 1 3 459 1 3 460 1 3 461 1 3 462 1 3 463 1 3 464 1 3 465 1 3 466 1 3 467 1 3 468 1 3 469 1 3 470 1 3 471 1 3 472 1 3 473 1 3 474 1 3 475 1 3 476 1 3 477 1 3 478 1 3 479 1 3 480 1 3 481 1 3 482 1 3 483 1 3 484 1 3 485 1 3 486 1 3 487 1 3 488 1 3 489 1 3 490 1 3 491 1 3 492 1 3 493 1 3 494 1 3 495 1 3 496 1 3 497 1 3 498 1 3 499 1 3 500 1 3 501 1 3 502 1 3 503 1 3 504 1 3 505 1 3 506 1 3 507 1 3 508 1 3 509 1 3 510 1 3 511 1 3 512 1 3 513 1 3 514 1 3 515 1 3 516 1 3 517 1 3 518 1 3 519 1 3 520 1 3 521 1 3 522 1 3 523 1 3 524 1 3 525 1 3 526 1 3 527 1 3 528 1 3 529 1 3 530 1 3 531 1 3 532 1 3 533 1 3 534 1 3 535 1 3 536 1 3 537 1 3 538 1 3 539 1 3 540 1 3 793 1 3 794 1 3 795 1 3 796 1 3 797 1 3 798 1 3 799 1 3 800 1 3 801 1 3 802 1 3 803 1 3 804 1 3 805 1 3 806 1 3 807 1 3 808 1 3 809 1 3 810 1 3 811 1 3 812 1 3 813 1 3 814 1 3 815 1 3 816 1 3 817 1 3 818 1 3 819 1 3 820 1 3 821 1 3 822 1 3 823 1 3 824 1 3 825 1 3 826 1 3 827 1 3 828 1 3 829 1 3 830 1 3 831 1 3 832 1 3 833 1 3 834 1 3 835 1 3 836 1 3 837 1 3 838 1 3 839 1 3 840 1 3 841 1 3 842 1 3 843 1 3 844 1 3 845 1 3 846 1 3 847 1 3 848 1 3 849 1 3 850 1 3 851 1 3 852 1 3 853 1 3 854 1 3 855 1 3 856 1 3 857 1 3 858 1 3 859 1 3 860 1 3 861 1 3 862 1 3 863 1 3 864 1 3 865 1 3 866 1 3 867 1 3 868 1 3 869 1 3 870 1 3 871 1 3 872 1 3 873 1 3 874 1 3 875 1 3 876 1 3 877 1 3 878 1 3 879 1 3 880 1 3 881 1 3 882 1 3 883 1 3 884 1 3 885 1 3 886 1 3 887 1 3 888 1 3 889 1 3 890 1 3 891 1 3 892 1 3 893 1 3 894 1 3 895 1 3 896 1 3 897 1 3 898 1 3 899 1 3 900 1 3 901 1 3 902 1 3 903 1 3 904 1 3 905 1 3 906 1 3 907 1 3 908 1 3 909 1 3 910 1 3 911 1 3 912 1 3 913 1 3 914 1 3 915 1 3 916 1 3 917 1 3 918 1 3 919 1 3 920 1 3 921 1 3 922 1 3 923 1 3 924 1 3 925 1 3 926 1 3 927 1 3 928 1 3 929 1 3 930 1 3 931 1 3 932 1 3 933 1 3 934 1 3 935 1 3 936 1 3 937 1 3 938 1 3 939 1 3 940 1 3 941 1 3 942 1 3 943 1 3 944 1 3 945 1 3 946 1 3 947 1 3 948 1 3 949 1 3 950 1 3 951 1 3 952 1 3 953 1 3 954 1 3 955 1 3 956 1 3 957 1 3 958 1 3 959 1 3 960 1 3 961 1 3 962 1 3 963 1 3 964 1 3 965 1 3 966 1 3 967 1 3 968 1 3 969 1 3 970 1 3 971 1 3 972 1 3 973 1 3 974 1 3 975 1 3 976 1 3 977 1 3 978 1 3 979 1 3 980 1 3 981 1 3 982 1 3 983 1 3 984 1 3 985 1 3 986 1 3 987 1 3 988 1 3 989 1 3 990 1 3 991 1 3 992 1 3 993 1 3 994 1 3 995 1 3 996 1 3 997 1 3 998 1 3 999 1 3 1000 1 3 1001 1 3 1002 1 3 1255 1 3 1256 1 3 1257 1 3 1258 1 3 1259 1 3 1260 1 3 1261 1 3 1262 1 3 1263 1 3 1264 1 3 1265 1 3 1266 1 3 1267 1 3 1268 1 3 1269 1 3 1270 1 3 1271 1 3 1272 1 3 1273 1 3 1274 1 3 1275 1 3 1276 1 3 1277 1 3 1278 1 3 1279 1 3 1280 1 3 1281 1 3 1282 1 3 1283 1 3 1284 1 3 1285 1 3 1286 1 3 1287 1 3 1288 1 3 1289 1 3 1290 1 3 1291 1 3 1292 1 3 1293 1 3 1294 1 3 1295 1 3 1296 1 3 1297 1 3 1298 1 3 1299 1 3 1300 1 3 1301 1 3 1302 1 3 1303 1 3 1304 1 3 1305 1 3 1306 1 3 1307 1 3 1308 1 3 1309 1 3 1310 1 3 1311 1 3 1312 1 3 1313 1 3 1314 1 3 1315 1 3 1316 1 3 1317 1 3 1318 1 3 1319 1 3 1320 1 3 1321 1 3 1322 1 3 1323 1 3 1324 1 3 1325 1 3 1326 1 3 1327 1 3 1328 1 3 1329 1 3 1330 1 3 1331 1 3 1332 1 3 1333 1 3 1334 1 3 1335 1 3 1336 1 3 1337 1 3 1338 1 3 1339 1 3 1340 1 3 1341 1 3 1342 1 3 1343 1 3 1344 1 3 1345 1 3 1346 1 3 1347 1 3 1348 1 3 1349 1 3 1350 1 3 1351 1 3 1352 1 3 1353 1 3 1354 1 3 1355 1 3 1356 1 3 1357 1 3 1358 1 3 1359 1 3 1360 1 3 1361 1 3 1362 1 3 1363 1 3 1364 1 3 1365 1 3 1366 1 3 1367 1 3 1368 1 3 1369 1 3 1370 1 3 1371 1 3 1372 1 3 1373 1 3 1374 1 3 1375 1 3 1376 1 3 1377 1 3 1378 1 3 1379 1 3 1380 1 3 1381 1 3 1382 1 3 1383 1 3 1384 1 3 1385 1 3 1386 1 3 1387 1 3 1388 1 3 1389 1 3 1390 1 3 1391 1 3 1392 1 3 1393 1 3 1394 1 3 1395 1 3 1396 1 3 1397 1 3 1398 1 3 1399 1 3 1400 1 3 1401 1 3 1402 1 3 1403 1 3 1404 1 3 1405 1 3 1406 1 3 1407 1 3 1408 1 3 1409 1 3 1410 1 3 1411 1 3 1412 1 3 1413 1 3 1414 1 3 1415 1 3 1416 1 3 1417 1 3 1418 1 3 1419 1 3 1420 1 3 1421 1 3 1422 1 3 1423 1 3 1424 1 3 1425 1 3 1426 1 3 1427 1 3 1428 1 3 1429 1 3 1430 1 3 1431 1 3 1432 1 3 1433 1 3 1434 1 3 1435 1 3 1436 1 3 1437 1 3 1438 1 3 1439 1 3 1440 1 3 1441 1 3 1442 1 3 1443 1 3 1444 1 3 1445 1 3 1446 1 3 1447 1 3 1448 1 3 1449 1 3 1450 1 3 1451 1 3 1452 1 3 1453 1 3 1454 1 3 1455 1 3 1456 1 3 1457 1 3 1458 1 3 1459 1 3 1460 1 3 1461 1 3 1462 1 3 1463 1 3 1464 1 3 1465 1 3 1466 1 3 1467 1 3 1468 1 3 1469 1 3 1470 1 3 1471 1 3 1472 1 3 1473 1 3 1474 1 3 1475 1 3 1476 1 3 1477 1 3 1478 1 3 1479 1 3 1480 1 3 1481 1 3 1482 1 3 1483 1 3 1484 1 3 1485 1 3 1486 1 3 1487 1 3 1488 1 3 1489 1 3 1490 1 3 1491 1 3 1492 1 3 1493 1 3 1494 1 3 1495 1 3 1496 1 3 1497 1 3 1498 1 3 1499 1 3 1500 1 3 1501 1 3 1502 1 3 1503 1 3 1504 1 3 1505 1 3 1506 1 4 1 1 4 2 1 4 3 1 4 4 1 4 5 1 4 6 1 4 7 1 4 8 1 4 9 1 4 10 1 4 11 1 4 12 1 4 13 1 4 14 1 4 15 1 4 16 1 4 17 1 4 18 1 4 19 1 4 20 1 4 21 1 4 22 1 4 23 1 4 24 1 4 25 1 4 26 1 4 27 1 4 28 1 4 29 1 4 30 1 4 31 1 4 32 1 4 33 1 4 34 1 4 35 1 4 36 1 4 121 1 4 122 1 4 123 1 4 124 1 4 125 1 4 126 1 4 127 1 4 128 1 4 129 1 4 130 1 4 131 1 4 132 1 4 133 1 4 134 1 4 135 1 4 136 1 4 137 1 4 138 1 4 139 1 4 140 1 4 141 1 4 142 1 4 143 1 4 144 1 4 145 1 4 146 1 4 147 1 4 148 1 4 149 1 4 150 1 4 151 1 4 152 1 4 153 1 4 154 1 4 155 1 4 156 1 4 157 1 4 158 1 4 159 1 4 160 1 4 161 1 4 162 1 4 163 1 4 164 1 4 165 1 4 166 1 4 167 1 4 168 1 4 169 1 4 170 1 4 171 1 4 172 1 4 173 1 4 174 1 4 175 1 4 176 1 4 177 1 4 178 1 4 179 1 4 180 1 4 181 1 4 182 1 4 183 1 4 184 1 4 185 1 4 186 1 4 187 1 4 188 1 4 189 1 4 190 1 4 191 1 4 192 1 4 193 1 4 194 1 4 195 1 4 196 1 4 197 1 4 198 1 4 199 1 4 200 1 4 201 1 4 202 1 4 203 1 4 204 1 4 331 1 4 332 1 4 333 1 4 334 1 4 335 1 4 336 1 4 337 1 4 338 1 4 339 1 4 340 1 4 341 1 4 342 1 4 343 1 4 344 1 4 345 1 4 346 1 4 347 1 4 348 1 4 349 1 4 350 1 4 351 1 4 352 1 4 353 1 4 354 1 4 355 1 4 356 1 4 357 1 4 358 1 4 359 1 4 360 1 4 361 1 4 362 1 4 363 1 4 364 1 4 365 1 4 366 1 4 367 1 4 368 1 4 369 1 4 370 1 4 371 1 4 372 1 4 373 1 4 374 1 4 375 1 4 376 1 4 377 1 4 378 1 4 379 1 4 380 1 4 381 1 4 382 1 4 383 1 4 384 1 4 385 1 4 386 1 4 387 1 4 388 1 4 389 1 4 390 1 4 391 1 4 392 1 4 393 1 4 394 1 4 395 1 4 396 1 4 397 1 4 398 1 4 399 1 4 400 1 4 401 1 4 402 1 4 403 1 4 404 1 4 405 1 4 406 1 4 407 1 4 408 1 4 409 1 4 410 1 4 411 1 4 412 1 4 413 1 4 414 1 4 541 1 4 542 1 4 543 1 4 544 1 4 545 1 4 546 1 4 547 1 4 548 1 4 549 1 4 550 1 4 551 1 4 552 1 4 553 1 4 554 1 4 555 1 4 556 1 4 557 1 4 558 1 4 559 1 4 560 1 4 561 1 4 562 1 4 563 1 4 564 1 4 565 1 4 566 1 4 567 1 4 568 1 4 569 1 4 570 1 4 571 1 4 572 1 4 573 1 4 574 1 4 575 1 4 576 1 4 577 1 4 578 1 4 579 1 4 580 1 4 581 1 4 582 1 4 583 1 4 584 1 4 585 1 4 586 1 4 587 1 4 588 1 4 589 1 4 590 1 4 591 1 4 592 1 4 593 1 4 594 1 4 595 1 4 596 1 4 597 1 4 598 1 4 599 1 4 600 1 4 601 1 4 602 1 4 603 1 4 604 1 4 605 1 4 606 1 4 607 1 4 608 1 4 609 1 4 610 1 4 611 1 4 612 1 4 613 1 4 614 1 4 615 1 4 616 1 4 617 1 4 618 1 4 619 1 4 620 1 4 621 1 4 622 1 4 623 1 4 624 1 4 625 1 4 626 1 4 627 1 4 628 1 4 629 1 4 630 1 4 631 1 4 632 1 4 633 1 4 634 1 4 635 1 4 636 1 4 637 1 4 638 1 4 639 1 4 640 1 4 641 1 4 642 1 4 643 1 4 644 1 4 645 1 4 646 1 4 647 1 4 648 1 4 649 1 4 650 1 4 651 1 4 652 1 4 653 1 4 654 1 4 655 1 4 656 1 4 657 1 4 658 1 4 659 1 4 660 1 4 661 1 4 662 1 4 663 1 4 664 1 4 665 1 4 666 1 4 793 1 4 794 1 4 795 1 4 796 1 4 797 1 4 798 1 4 799 1 4 800 1 4 801 1 4 802 1 4 803 1 4 804 1 4 805 1 4 806 1 4 807 1 4 808 1 4 809 1 4 810 1 4 811 1 4 812 1 4 813 1 4 814 1 4 815 1 4 816 1 4 817 1 4 818 1 4 819 1 4 820 1 4 821 1 4 822 1 4 823 1 4 824 1 4 825 1 4 826 1 4 827 1 4 828 1 4 829 1 4 830 1 4 831 1 4 832 1 4 833 1 4 834 1 4 835 1 4 836 1 4 837 1 4 838 1 4 839 1 4 840 1 4 841 1 4 842 1 4 843 1 4 844 1 4 845 1 4 846 1 4 847 1 4 848 1 4 849 1 4 850 1 4 851 1 4 852 1 4 853 1 4 854 1 4 855 1 4 856 1 4 857 1 4 858 1 4 859 1 4 860 1 4 861 1 4 862 1 4 863 1 4 864 1 4 865 1 4 866 1 4 867 1 4 868 1 4 869 1 4 870 1 4 871 1 4 872 1 4 873 1 4 874 1 4 875 1 4 876 1 4 1003 1 4 1004 1 4 1005 1 4 1006 1 4 1007 1 4 1008 1 4 1009 1 4 1010 1 4 1011 1 4 1012 1 4 1013 1 4 1014 1 4 1015 1 4 1016 1 4 1017 1 4 1018 1 4 1019 1 4 1020 1 4 1021 1 4 1022 1 4 1023 1 4 1024 1 4 1025 1 4 1026 1 4 1027 1 4 1028 1 4 1029 1 4 1030 1 4 1031 1 4 1032 1 4 1033 1 4 1034 1 4 1035 1 4 1036 1 4 1037 1 4 1038 1 4 1039 1 4 1040 1 4 1041 1 4 1042 1 4 1043 1 4 1044 1 4 1045 1 4 1046 1 4 1047 1 4 1048 1 4 1049 1 4 1050 1 4 1051 1 4 1052 1 4 1053 1 4 1054 1 4 1055 1 4 1056 1 4 1057 1 4 1058 1 4 1059 1 4 1060 1 4 1061 1 4 1062 1 4 1063 1 4 1064 1 4 1065 1 4 1066 1 4 1067 1 4 1068 1 4 1069 1 4 1070 1 4 1071 1 4 1072 1 4 1073 1 4 1074 1 4 1075 1 4 1076 1 4 1077 1 4 1078 1 4 1079 1 4 1080 1 4 1081 1 4 1082 1 4 1083 1 4 1084 1 4 1085 1 4 1086 1 4 1087 1 4 1088 1 4 1089 1 4 1090 1 4 1091 1 4 1092 1 4 1093 1 4 1094 1 4 1095 1 4 1096 1 4 1097 1 4 1098 1 4 1099 1 4 1100 1 4 1101 1 4 1102 1 4 1103 1 4 1104 1 4 1105 1 4 1106 1 4 1107 1 4 1108 1 4 1109 1 4 1110 1 4 1111 1 4 1112 1 4 1113 1 4 1114 1 4 1115 1 4 1116 1 4 1117 1 4 1118 1 4 1119 1 4 1120 1 4 1121 1 4 1122 1 4 1123 1 4 1124 1 4 1125 1 4 1126 1 4 1127 1 4 1128 1 4 1255 1 4 1256 1 4 1257 1 4 1258 1 4 1259 1 4 1260 1 4 1261 1 4 1262 1 4 1263 1 4 1264 1 4 1265 1 4 1266 1 4 1267 1 4 1268 1 4 1269 1 4 1270 1 4 1271 1 4 1272 1 4 1273 1 4 1274 1 4 1275 1 4 1276 1 4 1277 1 4 1278 1 4 1279 1 4 1280 1 4 1281 1 4 1282 1 4 1283 1 4 1284 1 4 1285 1 4 1286 1 4 1287 1 4 1288 1 4 1289 1 4 1290 1 4 1291 1 4 1292 1 4 1293 1 4 1294 1 4 1295 1 4 1296 1 4 1297 1 4 1298 1 4 1299 1 4 1300 1 4 1301 1 4 1302 1 4 1303 1 4 1304 1 4 1305 1 4 1306 1 4 1307 1 4 1308 1 4 1309 1 4 1310 1 4 1311 1 4 1312 1 4 1313 1 4 1314 1 4 1315 1 4 1316 1 4 1317 1 4 1318 1 4 1319 1 4 1320 1 4 1321 1 4 1322 1 4 1323 1 4 1324 1 4 1325 1 4 1326 1 4 1327 1 4 1328 1 4 1329 1 4 1330 1 4 1331 1 4 1332 1 4 1333 1 4 1334 1 4 1335 1 4 1336 1 4 1337 1 4 1338 1 4 1339 1 4 1340 1 4 1341 1 4 1342 1 4 1343 1 4 1344 1 4 1345 1 4 1346 1 4 1347 1 4 1348 1 4 1349 1 4 1350 1 4 1351 1 4 1352 1 4 1353 1 4 1354 1 4 1355 1 4 1356 1 4 1357 1 4 1358 1 4 1359 1 4 1360 1 4 1361 1 4 1362 1 4 1363 1 4 1364 1 4 1365 1 4 1366 1 4 1367 1 4 1368 1 4 1369 1 4 1370 1 4 1371 1 4 1372 1 4 1373 1 4 1374 1 4 1375 1 4 1376 1 4 1377 1 4 1378 1 4 1379 1 4 1380 1 4 1507 1 4 1508 1 4 1509 1 4 1510 1 4 1511 1 4 1512 1 4 1513 1 4 1514 1 4 1515 1 4 1516 1 4 1517 1 4 1518 1 4 1519 1 4 1520 1 4 1521 1 4 1522 1 4 1523 1 4 1524 1 4 1525 1 4 1526 1 4 1527 1 4 1528 1 4 1529 1 4 1530 1 4 1531 1 4 1532 1 4 1533 1 4 1534 1 4 1535 1 4 1536 1 4 1537 1 4 1538 1 4 1539 1 4 1540 1 4 1541 1 4 1542 1 4 1543 1 4 1544 1 4 1545 1 4 1546 1 4 1547 1 4 1548 1 4 1549 1 4 1550 1 4 1551 1 4 1552 1 4 1553 1 4 1554 1 4 1555 1 4 1556 1 4 1557 1 4 1558 1 4 1559 1 4 1560 1 4 1561 1 4 1562 1 4 1563 1 4 1564 1 4 1565 1 4 1566 1 4 1567 1 4 1568 1 4 1569 1 4 1570 1 4 1571 1 4 1572 1 4 1573 1 4 1574 1 4 1575 1 4 1576 1 4 1577 1 4 1578 1 4 1579 1 4 1580 1 4 1581 1 4 1582 1 4 1583 1 4 1584 1 4 1585 1 4 1586 1 4 1587 1 4 1588 1 4 1589 1 4 1590 1 4 1591 1 4 1592 1 4 1593 1 4 1594 1 4 1595 1 4 1596 1 4 1597 1 4 1598 1 4 1599 1 4 1600 1 4 1601 1 4 1602 1 4 1603 1 4 1604 1 4 1605 1 4 1606 1 4 1607 1 4 1608 1 4 1609 1 4 1610 1 4 1611 1 4 1612 1 4 1613 1 4 1614 1 4 1615 1 4 1616 1 4 1617 1 4 1618 1 4 1619 1 4 1620 1 4 1621 1 4 1622 1 4 1623 1 4 1624 1 4 1625 1 4 1626 1 4 1627 1 4 1628 1 4 1629 1 4 1630 1 4 1631 1 4 1632 1 5 1 1 5 2 1 5 3 1 5 4 1 5 5 1 5 6 1 5 7 1 5 8 1 5 37 1 5 38 1 5 39 1 5 40 1 5 41 1 5 42 1 5 43 1 5 44 1 5 45 1 5 46 1 5 47 1 5 48 1 5 49 1 5 50 1 5 51 1 5 52 1 5 53 1 5 54 1 5 55 1 5 56 1 5 57 1 5 58 1 5 59 1 5 60 1 5 61 1 5 62 1 5 63 1 5 64 1 5 121 1 5 122 1 5 123 1 5 124 1 5 125 1 5 126 1 5 127 1 5 128 1 5 129 1 5 130 1 5 131 1 5 132 1 5 133 1 5 134 1 5 135 1 5 136 1 5 137 1 5 138 1 5 139 1 5 140 1 5 141 1 5 142 1 5 143 1 5 144 1 5 145 1 5 146 1 5 147 1 5 148 1 5 205 1 5 206 1 5 207 1 5 208 1 5 209 1 5 210 1 5 211 1 5 212 1 5 213 1 5 214 1 5 215 1 5 216 1 5 217 1 5 218 1 5 219 1 5 220 1 5 221 1 5 222 1 5 223 1 5 224 1 5 225 1 5 226 1 5 227 1 5 228 1 5 229 1 5 230 1 5 231 1 5 232 1 5 233 1 5 234 1 5 235 1 5 236 1 5 237 1 5 238 1 5 239 1 5 240 1 5 241 1 5 242 1 5 243 1 5 244 1 5 245 1 5 246 1 5 247 1 5 248 1 5 249 1 5 250 1 5 251 1 5 252 1 5 253 1 5 254 1 5 255 1 5 256 1 5 257 1 5 258 1 5 259 1 5 260 1 5 331 1 5 332 1 5 333 1 5 334 1 5 335 1 5 336 1 5 337 1 5 338 1 5 339 1 5 340 1 5 341 1 5 342 1 5 343 1 5 344 1 5 345 1 5 346 1 5 347 1 5 348 1 5 349 1 5 350 1 5 351 1 5 352 1 5 353 1 5 354 1 5 355 1 5 356 1 5 357 1 5 358 1 5 415 1 5 416 1 5 417 1 5 418 1 5 419 1 5 420 1 5 421 1 5 422 1 5 423 1 5 424 1 5 425 1 5 426 1 5 427 1 5 428 1 5 429 1 5 430 1 5 431 1 5 432 1 5 433 1 5 434 1 5 435 1 5 436 1 5 437 1 5 438 1 5 439 1 5 440 1 5 441 1 5 442 1 5 443 1 5 444 1 5 445 1 5 446 1 5 447 1 5 448 1 5 449 1 5 450 1 5 451 1 5 452 1 5 453 1 5 454 1 5 455 1 5 456 1 5 457 1 5 458 1 5 459 1 5 460 1 5 461 1 5 462 1 5 463 1 5 464 1 5 465 1 5 466 1 5 467 1 5 468 1 5 469 1 5 470 1 5 541 1 5 542 1 5 543 1 5 544 1 5 545 1 5 546 1 5 547 1 5 548 1 5 549 1 5 550 1 5 551 1 5 552 1 5 553 1 5 554 1 5 555 1 5 556 1 5 557 1 5 558 1 5 559 1 5 560 1 5 561 1 5 562 1 5 563 1 5 564 1 5 565 1 5 566 1 5 567 1 5 568 1 5 569 1 5 570 1 5 571 1 5 572 1 5 573 1 5 574 1 5 575 1 5 576 1 5 577 1 5 578 1 5 579 1 5 580 1 5 581 1 5 582 1 5 583 1 5 584 1 5 585 1 5 586 1 5 587 1 5 588 1 5 589 1 5 590 1 5 591 1 5 592 1 5 593 1 5 594 1 5 595 1 5 596 1 5 667 1 5 668 1 5 669 1 5 670 1 5 671 1 5 672 1 5 673 1 5 674 1 5 675 1 5 676 1 5 677 1 5 678 1 5 679 1 5 680 1 5 681 1 5 682 1 5 683 1 5 684 1 5 685 1 5 686 1 5 687 1 5 688 1 5 689 1 5 690 1 5 691 1 5 692 1 5 693 1 5 694 1 5 695 1 5 696 1 5 697 1 5 698 1 5 699 1 5 700 1 5 701 1 5 702 1 5 703 1 5 704 1 5 705 1 5 706 1 5 707 1 5 708 1 5 709 1 5 710 1 5 711 1 5 712 1 5 713 1 5 714 1 5 715 1 5 716 1 5 717 1 5 718 1 5 719 1 5 720 1 5 721 1 5 722 1 5 723 1 5 724 1 5 725 1 5 726 1 5 727 1 5 728 1 5 729 1 5 730 1 5 731 1 5 732 1 5 733 1 5 734 1 5 735 1 5 736 1 5 793 1 5 794 1 5 795 1 5 796 1 5 797 1 5 798 1 5 799 1 5 800 1 5 801 1 5 802 1 5 803 1 5 804 1 5 805 1 5 806 1 5 807 1 5 808 1 5 809 1 5 810 1 5 811 1 5 812 1 5 813 1 5 814 1 5 815 1 5 816 1 5 817 1 5 818 1 5 819 1 5 820 1 5 877 1 5 878 1 5 879 1 5 880 1 5 881 1 5 882 1 5 883 1 5 884 1 5 885 1 5 886 1 5 887 1 5 888 1 5 889 1 5 890 1 5 891 1 5 892 1 5 893 1 5 894 1 5 895 1 5 896 1 5 897 1 5 898 1 5 899 1 5 900 1 5 901 1 5 902 1 5 903 1 5 904 1 5 905 1 5 906 1 5 907 1 5 908 1 5 909 1 5 910 1 5 911 1 5 912 1 5 913 1 5 914 1 5 915 1 5 916 1 5 917 1 5 918 1 5 919 1 5 920 1 5 921 1 5 922 1 5 923 1 5 924 1 5 925 1 5 926 1 5 927 1 5 928 1 5 929 1 5 930 1 5 931 1 5 932 1 5 1003 1 5 1004 1 5 1005 1 5 1006 1 5 1007 1 5 1008 1 5 1009 1 5 1010 1 5 1011 1 5 1012 1 5 1013 1 5 1014 1 5 1015 1 5 1016 1 5 1017 1 5 1018 1 5 1019 1 5 1020 1 5 1021 1 5 1022 1 5 1023 1 5 1024 1 5 1025 1 5 1026 1 5 1027 1 5 1028 1 5 1029 1 5 1030 1 5 1031 1 5 1032 1 5 1033 1 5 1034 1 5 1035 1 5 1036 1 5 1037 1 5 1038 1 5 1039 1 5 1040 1 5 1041 1 5 1042 1 5 1043 1 5 1044 1 5 1045 1 5 1046 1 5 1047 1 5 1048 1 5 1049 1 5 1050 1 5 1051 1 5 1052 1 5 1053 1 5 1054 1 5 1055 1 5 1056 1 5 1057 1 5 1058 1 5 1129 1 5 1130 1 5 1131 1 5 1132 1 5 1133 1 5 1134 1 5 1135 1 5 1136 1 5 1137 1 5 1138 1 5 1139 1 5 1140 1 5 1141 1 5 1142 1 5 1143 1 5 1144 1 5 1145 1 5 1146 1 5 1147 1 5 1148 1 5 1149 1 5 1150 1 5 1151 1 5 1152 1 5 1153 1 5 1154 1 5 1155 1 5 1156 1 5 1157 1 5 1158 1 5 1159 1 5 1160 1 5 1161 1 5 1162 1 5 1163 1 5 1164 1 5 1165 1 5 1166 1 5 1167 1 5 1168 1 5 1169 1 5 1170 1 5 1171 1 5 1172 1 5 1173 1 5 1174 1 5 1175 1 5 1176 1 5 1177 1 5 1178 1 5 1179 1 5 1180 1 5 1181 1 5 1182 1 5 1183 1 5 1184 1 5 1185 1 5 1186 1 5 1187 1 5 1188 1 5 1189 1 5 1190 1 5 1191 1 5 1192 1 5 1193 1 5 1194 1 5 1195 1 5 1196 1 5 1197 1 5 1198 1 5 1255 1 5 1256 1 5 1257 1 5 1258 1 5 1259 1 5 1260 1 5 1261 1 5 1262 1 5 1263 1 5 1264 1 5 1265 1 5 1266 1 5 1267 1 5 1268 1 5 1269 1 5 1270 1 5 1271 1 5 1272 1 5 1273 1 5 1274 1 5 1275 1 5 1276 1 5 1277 1 5 1278 1 5 1279 1 5 1280 1 5 1281 1 5 1282 1 5 1283 1 5 1284 1 5 1285 1 5 1286 1 5 1287 1 5 1288 1 5 1289 1 5 1290 1 5 1291 1 5 1292 1 5 1293 1 5 1294 1 5 1295 1 5 1296 1 5 1297 1 5 1298 1 5 1299 1 5 1300 1 5 1301 1 5 1302 1 5 1303 1 5 1304 1 5 1305 1 5 1306 1 5 1307 1 5 1308 1 5 1309 1 5 1310 1 5 1381 1 5 1382 1 5 1383 1 5 1384 1 5 1385 1 5 1386 1 5 1387 1 5 1388 1 5 1389 1 5 1390 1 5 1391 1 5 1392 1 5 1393 1 5 1394 1 5 1395 1 5 1396 1 5 1397 1 5 1398 1 5 1399 1 5 1400 1 5 1401 1 5 1402 1 5 1403 1 5 1404 1 5 1405 1 5 1406 1 5 1407 1 5 1408 1 5 1409 1 5 1410 1 5 1411 1 5 1412 1 5 1413 1 5 1414 1 5 1415 1 5 1416 1 5 1417 1 5 1418 1 5 1419 1 5 1420 1 5 1421 1 5 1422 1 5 1423 1 5 1424 1 5 1425 1 5 1426 1 5 1427 1 5 1428 1 5 1429 1 5 1430 1 5 1431 1 5 1432 1 5 1433 1 5 1434 1 5 1435 1 5 1436 1 5 1437 1 5 1438 1 5 1439 1 5 1440 1 5 1441 1 5 1442 1 5 1443 1 5 1444 1 5 1445 1 5 1446 1 5 1447 1 5 1448 1 5 1449 1 5 1450 1 5 1507 1 5 1508 1 5 1509 1 5 1510 1 5 1511 1 5 1512 1 5 1513 1 5 1514 1 5 1515 1 5 1516 1 5 1517 1 5 1518 1 5 1519 1 5 1520 1 5 1521 1 5 1522 1 5 1523 1 5 1524 1 5 1525 1 5 1526 1 5 1527 1 5 1528 1 5 1529 1 5 1530 1 5 1531 1 5 1532 1 5 1533 1 5 1534 1 5 1535 1 5 1536 1 5 1537 1 5 1538 1 5 1539 1 5 1540 1 5 1541 1 5 1542 1 5 1543 1 5 1544 1 5 1545 1 5 1546 1 5 1547 1 5 1548 1 5 1549 1 5 1550 1 5 1551 1 5 1552 1 5 1553 1 5 1554 1 5 1555 1 5 1556 1 5 1557 1 5 1558 1 5 1559 1 5 1560 1 5 1561 1 5 1562 1 5 1563 1 5 1564 1 5 1565 1 5 1566 1 5 1567 1 5 1568 1 5 1569 1 5 1570 1 5 1571 1 5 1572 1 5 1573 1 5 1574 1 5 1575 1 5 1576 1 5 1633 1 5 1634 1 5 1635 1 5 1636 1 5 1637 1 5 1638 1 5 1639 1 5 1640 1 5 1641 1 5 1642 1 5 1643 1 5 1644 1 5 1645 1 5 1646 1 5 1647 1 5 1648 1 5 1649 1 5 1650 1 5 1651 1 5 1652 1 5 1653 1 5 1654 1 5 1655 1 5 1656 1 5 1657 1 5 1658 1 5 1659 1 5 1660 1 5 1661 1 5 1662 1 5 1663 1 5 1664 1 5 1665 1 5 1666 1 5 1667 1 5 1668 1 5 1669 1 5 1670 1 5 1671 1 5 1672 1 5 1673 1 5 1674 1 5 1675 1 5 1676 1 5 1677 1 5 1678 1 5 1679 1 5 1680 1 5 1681 1 5 1682 1 5 1683 1 5 1684 1 5 1685 1 5 1686 1 5 1687 1 5 1688 1 6 1 1 6 9 1 6 10 1 6 11 1 6 12 1 6 13 1 6 14 1 6 15 1 6 37 1 6 38 1 6 39 1 6 40 1 6 41 1 6 42 1 6 43 1 6 65 1 6 66 1 6 67 1 6 68 1 6 69 1 6 70 1 6 71 1 6 72 1 6 73 1 6 74 1 6 75 1 6 76 1 6 77 1 6 78 1 6 79 1 6 80 1 6 81 1 6 82 1 6 83 1 6 84 1 6 85 1 6 121 1 6 122 1 6 123 1 6 124 1 6 125 1 6 126 1 6 127 1 6 149 1 6 150 1 6 151 1 6 152 1 6 153 1 6 154 1 6 155 1 6 156 1 6 157 1 6 158 1 6 159 1 6 160 1 6 161 1 6 162 1 6 163 1 6 164 1 6 165 1 6 166 1 6 167 1 6 168 1 6 169 1 6 205 1 6 206 1 6 207 1 6 208 1 6 209 1 6 210 1 6 211 1 6 212 1 6 213 1 6 214 1 6 215 1 6 216 1 6 217 1 6 218 1 6 219 1 6 220 1 6 221 1 6 222 1 6 223 1 6 224 1 6 225 1 6 261 1 6 262 1 6 263 1 6 264 1 6 265 1 6 266 1 6 267 1 6 268 1 6 269 1 6 270 1 6 271 1 6 272 1 6 273 1 6 274 1 6 275 1 6 276 1 6 277 1 6 278 1 6 279 1 6 280 1 6 281 1 6 282 1 6 283 1 6 284 1 6 285 1 6 286 1 6 287 1 6 288 1 6 289 1 6 290 1 6 291 1 6 292 1 6 293 1 6 294 1 6 295 1 6 331 1 6 332 1 6 333 1 6 334 1 6 335 1 6 336 1 6 337 1 6 359 1 6 360 1 6 361 1 6 362 1 6 363 1 6 364 1 6 365 1 6 366 1 6 367 1 6 368 1 6 369 1 6 370 1 6 371 1 6 372 1 6 373 1 6 374 1 6 375 1 6 376 1 6 377 1 6 378 1 6 379 1 6 415 1 6 416 1 6 417 1 6 418 1 6 419 1 6 420 1 6 421 1 6 422 1 6 423 1 6 424 1 6 425 1 6 426 1 6 427 1 6 428 1 6 429 1 6 430 1 6 431 1 6 432 1 6 433 1 6 434 1 6 435 1 6 471 1 6 472 1 6 473 1 6 474 1 6 475 1 6 476 1 6 477 1 6 478 1 6 479 1 6 480 1 6 481 1 6 482 1 6 483 1 6 484 1 6 485 1 6 486 1 6 487 1 6 488 1 6 489 1 6 490 1 6 491 1 6 492 1 6 493 1 6 494 1 6 495 1 6 496 1 6 497 1 6 498 1 6 499 1 6 500 1 6 501 1 6 502 1 6 503 1 6 504 1 6 505 1 6 541 1 6 542 1 6 543 1 6 544 1 6 545 1 6 546 1 6 547 1 6 548 1 6 549 1 6 550 1 6 551 1 6 552 1 6 553 1 6 554 1 6 555 1 6 556 1 6 557 1 6 558 1 6 559 1 6 560 1 6 561 1 6 597 1 6 598 1 6 599 1 6 600 1 6 601 1 6 602 1 6 603 1 6 604 1 6 605 1 6 606 1 6 607 1 6 608 1 6 609 1 6 610 1 6 611 1 6 612 1 6 613 1 6 614 1 6 615 1 6 616 1 6 617 1 6 618 1 6 619 1 6 620 1 6 621 1 6 622 1 6 623 1 6 624 1 6 625 1 6 626 1 6 627 1 6 628 1 6 629 1 6 630 1 6 631 1 6 667 1 6 668 1 6 669 1 6 670 1 6 671 1 6 672 1 6 673 1 6 674 1 6 675 1 6 676 1 6 677 1 6 678 1 6 679 1 6 680 1 6 681 1 6 682 1 6 683 1 6 684 1 6 685 1 6 686 1 6 687 1 6 688 1 6 689 1 6 690 1 6 691 1 6 692 1 6 693 1 6 694 1 6 695 1 6 696 1 6 697 1 6 698 1 6 699 1 6 700 1 6 701 1 6 737 1 6 738 1 6 739 1 6 740 1 6 741 1 6 742 1 6 743 1 6 744 1 6 745 1 6 746 1 6 747 1 6 748 1 6 749 1 6 750 1 6 751 1 6 752 1 6 753 1 6 754 1 6 755 1 6 756 1 6 757 1 6 758 1 6 759 1 6 760 1 6 761 1 6 762 1 6 763 1 6 764 1 6 765 1 6 766 1 6 767 1 6 768 1 6 769 1 6 770 1 6 771 1 6 793 1 6 794 1 6 795 1 6 796 1 6 797 1 6 798 1 6 799 1 6 821 1 6 822 1 6 823 1 6 824 1 6 825 1 6 826 1 6 827 1 6 828 1 6 829 1 6 830 1 6 831 1 6 832 1 6 833 1 6 834 1 6 835 1 6 836 1 6 837 1 6 838 1 6 839 1 6 840 1 6 841 1 6 877 1 6 878 1 6 879 1 6 880 1 6 881 1 6 882 1 6 883 1 6 884 1 6 885 1 6 886 1 6 887 1 6 888 1 6 889 1 6 890 1 6 891 1 6 892 1 6 893 1 6 894 1 6 895 1 6 896 1 6 897 1 6 933 1 6 934 1 6 935 1 6 936 1 6 937 1 6 938 1 6 939 1 6 940 1 6 941 1 6 942 1 6 943 1 6 944 1 6 945 1 6 946 1 6 947 1 6 948 1 6 949 1 6 950 1 6 951 1 6 952 1 6 953 1 6 954 1 6 955 1 6 956 1 6 957 1 6 958 1 6 959 1 6 960 1 6 961 1 6 962 1 6 963 1 6 964 1 6 965 1 6 966 1 6 967 1 6 1003 1 6 1004 1 6 1005 1 6 1006 1 6 1007 1 6 1008 1 6 1009 1 6 1010 1 6 1011 1 6 1012 1 6 1013 1 6 1014 1 6 1015 1 6 1016 1 6 1017 1 6 1018 1 6 1019 1 6 1020 1 6 1021 1 6 1022 1 6 1023 1 6 1059 1 6 1060 1 6 1061 1 6 1062 1 6 1063 1 6 1064 1 6 1065 1 6 1066 1 6 1067 1 6 1068 1 6 1069 1 6 1070 1 6 1071 1 6 1072 1 6 1073 1 6 1074 1 6 1075 1 6 1076 1 6 1077 1 6 1078 1 6 1079 1 6 1080 1 6 1081 1 6 1082 1 6 1083 1 6 1084 1 6 1085 1 6 1086 1 6 1087 1 6 1088 1 6 1089 1 6 1090 1 6 1091 1 6 1092 1 6 1093 1 6 1129 1 6 1130 1 6 1131 1 6 1132 1 6 1133 1 6 1134 1 6 1135 1 6 1136 1 6 1137 1 6 1138 1 6 1139 1 6 1140 1 6 1141 1 6 1142 1 6 1143 1 6 1144 1 6 1145 1 6 1146 1 6 1147 1 6 1148 1 6 1149 1 6 1150 1 6 1151 1 6 1152 1 6 1153 1 6 1154 1 6 1155 1 6 1156 1 6 1157 1 6 1158 1 6 1159 1 6 1160 1 6 1161 1 6 1162 1 6 1163 1 6 1199 1 6 1200 1 6 1201 1 6 1202 1 6 1203 1 6 1204 1 6 1205 1 6 1206 1 6 1207 1 6 1208 1 6 1209 1 6 1210 1 6 1211 1 6 1212 1 6 1213 1 6 1214 1 6 1215 1 6 1216 1 6 1217 1 6 1218 1 6 1219 1 6 1220 1 6 1221 1 6 1222 1 6 1223 1 6 1224 1 6 1225 1 6 1226 1 6 1227 1 6 1228 1 6 1229 1 6 1230 1 6 1231 1 6 1232 1 6 1233 1 6 1255 1 6 1256 1 6 1257 1 6 1258 1 6 1259 1 6 1260 1 6 1261 1 6 1262 1 6 1263 1 6 1264 1 6 1265 1 6 1266 1 6 1267 1 6 1268 1 6 1269 1 6 1270 1 6 1271 1 6 1272 1 6 1273 1 6 1274 1 6 1275 1 6 1311 1 6 1312 1 6 1313 1 6 1314 1 6 1315 1 6 1316 1 6 1317 1 6 1318 1 6 1319 1 6 1320 1 6 1321 1 6 1322 1 6 1323 1 6 1324 1 6 1325 1 6 1326 1 6 1327 1 6 1328 1 6 1329 1 6 1330 1 6 1331 1 6 1332 1 6 1333 1 6 1334 1 6 1335 1 6 1336 1 6 1337 1 6 1338 1 6 1339 1 6 1340 1 6 1341 1 6 1342 1 6 1343 1 6 1344 1 6 1345 1 6 1381 1 6 1382 1 6 1383 1 6 1384 1 6 1385 1 6 1386 1 6 1387 1 6 1388 1 6 1389 1 6 1390 1 6 1391 1 6 1392 1 6 1393 1 6 1394 1 6 1395 1 6 1396 1 6 1397 1 6 1398 1 6 1399 1 6 1400 1 6 1401 1 6 1402 1 6 1403 1 6 1404 1 6 1405 1 6 1406 1 6 1407 1 6 1408 1 6 1409 1 6 1410 1 6 1411 1 6 1412 1 6 1413 1 6 1414 1 6 1415 1 6 1451 1 6 1452 1 6 1453 1 6 1454 1 6 1455 1 6 1456 1 6 1457 1 6 1458 1 6 1459 1 6 1460 1 6 1461 1 6 1462 1 6 1463 1 6 1464 1 6 1465 1 6 1466 1 6 1467 1 6 1468 1 6 1469 1 6 1470 1 6 1471 1 6 1472 1 6 1473 1 6 1474 1 6 1475 1 6 1476 1 6 1477 1 6 1478 1 6 1479 1 6 1480 1 6 1481 1 6 1482 1 6 1483 1 6 1484 1 6 1485 1 6 1507 1 6 1508 1 6 1509 1 6 1510 1 6 1511 1 6 1512 1 6 1513 1 6 1514 1 6 1515 1 6 1516 1 6 1517 1 6 1518 1 6 1519 1 6 1520 1 6 1521 1 6 1522 1 6 1523 1 6 1524 1 6 1525 1 6 1526 1 6 1527 1 6 1528 1 6 1529 1 6 1530 1 6 1531 1 6 1532 1 6 1533 1 6 1534 1 6 1535 1 6 1536 1 6 1537 1 6 1538 1 6 1539 1 6 1540 1 6 1541 1 6 1577 1 6 1578 1 6 1579 1 6 1580 1 6 1581 1 6 1582 1 6 1583 1 6 1584 1 6 1585 1 6 1586 1 6 1587 1 6 1588 1 6 1589 1 6 1590 1 6 1591 1 6 1592 1 6 1593 1 6 1594 1 6 1595 1 6 1596 1 6 1597 1 6 1598 1 6 1599 1 6 1600 1 6 1601 1 6 1602 1 6 1603 1 6 1604 1 6 1605 1 6 1606 1 6 1607 1 6 1608 1 6 1609 1 6 1610 1 6 1611 1 6 1633 1 6 1634 1 6 1635 1 6 1636 1 6 1637 1 6 1638 1 6 1639 1 6 1640 1 6 1641 1 6 1642 1 6 1643 1 6 1644 1 6 1645 1 6 1646 1 6 1647 1 6 1648 1 6 1649 1 6 1650 1 6 1651 1 6 1652 1 6 1653 1 6 1654 1 6 1655 1 6 1656 1 6 1657 1 6 1658 1 6 1659 1 6 1660 1 6 1661 1 6 1662 1 6 1663 1 6 1664 1 6 1665 1 6 1666 1 6 1667 1 6 1689 1 6 1690 1 6 1691 1 6 1692 1 6 1693 1 6 1694 1 6 1695 1 6 1696 1 6 1697 1 6 1698 1 6 1699 1 6 1700 1 6 1701 1 6 1702 1 6 1703 1 6 1704 1 6 1705 1 6 1706 1 6 1707 1 6 1708 1 6 1709 1 7 2 1 7 9 1 7 16 1 7 17 1 7 18 1 7 19 1 7 20 1 7 21 1 7 37 1 7 44 1 7 45 1 7 46 1 7 47 1 7 48 1 7 49 1 7 65 1 7 66 1 7 67 1 7 68 1 7 69 1 7 70 1 7 86 1 7 87 1 7 88 1 7 89 1 7 90 1 7 91 1 7 92 1 7 93 1 7 94 1 7 95 1 7 96 1 7 97 1 7 98 1 7 99 1 7 100 1 7 121 1 7 128 1 7 129 1 7 130 1 7 131 1 7 132 1 7 133 1 7 149 1 7 150 1 7 151 1 7 152 1 7 153 1 7 154 1 7 170 1 7 171 1 7 172 1 7 173 1 7 174 1 7 175 1 7 176 1 7 177 1 7 178 1 7 179 1 7 180 1 7 181 1 7 182 1 7 183 1 7 184 1 7 205 1 7 206 1 7 207 1 7 208 1 7 209 1 7 210 1 7 226 1 7 227 1 7 228 1 7 229 1 7 230 1 7 231 1 7 232 1 7 233 1 7 234 1 7 235 1 7 236 1 7 237 1 7 238 1 7 239 1 7 240 1 7 261 1 7 262 1 7 263 1 7 264 1 7 265 1 7 266 1 7 267 1 7 268 1 7 269 1 7 270 1 7 271 1 7 272 1 7 273 1 7 274 1 7 275 1 7 296 1 7 297 1 7 298 1 7 299 1 7 300 1 7 301 1 7 302 1 7 303 1 7 304 1 7 305 1 7 306 1 7 307 1 7 308 1 7 309 1 7 310 1 7 311 1 7 312 1 7 313 1 7 314 1 7 315 1 7 331 1 7 338 1 7 339 1 7 340 1 7 341 1 7 342 1 7 343 1 7 359 1 7 360 1 7 361 1 7 362 1 7 363 1 7 364 1 7 380 1 7 381 1 7 382 1 7 383 1 7 384 1 7 385 1 7 386 1 7 387 1 7 388 1 7 389 1 7 390 1 7 391 1 7 392 1 7 393 1 7 394 1 7 415 1 7 416 1 7 417 1 7 418 1 7 419 1 7 420 1 7 436 1 7 437 1 7 438 1 7 439 1 7 440 1 7 441 1 7 442 1 7 443 1 7 444 1 7 445 1 7 446 1 7 447 1 7 448 1 7 449 1 7 450 1 7 471 1 7 472 1 7 473 1 7 474 1 7 475 1 7 476 1 7 477 1 7 478 1 7 479 1 7 480 1 7 481 1 7 482 1 7 483 1 7 484 1 7 485 1 7 506 1 7 507 1 7 508 1 7 509 1 7 510 1 7 511 1 7 512 1 7 513 1 7 514 1 7 515 1 7 516 1 7 517 1 7 518 1 7 519 1 7 520 1 7 521 1 7 522 1 7 523 1 7 524 1 7 525 1 7 541 1 7 542 1 7 543 1 7 544 1 7 545 1 7 546 1 7 562 1 7 563 1 7 564 1 7 565 1 7 566 1 7 567 1 7 568 1 7 569 1 7 570 1 7 571 1 7 572 1 7 573 1 7 574 1 7 575 1 7 576 1 7 597 1 7 598 1 7 599 1 7 600 1 7 601 1 7 602 1 7 603 1 7 604 1 7 605 1 7 606 1 7 607 1 7 608 1 7 609 1 7 610 1 7 611 1 7 632 1 7 633 1 7 634 1 7 635 1 7 636 1 7 637 1 7 638 1 7 639 1 7 640 1 7 641 1 7 642 1 7 643 1 7 644 1 7 645 1 7 646 1 7 647 1 7 648 1 7 649 1 7 650 1 7 651 1 7 667 1 7 668 1 7 669 1 7 670 1 7 671 1 7 672 1 7 673 1 7 674 1 7 675 1 7 676 1 7 677 1 7 678 1 7 679 1 7 680 1 7 681 1 7 702 1 7 703 1 7 704 1 7 705 1 7 706 1 7 707 1 7 708 1 7 709 1 7 710 1 7 711 1 7 712 1 7 713 1 7 714 1 7 715 1 7 716 1 7 717 1 7 718 1 7 719 1 7 720 1 7 721 1 7 737 1 7 738 1 7 739 1 7 740 1 7 741 1 7 742 1 7 743 1 7 744 1 7 745 1 7 746 1 7 747 1 7 748 1 7 749 1 7 750 1 7 751 1 7 752 1 7 753 1 7 754 1 7 755 1 7 756 1 7 772 1 7 773 1 7 774 1 7 775 1 7 776 1 7 777 1 7 778 1 7 779 1 7 780 1 7 781 1 7 782 1 7 783 1 7 784 1 7 785 1 7 786 1 7 793 1 7 800 1 7 801 1 7 802 1 7 803 1 7 804 1 7 805 1 7 821 1 7 822 1 7 823 1 7 824 1 7 825 1 7 826 1 7 842 1 7 843 1 7 844 1 7 845 1 7 846 1 7 847 1 7 848 1 7 849 1 7 850 1 7 851 1 7 852 1 7 853 1 7 854 1 7 855 1 7 856 1 7 877 1 7 878 1 7 879 1 7 880 1 7 881 1 7 882 1 7 898 1 7 899 1 7 900 1 7 901 1 7 902 1 7 903 1 7 904 1 7 905 1 7 906 1 7 907 1 7 908 1 7 909 1 7 910 1 7 911 1 7 912 1 7 933 1 7 934 1 7 935 1 7 936 1 7 937 1 7 938 1 7 939 1 7 940 1 7 941 1 7 942 1 7 943 1 7 944 1 7 945 1 7 946 1 7 947 1 7 968 1 7 969 1 7 970 1 7 971 1 7 972 1 7 973 1 7 974 1 7 975 1 7 976 1 7 977 1 7 978 1 7 979 1 7 980 1 7 981 1 7 982 1 7 983 1 7 984 1 7 985 1 7 986 1 7 987 1 7 1003 1 7 1004 1 7 1005 1 7 1006 1 7 1007 1 7 1008 1 7 1024 1 7 1025 1 7 1026 1 7 1027 1 7 1028 1 7 1029 1 7 1030 1 7 1031 1 7 1032 1 7 1033 1 7 1034 1 7 1035 1 7 1036 1 7 1037 1 7 1038 1 7 1059 1 7 1060 1 7 1061 1 7 1062 1 7 1063 1 7 1064 1 7 1065 1 7 1066 1 7 1067 1 7 1068 1 7 1069 1 7 1070 1 7 1071 1 7 1072 1 7 1073 1 7 1094 1 7 1095 1 7 1096 1 7 1097 1 7 1098 1 7 1099 1 7 1100 1 7 1101 1 7 1102 1 7 1103 1 7 1104 1 7 1105 1 7 1106 1 7 1107 1 7 1108 1 7 1109 1 7 1110 1 7 1111 1 7 1112 1 7 1113 1 7 1129 1 7 1130 1 7 1131 1 7 1132 1 7 1133 1 7 1134 1 7 1135 1 7 1136 1 7 1137 1 7 1138 1 7 1139 1 7 1140 1 7 1141 1 7 1142 1 7 1143 1 7 1164 1 7 1165 1 7 1166 1 7 1167 1 7 1168 1 7 1169 1 7 1170 1 7 1171 1 7 1172 1 7 1173 1 7 1174 1 7 1175 1 7 1176 1 7 1177 1 7 1178 1 7 1179 1 7 1180 1 7 1181 1 7 1182 1 7 1183 1 7 1199 1 7 1200 1 7 1201 1 7 1202 1 7 1203 1 7 1204 1 7 1205 1 7 1206 1 7 1207 1 7 1208 1 7 1209 1 7 1210 1 7 1211 1 7 1212 1 7 1213 1 7 1214 1 7 1215 1 7 1216 1 7 1217 1 7 1218 1 7 1234 1 7 1235 1 7 1236 1 7 1237 1 7 1238 1 7 1239 1 7 1240 1 7 1241 1 7 1242 1 7 1243 1 7 1244 1 7 1245 1 7 1246 1 7 1247 1 7 1248 1 7 1255 1 7 1256 1 7 1257 1 7 1258 1 7 1259 1 7 1260 1 7 1276 1 7 1277 1 7 1278 1 7 1279 1 7 1280 1 7 1281 1 7 1282 1 7 1283 1 7 1284 1 7 1285 1 7 1286 1 7 1287 1 7 1288 1 7 1289 1 7 1290 1 7 1311 1 7 1312 1 7 1313 1 7 1314 1 7 1315 1 7 1316 1 7 1317 1 7 1318 1 7 1319 1 7 1320 1 7 1321 1 7 1322 1 7 1323 1 7 1324 1 7 1325 1 7 1346 1 7 1347 1 7 1348 1 7 1349 1 7 1350 1 7 1351 1 7 1352 1 7 1353 1 7 1354 1 7 1355 1 7 1356 1 7 1357 1 7 1358 1 7 1359 1 7 1360 1 7 1361 1 7 1362 1 7 1363 1 7 1364 1 7 1365 1 7 1381 1 7 1382 1 7 1383 1 7 1384 1 7 1385 1 7 1386 1 7 1387 1 7 1388 1 7 1389 1 7 1390 1 7 1391 1 7 1392 1 7 1393 1 7 1394 1 7 1395 1 7 1416 1 7 1417 1 7 1418 1 7 1419 1 7 1420 1 7 1421 1 7 1422 1 7 1423 1 7 1424 1 7 1425 1 7 1426 1 7 1427 1 7 1428 1 7 1429 1 7 1430 1 7 1431 1 7 1432 1 7 1433 1 7 1434 1 7 1435 1 7 1451 1 7 1452 1 7 1453 1 7 1454 1 7 1455 1 7 1456 1 7 1457 1 7 1458 1 7 1459 1 7 1460 1 7 1461 1 7 1462 1 7 1463 1 7 1464 1 7 1465 1 7 1466 1 7 1467 1 7 1468 1 7 1469 1 7 1470 1 7 1486 1 7 1487 1 7 1488 1 7 1489 1 7 1490 1 7 1491 1 7 1492 1 7 1493 1 7 1494 1 7 1495 1 7 1496 1 7 1497 1 7 1498 1 7 1499 1 7 1500 1 7 1507 1 7 1508 1 7 1509 1 7 1510 1 7 1511 1 7 1512 1 7 1513 1 7 1514 1 7 1515 1 7 1516 1 7 1517 1 7 1518 1 7 1519 1 7 1520 1 7 1521 1 7 1542 1 7 1543 1 7 1544 1 7 1545 1 7 1546 1 7 1547 1 7 1548 1 7 1549 1 7 1550 1 7 1551 1 7 1552 1 7 1553 1 7 1554 1 7 1555 1 7 1556 1 7 1557 1 7 1558 1 7 1559 1 7 1560 1 7 1561 1 7 1577 1 7 1578 1 7 1579 1 7 1580 1 7 1581 1 7 1582 1 7 1583 1 7 1584 1 7 1585 1 7 1586 1 7 1587 1 7 1588 1 7 1589 1 7 1590 1 7 1591 1 7 1592 1 7 1593 1 7 1594 1 7 1595 1 7 1596 1 7 1612 1 7 1613 1 7 1614 1 7 1615 1 7 1616 1 7 1617 1 7 1618 1 7 1619 1 7 1620 1 7 1621 1 7 1622 1 7 1623 1 7 1624 1 7 1625 1 7 1626 1 7 1633 1 7 1634 1 7 1635 1 7 1636 1 7 1637 1 7 1638 1 7 1639 1 7 1640 1 7 1641 1 7 1642 1 7 1643 1 7 1644 1 7 1645 1 7 1646 1 7 1647 1 7 1648 1 7 1649 1 7 1650 1 7 1651 1 7 1652 1 7 1668 1 7 1669 1 7 1670 1 7 1671 1 7 1672 1 7 1673 1 7 1674 1 7 1675 1 7 1676 1 7 1677 1 7 1678 1 7 1679 1 7 1680 1 7 1681 1 7 1682 1 7 1689 1 7 1690 1 7 1691 1 7 1692 1 7 1693 1 7 1694 1 7 1695 1 7 1696 1 7 1697 1 7 1698 1 7 1699 1 7 1700 1 7 1701 1 7 1702 1 7 1703 1 7 1710 1 7 1711 1 7 1712 1 7 1713 1 7 1714 1 7 1715 1 8 3 1 8 10 1 8 16 1 8 22 1 8 23 1 8 24 1 8 25 1 8 26 1 8 38 1 8 44 1 8 50 1 8 51 1 8 52 1 8 53 1 8 54 1 8 65 1 8 71 1 8 72 1 8 73 1 8 74 1 8 75 1 8 86 1 8 87 1 8 88 1 8 89 1 8 90 1 8 101 1 8 102 1 8 103 1 8 104 1 8 105 1 8 106 1 8 107 1 8 108 1 8 109 1 8 110 1 8 122 1 8 128 1 8 134 1 8 135 1 8 136 1 8 137 1 8 138 1 8 149 1 8 155 1 8 156 1 8 157 1 8 158 1 8 159 1 8 170 1 8 171 1 8 172 1 8 173 1 8 174 1 8 185 1 8 186 1 8 187 1 8 188 1 8 189 1 8 190 1 8 191 1 8 192 1 8 193 1 8 194 1 8 205 1 8 211 1 8 212 1 8 213 1 8 214 1 8 215 1 8 226 1 8 227 1 8 228 1 8 229 1 8 230 1 8 241 1 8 242 1 8 243 1 8 244 1 8 245 1 8 246 1 8 247 1 8 248 1 8 249 1 8 250 1 8 261 1 8 262 1 8 263 1 8 264 1 8 265 1 8 276 1 8 277 1 8 278 1 8 279 1 8 280 1 8 281 1 8 282 1 8 283 1 8 284 1 8 285 1 8 296 1 8 297 1 8 298 1 8 299 1 8 300 1 8 301 1 8 302 1 8 303 1 8 304 1 8 305 1 8 316 1 8 317 1 8 318 1 8 319 1 8 320 1 8 321 1 8 322 1 8 323 1 8 324 1 8 325 1 8 332 1 8 338 1 8 344 1 8 345 1 8 346 1 8 347 1 8 348 1 8 359 1 8 365 1 8 366 1 8 367 1 8 368 1 8 369 1 8 380 1 8 381 1 8 382 1 8 383 1 8 384 1 8 395 1 8 396 1 8 397 1 8 398 1 8 399 1 8 400 1 8 401 1 8 402 1 8 403 1 8 404 1 8 415 1 8 421 1 8 422 1 8 423 1 8 424 1 8 425 1 8 436 1 8 437 1 8 438 1 8 439 1 8 440 1 8 451 1 8 452 1 8 453 1 8 454 1 8 455 1 8 456 1 8 457 1 8 458 1 8 459 1 8 460 1 8 471 1 8 472 1 8 473 1 8 474 1 8 475 1 8 486 1 8 487 1 8 488 1 8 489 1 8 490 1 8 491 1 8 492 1 8 493 1 8 494 1 8 495 1 8 506 1 8 507 1 8 508 1 8 509 1 8 510 1 8 511 1 8 512 1 8 513 1 8 514 1 8 515 1 8 526 1 8 527 1 8 528 1 8 529 1 8 530 1 8 531 1 8 532 1 8 533 1 8 534 1 8 535 1 8 541 1 8 547 1 8 548 1 8 549 1 8 550 1 8 551 1 8 562 1 8 563 1 8 564 1 8 565 1 8 566 1 8 577 1 8 578 1 8 579 1 8 580 1 8 581 1 8 582 1 8 583 1 8 584 1 8 585 1 8 586 1 8 597 1 8 598 1 8 599 1 8 600 1 8 601 1 8 612 1 8 613 1 8 614 1 8 615 1 8 616 1 8 617 1 8 618 1 8 619 1 8 620 1 8 621 1 8 632 1 8 633 1 8 634 1 8 635 1 8 636 1 8 637 1 8 638 1 8 639 1 8 640 1 8 641 1 8 652 1 8 653 1 8 654 1 8 655 1 8 656 1 8 657 1 8 658 1 8 659 1 8 660 1 8 661 1 8 667 1 8 668 1 8 669 1 8 670 1 8 671 1 8 682 1 8 683 1 8 684 1 8 685 1 8 686 1 8 687 1 8 688 1 8 689 1 8 690 1 8 691 1 8 702 1 8 703 1 8 704 1 8 705 1 8 706 1 8 707 1 8 708 1 8 709 1 8 710 1 8 711 1 8 722 1 8 723 1 8 724 1 8 725 1 8 726 1 8 727 1 8 728 1 8 729 1 8 730 1 8 731 1 8 737 1 8 738 1 8 739 1 8 740 1 8 741 1 8 742 1 8 743 1 8 744 1 8 745 1 8 746 1 8 757 1 8 758 1 8 759 1 8 760 1 8 761 1 8 762 1 8 763 1 8 764 1 8 765 1 8 766 1 8 772 1 8 773 1 8 774 1 8 775 1 8 776 1 8 777 1 8 778 1 8 779 1 8 780 1 8 781 1 8 787 1 8 788 1 8 789 1 8 790 1 8 791 1 8 794 1 8 800 1 8 806 1 8 807 1 8 808 1 8 809 1 8 810 1 8 821 1 8 827 1 8 828 1 8 829 1 8 830 1 8 831 1 8 842 1 8 843 1 8 844 1 8 845 1 8 846 1 8 857 1 8 858 1 8 859 1 8 860 1 8 861 1 8 862 1 8 863 1 8 864 1 8 865 1 8 866 1 8 877 1 8 883 1 8 884 1 8 885 1 8 886 1 8 887 1 8 898 1 8 899 1 8 900 1 8 901 1 8 902 1 8 913 1 8 914 1 8 915 1 8 916 1 8 917 1 8 918 1 8 919 1 8 920 1 8 921 1 8 922 1 8 933 1 8 934 1 8 935 1 8 936 1 8 937 1 8 948 1 8 949 1 8 950 1 8 951 1 8 952 1 8 953 1 8 954 1 8 955 1 8 956 1 8 957 1 8 968 1 8 969 1 8 970 1 8 971 1 8 972 1 8 973 1 8 974 1 8 975 1 8 976 1 8 977 1 8 988 1 8 989 1 8 990 1 8 991 1 8 992 1 8 993 1 8 994 1 8 995 1 8 996 1 8 997 1 8 1003 1 8 1009 1 8 1010 1 8 1011 1 8 1012 1 8 1013 1 8 1024 1 8 1025 1 8 1026 1 8 1027 1 8 1028 1 8 1039 1 8 1040 1 8 1041 1 8 1042 1 8 1043 1 8 1044 1 8 1045 1 8 1046 1 8 1047 1 8 1048 1 8 1059 1 8 1060 1 8 1061 1 8 1062 1 8 1063 1 8 1074 1 8 1075 1 8 1076 1 8 1077 1 8 1078 1 8 1079 1 8 1080 1 8 1081 1 8 1082 1 8 1083 1 8 1094 1 8 1095 1 8 1096 1 8 1097 1 8 1098 1 8 1099 1 8 1100 1 8 1101 1 8 1102 1 8 1103 1 8 1114 1 8 1115 1 8 1116 1 8 1117 1 8 1118 1 8 1119 1 8 1120 1 8 1121 1 8 1122 1 8 1123 1 8 1129 1 8 1130 1 8 1131 1 8 1132 1 8 1133 1 8 1144 1 8 1145 1 8 1146 1 8 1147 1 8 1148 1 8 1149 1 8 1150 1 8 1151 1 8 1152 1 8 1153 1 8 1164 1 8 1165 1 8 1166 1 8 1167 1 8 1168 1 8 1169 1 8 1170 1 8 1171 1 8 1172 1 8 1173 1 8 1184 1 8 1185 1 8 1186 1 8 1187 1 8 1188 1 8 1189 1 8 1190 1 8 1191 1 8 1192 1 8 1193 1 8 1199 1 8 1200 1 8 1201 1 8 1202 1 8 1203 1 8 1204 1 8 1205 1 8 1206 1 8 1207 1 8 1208 1 8 1219 1 8 1220 1 8 1221 1 8 1222 1 8 1223 1 8 1224 1 8 1225 1 8 1226 1 8 1227 1 8 1228 1 8 1234 1 8 1235 1 8 1236 1 8 1237 1 8 1238 1 8 1239 1 8 1240 1 8 1241 1 8 1242 1 8 1243 1 8 1249 1 8 1250 1 8 1251 1 8 1252 1 8 1253 1 8 1255 1 8 1261 1 8 1262 1 8 1263 1 8 1264 1 8 1265 1 8 1276 1 8 1277 1 8 1278 1 8 1279 1 8 1280 1 8 1291 1 8 1292 1 8 1293 1 8 1294 1 8 1295 1 8 1296 1 8 1297 1 8 1298 1 8 1299 1 8 1300 1 8 1311 1 8 1312 1 8 1313 1 8 1314 1 8 1315 1 8 1326 1 8 1327 1 8 1328 1 8 1329 1 8 1330 1 8 1331 1 8 1332 1 8 1333 1 8 1334 1 8 1335 1 8 1346 1 8 1347 1 8 1348 1 8 1349 1 8 1350 1 8 1351 1 8 1352 1 8 1353 1 8 1354 1 8 1355 1 8 1366 1 8 1367 1 8 1368 1 8 1369 1 8 1370 1 8 1371 1 8 1372 1 8 1373 1 8 1374 1 8 1375 1 8 1381 1 8 1382 1 8 1383 1 8 1384 1 8 1385 1 8 1396 1 8 1397 1 8 1398 1 8 1399 1 8 1400 1 8 1401 1 8 1402 1 8 1403 1 8 1404 1 8 1405 1 8 1416 1 8 1417 1 8 1418 1 8 1419 1 8 1420 1 8 1421 1 8 1422 1 8 1423 1 8 1424 1 8 1425 1 8 1436 1 8 1437 1 8 1438 1 8 1439 1 8 1440 1 8 1441 1 8 1442 1 8 1443 1 8 1444 1 8 1445 1 8 1451 1 8 1452 1 8 1453 1 8 1454 1 8 1455 1 8 1456 1 8 1457 1 8 1458 1 8 1459 1 8 1460 1 8 1471 1 8 1472 1 8 1473 1 8 1474 1 8 1475 1 8 1476 1 8 1477 1 8 1478 1 8 1479 1 8 1480 1 8 1486 1 8 1487 1 8 1488 1 8 1489 1 8 1490 1 8 1491 1 8 1492 1 8 1493 1 8 1494 1 8 1495 1 8 1501 1 8 1502 1 8 1503 1 8 1504 1 8 1505 1 8 1507 1 8 1508 1 8 1509 1 8 1510 1 8 1511 1 8 1522 1 8 1523 1 8 1524 1 8 1525 1 8 1526 1 8 1527 1 8 1528 1 8 1529 1 8 1530 1 8 1531 1 8 1542 1 8 1543 1 8 1544 1 8 1545 1 8 1546 1 8 1547 1 8 1548 1 8 1549 1 8 1550 1 8 1551 1 8 1562 1 8 1563 1 8 1564 1 8 1565 1 8 1566 1 8 1567 1 8 1568 1 8 1569 1 8 1570 1 8 1571 1 8 1577 1 8 1578 1 8 1579 1 8 1580 1 8 1581 1 8 1582 1 8 1583 1 8 1584 1 8 1585 1 8 1586 1 8 1597 1 8 1598 1 8 1599 1 8 1600 1 8 1601 1 8 1602 1 8 1603 1 8 1604 1 8 1605 1 8 1606 1 8 1612 1 8 1613 1 8 1614 1 8 1615 1 8 1616 1 8 1617 1 8 1618 1 8 1619 1 8 1620 1 8 1621 1 8 1627 1 8 1628 1 8 1629 1 8 1630 1 8 1631 1 8 1633 1 8 1634 1 8 1635 1 8 1636 1 8 1637 1 8 1638 1 8 1639 1 8 1640 1 8 1641 1 8 1642 1 8 1653 1 8 1654 1 8 1655 1 8 1656 1 8 1657 1 8 1658 1 8 1659 1 8 1660 1 8 1661 1 8 1662 1 8 1668 1 8 1669 1 8 1670 1 8 1671 1 8 1672 1 8 1673 1 8 1674 1 8 1675 1 8 1676 1 8 1677 1 8 1683 1 8 1684 1 8 1685 1 8 1686 1 8 1687 1 8 1689 1 8 1690 1 8 1691 1 8 1692 1 8 1693 1 8 1694 1 8 1695 1 8 1696 1 8 1697 1 8 1698 1 8 1704 1 8 1705 1 8 1706 1 8 1707 1 8 1708 1 8 1710 1 8 1711 1 8 1712 1 8 1713 1 8 1714 1 8 1716 1 9 4 1 9 11 1 9 17 1 9 22 1 9 27 1 9 28 1 9 29 1 9 30 1 9 39 1 9 45 1 9 50 1 9 55 1 9 56 1 9 57 1 9 58 1 9 66 1 9 71 1 9 76 1 9 77 1 9 78 1 9 79 1 9 86 1 9 91 1 9 92 1 9 93 1 9 94 1 9 101 1 9 102 1 9 103 1 9 104 1 9 111 1 9 112 1 9 113 1 9 114 1 9 115 1 9 116 1 9 123 1 9 129 1 9 134 1 9 139 1 9 140 1 9 141 1 9 142 1 9 150 1 9 155 1 9 160 1 9 161 1 9 162 1 9 163 1 9 170 1 9 175 1 9 176 1 9 177 1 9 178 1 9 185 1 9 186 1 9 187 1 9 188 1 9 195 1 9 196 1 9 197 1 9 198 1 9 199 1 9 200 1 9 206 1 9 211 1 9 216 1 9 217 1 9 218 1 9 219 1 9 226 1 9 231 1 9 232 1 9 233 1 9 234 1 9 241 1 9 242 1 9 243 1 9 244 1 9 251 1 9 252 1 9 253 1 9 254 1 9 255 1 9 256 1 9 261 1 9 266 1 9 267 1 9 268 1 9 269 1 9 276 1 9 277 1 9 278 1 9 279 1 9 286 1 9 287 1 9 288 1 9 289 1 9 290 1 9 291 1 9 296 1 9 297 1 9 298 1 9 299 1 9 306 1 9 307 1 9 308 1 9 309 1 9 310 1 9 311 1 9 316 1 9 317 1 9 318 1 9 319 1 9 320 1 9 321 1 9 326 1 9 327 1 9 328 1 9 329 1 9 333 1 9 339 1 9 344 1 9 349 1 9 350 1 9 351 1 9 352 1 9 360 1 9 365 1 9 370 1 9 371 1 9 372 1 9 373 1 9 380 1 9 385 1 9 386 1 9 387 1 9 388 1 9 395 1 9 396 1 9 397 1 9 398 1 9 405 1 9 406 1 9 407 1 9 408 1 9 409 1 9 410 1 9 416 1 9 421 1 9 426 1 9 427 1 9 428 1 9 429 1 9 436 1 9 441 1 9 442 1 9 443 1 9 444 1 9 451 1 9 452 1 9 453 1 9 454 1 9 461 1 9 462 1 9 463 1 9 464 1 9 465 1 9 466 1 9 471 1 9 476 1 9 477 1 9 478 1 9 479 1 9 486 1 9 487 1 9 488 1 9 489 1 9 496 1 9 497 1 9 498 1 9 499 1 9 500 1 9 501 1 9 506 1 9 507 1 9 508 1 9 509 1 9 516 1 9 517 1 9 518 1 9 519 1 9 520 1 9 521 1 9 526 1 9 527 1 9 528 1 9 529 1 9 530 1 9 531 1 9 536 1 9 537 1 9 538 1 9 539 1 9 542 1 9 547 1 9 552 1 9 553 1 9 554 1 9 555 1 9 562 1 9 567 1 9 568 1 9 569 1 9 570 1 9 577 1 9 578 1 9 579 1 9 580 1 9 587 1 9 588 1 9 589 1 9 590 1 9 591 1 9 592 1 9 597 1 9 602 1 9 603 1 9 604 1 9 605 1 9 612 1 9 613 1 9 614 1 9 615 1 9 622 1 9 623 1 9 624 1 9 625 1 9 626 1 9 627 1 9 632 1 9 633 1 9 634 1 9 635 1 9 642 1 9 643 1 9 644 1 9 645 1 9 646 1 9 647 1 9 652 1 9 653 1 9 654 1 9 655 1 9 656 1 9 657 1 9 662 1 9 663 1 9 664 1 9 665 1 9 667 1 9 672 1 9 673 1 9 674 1 9 675 1 9 682 1 9 683 1 9 684 1 9 685 1 9 692 1 9 693 1 9 694 1 9 695 1 9 696 1 9 697 1 9 702 1 9 703 1 9 704 1 9 705 1 9 712 1 9 713 1 9 714 1 9 715 1 9 716 1 9 717 1 9 722 1 9 723 1 9 724 1 9 725 1 9 726 1 9 727 1 9 732 1 9 733 1 9 734 1 9 735 1 9 737 1 9 738 1 9 739 1 9 740 1 9 747 1 9 748 1 9 749 1 9 750 1 9 751 1 9 752 1 9 757 1 9 758 1 9 759 1 9 760 1 9 761 1 9 762 1 9 767 1 9 768 1 9 769 1 9 770 1 9 772 1 9 773 1 9 774 1 9 775 1 9 776 1 9 777 1 9 782 1 9 783 1 9 784 1 9 785 1 9 787 1 9 788 1 9 789 1 9 790 1 9 792 1 9 795 1 9 801 1 9 806 1 9 811 1 9 812 1 9 813 1 9 814 1 9 822 1 9 827 1 9 832 1 9 833 1 9 834 1 9 835 1 9 842 1 9 847 1 9 848 1 9 849 1 9 850 1 9 857 1 9 858 1 9 859 1 9 860 1 9 867 1 9 868 1 9 869 1 9 870 1 9 871 1 9 872 1 9 878 1 9 883 1 9 888 1 9 889 1 9 890 1 9 891 1 9 898 1 9 903 1 9 904 1 9 905 1 9 906 1 9 913 1 9 914 1 9 915 1 9 916 1 9 923 1 9 924 1 9 925 1 9 926 1 9 927 1 9 928 1 9 933 1 9 938 1 9 939 1 9 940 1 9 941 1 9 948 1 9 949 1 9 950 1 9 951 1 9 958 1 9 959 1 9 960 1 9 961 1 9 962 1 9 963 1 9 968 1 9 969 1 9 970 1 9 971 1 9 978 1 9 979 1 9 980 1 9 981 1 9 982 1 9 983 1 9 988 1 9 989 1 9 990 1 9 991 1 9 992 1 9 993 1 9 998 1 9 999 1 9 1000 1 9 1001 1 9 1004 1 9 1009 1 9 1014 1 9 1015 1 9 1016 1 9 1017 1 9 1024 1 9 1029 1 9 1030 1 9 1031 1 9 1032 1 9 1039 1 9 1040 1 9 1041 1 9 1042 1 9 1049 1 9 1050 1 9 1051 1 9 1052 1 9 1053 1 9 1054 1 9 1059 1 9 1064 1 9 1065 1 9 1066 1 9 1067 1 9 1074 1 9 1075 1 9 1076 1 9 1077 1 9 1084 1 9 1085 1 9 1086 1 9 1087 1 9 1088 1 9 1089 1 9 1094 1 9 1095 1 9 1096 1 9 1097 1 9 1104 1 9 1105 1 9 1106 1 9 1107 1 9 1108 1 9 1109 1 9 1114 1 9 1115 1 9 1116 1 9 1117 1 9 1118 1 9 1119 1 9 1124 1 9 1125 1 9 1126 1 9 1127 1 9 1129 1 9 1134 1 9 1135 1 9 1136 1 9 1137 1 9 1144 1 9 1145 1 9 1146 1 9 1147 1 9 1154 1 9 1155 1 9 1156 1 9 1157 1 9 1158 1 9 1159 1 9 1164 1 9 1165 1 9 1166 1 9 1167 1 9 1174 1 9 1175 1 9 1176 1 9 1177 1 9 1178 1 9 1179 1 9 1184 1 9 1185 1 9 1186 1 9 1187 1 9 1188 1 9 1189 1 9 1194 1 9 1195 1 9 1196 1 9 1197 1 9 1199 1 9 1200 1 9 1201 1 9 1202 1 9 1209 1 9 1210 1 9 1211 1 9 1212 1 9 1213 1 9 1214 1 9 1219 1 9 1220 1 9 1221 1 9 1222 1 9 1223 1 9 1224 1 9 1229 1 9 1230 1 9 1231 1 9 1232 1 9 1234 1 9 1235 1 9 1236 1 9 1237 1 9 1238 1 9 1239 1 9 1244 1 9 1245 1 9 1246 1 9 1247 1 9 1249 1 9 1250 1 9 1251 1 9 1252 1 9 1254 1 9 1256 1 9 1261 1 9 1266 1 9 1267 1 9 1268 1 9 1269 1 9 1276 1 9 1281 1 9 1282 1 9 1283 1 9 1284 1 9 1291 1 9 1292 1 9 1293 1 9 1294 1 9 1301 1 9 1302 1 9 1303 1 9 1304 1 9 1305 1 9 1306 1 9 1311 1 9 1316 1 9 1317 1 9 1318 1 9 1319 1 9 1326 1 9 1327 1 9 1328 1 9 1329 1 9 1336 1 9 1337 1 9 1338 1 9 1339 1 9 1340 1 9 1341 1 9 1346 1 9 1347 1 9 1348 1 9 1349 1 9 1356 1 9 1357 1 9 1358 1 9 1359 1 9 1360 1 9 1361 1 9 1366 1 9 1367 1 9 1368 1 9 1369 1 9 1370 1 9 1371 1 9 1376 1 9 1377 1 9 1378 1 9 1379 1 9 1381 1 9 1386 1 9 1387 1 9 1388 1 9 1389 1 9 1396 1 9 1397 1 9 1398 1 9 1399 1 9 1406 1 9 1407 1 9 1408 1 9 1409 1 9 1410 1 9 1411 1 9 1416 1 9 1417 1 9 1418 1 9 1419 1 9 1426 1 9 1427 1 9 1428 1 9 1429 1 9 1430 1 9 1431 1 9 1436 1 9 1437 1 9 1438 1 9 1439 1 9 1440 1 9 1441 1 9 1446 1 9 1447 1 9 1448 1 9 1449 1 9 1451 1 9 1452 1 9 1453 1 9 1454 1 9 1461 1 9 1462 1 9 1463 1 9 1464 1 9 1465 1 9 1466 1 9 1471 1 9 1472 1 9 1473 1 9 1474 1 9 1475 1 9 1476 1 9 1481 1 9 1482 1 9 1483 1 9 1484 1 9 1486 1 9 1487 1 9 1488 1 9 1489 1 9 1490 1 9 1491 1 9 1496 1 9 1497 1 9 1498 1 9 1499 1 9 1501 1 9 1502 1 9 1503 1 9 1504 1 9 1506 1 9 1507 1 9 1512 1 9 1513 1 9 1514 1 9 1515 1 9 1522 1 9 1523 1 9 1524 1 9 1525 1 9 1532 1 9 1533 1 9 1534 1 9 1535 1 9 1536 1 9 1537 1 9 1542 1 9 1543 1 9 1544 1 9 1545 1 9 1552 1 9 1553 1 9 1554 1 9 1555 1 9 1556 1 9 1557 1 9 1562 1 9 1563 1 9 1564 1 9 1565 1 9 1566 1 9 1567 1 9 1572 1 9 1573 1 9 1574 1 9 1575 1 9 1577 1 9 1578 1 9 1579 1 9 1580 1 9 1587 1 9 1588 1 9 1589 1 9 1590 1 9 1591 1 9 1592 1 9 1597 1 9 1598 1 9 1599 1 9 1600 1 9 1601 1 9 1602 1 9 1607 1 9 1608 1 9 1609 1 9 1610 1 9 1612 1 9 1613 1 9 1614 1 9 1615 1 9 1616 1 9 1617 1 9 1622 1 9 1623 1 9 1624 1 9 1625 1 9 1627 1 9 1628 1 9 1629 1 9 1630 1 9 1632 1 9 1633 1 9 1634 1 9 1635 1 9 1636 1 9 1643 1 9 1644 1 9 1645 1 9 1646 1 9 1647 1 9 1648 1 9 1653 1 9 1654 1 9 1655 1 9 1656 1 9 1657 1 9 1658 1 9 1663 1 9 1664 1 9 1665 1 9 1666 1 9 1668 1 9 1669 1 9 1670 1 9 1671 1 9 1672 1 9 1673 1 9 1678 1 9 1679 1 9 1680 1 9 1681 1 9 1683 1 9 1684 1 9 1685 1 9 1686 1 9 1688 1 9 1689 1 9 1690 1 9 1691 1 9 1692 1 9 1693 1 9 1694 1 9 1699 1 9 1700 1 9 1701 1 9 1702 1 9 1704 1 9 1705 1 9 1706 1 9 1707 1 9 1709 1 9 1710 1 9 1711 1 9 1712 1 9 1713 1 9 1715 1 9 1716 1 10 5 1 10 12 1 10 18 1 10 23 1 10 27 1 10 31 1 10 32 1 10 33 1 10 40 1 10 46 1 10 51 1 10 55 1 10 59 1 10 60 1 10 61 1 10 67 1 10 72 1 10 76 1 10 80 1 10 81 1 10 82 1 10 87 1 10 91 1 10 95 1 10 96 1 10 97 1 10 101 1 10 105 1 10 106 1 10 107 1 10 111 1 10 112 1 10 113 1 10 117 1 10 118 1 10 119 1 10 124 1 10 130 1 10 135 1 10 139 1 10 143 1 10 144 1 10 145 1 10 151 1 10 156 1 10 160 1 10 164 1 10 165 1 10 166 1 10 171 1 10 175 1 10 179 1 10 180 1 10 181 1 10 185 1 10 189 1 10 190 1 10 191 1 10 195 1 10 196 1 10 197 1 10 201 1 10 202 1 10 203 1 10 207 1 10 212 1 10 216 1 10 220 1 10 221 1 10 222 1 10 227 1 10 231 1 10 235 1 10 236 1 10 237 1 10 241 1 10 245 1 10 246 1 10 247 1 10 251 1 10 252 1 10 253 1 10 257 1 10 258 1 10 259 1 10 262 1 10 266 1 10 270 1 10 271 1 10 272 1 10 276 1 10 280 1 10 281 1 10 282 1 10 286 1 10 287 1 10 288 1 10 292 1 10 293 1 10 294 1 10 296 1 10 300 1 10 301 1 10 302 1 10 306 1 10 307 1 10 308 1 10 312 1 10 313 1 10 314 1 10 316 1 10 317 1 10 318 1 10 322 1 10 323 1 10 324 1 10 326 1 10 327 1 10 328 1 10 330 1 10 334 1 10 340 1 10 345 1 10 349 1 10 353 1 10 354 1 10 355 1 10 361 1 10 366 1 10 370 1 10 374 1 10 375 1 10 376 1 10 381 1 10 385 1 10 389 1 10 390 1 10 391 1 10 395 1 10 399 1 10 400 1 10 401 1 10 405 1 10 406 1 10 407 1 10 411 1 10 412 1 10 413 1 10 417 1 10 422 1 10 426 1 10 430 1 10 431 1 10 432 1 10 437 1 10 441 1 10 445 1 10 446 1 10 447 1 10 451 1 10 455 1 10 456 1 10 457 1 10 461 1 10 462 1 10 463 1 10 467 1 10 468 1 10 469 1 10 472 1 10 476 1 10 480 1 10 481 1 10 482 1 10 486 1 10 490 1 10 491 1 10 492 1 10 496 1 10 497 1 10 498 1 10 502 1 10 503 1 10 504 1 10 506 1 10 510 1 10 511 1 10 512 1 10 516 1 10 517 1 10 518 1 10 522 1 10 523 1 10 524 1 10 526 1 10 527 1 10 528 1 10 532 1 10 533 1 10 534 1 10 536 1 10 537 1 10 538 1 10 540 1 10 543 1 10 548 1 10 552 1 10 556 1 10 557 1 10 558 1 10 563 1 10 567 1 10 571 1 10 572 1 10 573 1 10 577 1 10 581 1 10 582 1 10 583 1 10 587 1 10 588 1 10 589 1 10 593 1 10 594 1 10 595 1 10 598 1 10 602 1 10 606 1 10 607 1 10 608 1 10 612 1 10 616 1 10 617 1 10 618 1 10 622 1 10 623 1 10 624 1 10 628 1 10 629 1 10 630 1 10 632 1 10 636 1 10 637 1 10 638 1 10 642 1 10 643 1 10 644 1 10 648 1 10 649 1 10 650 1 10 652 1 10 653 1 10 654 1 10 658 1 10 659 1 10 660 1 10 662 1 10 663 1 10 664 1 10 666 1 10 668 1 10 672 1 10 676 1 10 677 1 10 678 1 10 682 1 10 686 1 10 687 1 10 688 1 10 692 1 10 693 1 10 694 1 10 698 1 10 699 1 10 700 1 10 702 1 10 706 1 10 707 1 10 708 1 10 712 1 10 713 1 10 714 1 10 718 1 10 719 1 10 720 1 10 722 1 10 723 1 10 724 1 10 728 1 10 729 1 10 730 1 10 732 1 10 733 1 10 734 1 10 736 1 10 737 1 10 741 1 10 742 1 10 743 1 10 747 1 10 748 1 10 749 1 10 753 1 10 754 1 10 755 1 10 757 1 10 758 1 10 759 1 10 763 1 10 764 1 10 765 1 10 767 1 10 768 1 10 769 1 10 771 1 10 772 1 10 773 1 10 774 1 10 778 1 10 779 1 10 780 1 10 782 1 10 783 1 10 784 1 10 786 1 10 787 1 10 788 1 10 789 1 10 791 1 10 792 1 10 796 1 10 802 1 10 807 1 10 811 1 10 815 1 10 816 1 10 817 1 10 823 1 10 828 1 10 832 1 10 836 1 10 837 1 10 838 1 10 843 1 10 847 1 10 851 1 10 852 1 10 853 1 10 857 1 10 861 1 10 862 1 10 863 1 10 867 1 10 868 1 10 869 1 10 873 1 10 874 1 10 875 1 10 879 1 10 884 1 10 888 1 10 892 1 10 893 1 10 894 1 10 899 1 10 903 1 10 907 1 10 908 1 10 909 1 10 913 1 10 917 1 10 918 1 10 919 1 10 923 1 10 924 1 10 925 1 10 929 1 10 930 1 10 931 1 10 934 1 10 938 1 10 942 1 10 943 1 10 944 1 10 948 1 10 952 1 10 953 1 10 954 1 10 958 1 10 959 1 10 960 1 10 964 1 10 965 1 10 966 1 10 968 1 10 972 1 10 973 1 10 974 1 10 978 1 10 979 1 10 980 1 10 984 1 10 985 1 10 986 1 10 988 1 10 989 1 10 990 1 10 994 1 10 995 1 10 996 1 10 998 1 10 999 1 10 1000 1 10 1002 1 10 1005 1 10 1010 1 10 1014 1 10 1018 1 10 1019 1 10 1020 1 10 1025 1 10 1029 1 10 1033 1 10 1034 1 10 1035 1 10 1039 1 10 1043 1 10 1044 1 10 1045 1 10 1049 1 10 1050 1 10 1051 1 10 1055 1 10 1056 1 10 1057 1 10 1060 1 10 1064 1 10 1068 1 10 1069 1 10 1070 1 10 1074 1 10 1078 1 10 1079 1 10 1080 1 10 1084 1 10 1085 1 10 1086 1 10 1090 1 10 1091 1 10 1092 1 10 1094 1 10 1098 1 10 1099 1 10 1100 1 10 1104 1 10 1105 1 10 1106 1 10 1110 1 10 1111 1 10 1112 1 10 1114 1 10 1115 1 10 1116 1 10 1120 1 10 1121 1 10 1122 1 10 1124 1 10 1125 1 10 1126 1 10 1128 1 10 1130 1 10 1134 1 10 1138 1 10 1139 1 10 1140 1 10 1144 1 10 1148 1 10 1149 1 10 1150 1 10 1154 1 10 1155 1 10 1156 1 10 1160 1 10 1161 1 10 1162 1 10 1164 1 10 1168 1 10 1169 1 10 1170 1 10 1174 1 10 1175 1 10 1176 1 10 1180 1 10 1181 1 10 1182 1 10 1184 1 10 1185 1 10 1186 1 10 1190 1 10 1191 1 10 1192 1 10 1194 1 10 1195 1 10 1196 1 10 1198 1 10 1199 1 10 1203 1 10 1204 1 10 1205 1 10 1209 1 10 1210 1 10 1211 1 10 1215 1 10 1216 1 10 1217 1 10 1219 1 10 1220 1 10 1221 1 10 1225 1 10 1226 1 10 1227 1 10 1229 1 10 1230 1 10 1231 1 10 1233 1 10 1234 1 10 1235 1 10 1236 1 10 1240 1 10 1241 1 10 1242 1 10 1244 1 10 1245 1 10 1246 1 10 1248 1 10 1249 1 10 1250 1 10 1251 1 10 1253 1 10 1254 1 10 1257 1 10 1262 1 10 1266 1 10 1270 1 10 1271 1 10 1272 1 10 1277 1 10 1281 1 10 1285 1 10 1286 1 10 1287 1 10 1291 1 10 1295 1 10 1296 1 10 1297 1 10 1301 1 10 1302 1 10 1303 1 10 1307 1 10 1308 1 10 1309 1 10 1312 1 10 1316 1 10 1320 1 10 1321 1 10 1322 1 10 1326 1 10 1330 1 10 1331 1 10 1332 1 10 1336 1 10 1337 1 10 1338 1 10 1342 1 10 1343 1 10 1344 1 10 1346 1 10 1350 1 10 1351 1 10 1352 1 10 1356 1 10 1357 1 10 1358 1 10 1362 1 10 1363 1 10 1364 1 10 1366 1 10 1367 1 10 1368 1 10 1372 1 10 1373 1 10 1374 1 10 1376 1 10 1377 1 10 1378 1 10 1380 1 10 1382 1 10 1386 1 10 1390 1 10 1391 1 10 1392 1 10 1396 1 10 1400 1 10 1401 1 10 1402 1 10 1406 1 10 1407 1 10 1408 1 10 1412 1 10 1413 1 10 1414 1 10 1416 1 10 1420 1 10 1421 1 10 1422 1 10 1426 1 10 1427 1 10 1428 1 10 1432 1 10 1433 1 10 1434 1 10 1436 1 10 1437 1 10 1438 1 10 1442 1 10 1443 1 10 1444 1 10 1446 1 10 1447 1 10 1448 1 10 1450 1 10 1451 1 10 1455 1 10 1456 1 10 1457 1 10 1461 1 10 1462 1 10 1463 1 10 1467 1 10 1468 1 10 1469 1 10 1471 1 10 1472 1 10 1473 1 10 1477 1 10 1478 1 10 1479 1 10 1481 1 10 1482 1 10 1483 1 10 1485 1 10 1486 1 10 1487 1 10 1488 1 10 1492 1 10 1493 1 10 1494 1 10 1496 1 10 1497 1 10 1498 1 10 1500 1 10 1501 1 10 1502 1 10 1503 1 10 1505 1 10 1506 1 10 1508 1 10 1512 1 10 1516 1 10 1517 1 10 1518 1 10 1522 1 10 1526 1 10 1527 1 10 1528 1 10 1532 1 10 1533 1 10 1534 1 10 1538 1 10 1539 1 10 1540 1 10 1542 1 10 1546 1 10 1547 1 10 1548 1 10 1552 1 10 1553 1 10 1554 1 10 1558 1 10 1559 1 10 1560 1 10 1562 1 10 1563 1 10 1564 1 10 1568 1 10 1569 1 10 1570 1 10 1572 1 10 1573 1 10 1574 1 10 1576 1 10 1577 1 10 1581 1 10 1582 1 10 1583 1 10 1587 1 10 1588 1 10 1589 1 10 1593 1 10 1594 1 10 1595 1 10 1597 1 10 1598 1 10 1599 1 10 1603 1 10 1604 1 10 1605 1 10 1607 1 10 1608 1 10 1609 1 10 1611 1 10 1612 1 10 1613 1 10 1614 1 10 1618 1 10 1619 1 10 1620 1 10 1622 1 10 1623 1 10 1624 1 10 1626 1 10 1627 1 10 1628 1 10 1629 1 10 1631 1 10 1632 1 10 1633 1 10 1637 1 10 1638 1 10 1639 1 10 1643 1 10 1644 1 10 1645 1 10 1649 1 10 1650 1 10 1651 1 10 1653 1 10 1654 1 10 1655 1 10 1659 1 10 1660 1 10 1661 1 10 1663 1 10 1664 1 10 1665 1 10 1667 1 10 1668 1 10 1669 1 10 1670 1 10 1674 1 10 1675 1 10 1676 1 10 1678 1 10 1679 1 10 1680 1 10 1682 1 10 1683 1 10 1684 1 10 1685 1 10 1687 1 10 1688 1 10 1689 1 10 1690 1 10 1691 1 10 1695 1 10 1696 1 10 1697 1 10 1699 1 10 1700 1 10 1701 1 10 1703 1 10 1704 1 10 1705 1 10 1706 1 10 1708 1 10 1709 1 10 1710 1 10 1711 1 10 1712 1 10 1714 1 10 1715 1 10 1716 1 11 6 1 11 13 1 11 19 1 11 24 1 11 28 1 11 31 1 11 34 1 11 35 1 11 41 1 11 47 1 11 52 1 11 56 1 11 59 1 11 62 1 11 63 1 11 68 1 11 73 1 11 77 1 11 80 1 11 83 1 11 84 1 11 88 1 11 92 1 11 95 1 11 98 1 11 99 1 11 102 1 11 105 1 11 108 1 11 109 1 11 111 1 11 114 1 11 115 1 11 117 1 11 118 1 11 120 1 11 125 1 11 131 1 11 136 1 11 140 1 11 143 1 11 146 1 11 147 1 11 152 1 11 157 1 11 161 1 11 164 1 11 167 1 11 168 1 11 172 1 11 176 1 11 179 1 11 182 1 11 183 1 11 186 1 11 189 1 11 192 1 11 193 1 11 195 1 11 198 1 11 199 1 11 201 1 11 202 1 11 204 1 11 208 1 11 213 1 11 217 1 11 220 1 11 223 1 11 224 1 11 228 1 11 232 1 11 235 1 11 238 1 11 239 1 11 242 1 11 245 1 11 248 1 11 249 1 11 251 1 11 254 1 11 255 1 11 257 1 11 258 1 11 260 1 11 263 1 11 267 1 11 270 1 11 273 1 11 274 1 11 277 1 11 280 1 11 283 1 11 284 1 11 286 1 11 289 1 11 290 1 11 292 1 11 293 1 11 295 1 11 297 1 11 300 1 11 303 1 11 304 1 11 306 1 11 309 1 11 310 1 11 312 1 11 313 1 11 315 1 11 316 1 11 319 1 11 320 1 11 322 1 11 323 1 11 325 1 11 326 1 11 327 1 11 329 1 11 330 1 11 335 1 11 341 1 11 346 1 11 350 1 11 353 1 11 356 1 11 357 1 11 362 1 11 367 1 11 371 1 11 374 1 11 377 1 11 378 1 11 382 1 11 386 1 11 389 1 11 392 1 11 393 1 11 396 1 11 399 1 11 402 1 11 403 1 11 405 1 11 408 1 11 409 1 11 411 1 11 412 1 11 414 1 11 418 1 11 423 1 11 427 1 11 430 1 11 433 1 11 434 1 11 438 1 11 442 1 11 445 1 11 448 1 11 449 1 11 452 1 11 455 1 11 458 1 11 459 1 11 461 1 11 464 1 11 465 1 11 467 1 11 468 1 11 470 1 11 473 1 11 477 1 11 480 1 11 483 1 11 484 1 11 487 1 11 490 1 11 493 1 11 494 1 11 496 1 11 499 1 11 500 1 11 502 1 11 503 1 11 505 1 11 507 1 11 510 1 11 513 1 11 514 1 11 516 1 11 519 1 11 520 1 11 522 1 11 523 1 11 525 1 11 526 1 11 529 1 11 530 1 11 532 1 11 533 1 11 535 1 11 536 1 11 537 1 11 539 1 11 540 1 11 544 1 11 549 1 11 553 1 11 556 1 11 559 1 11 560 1 11 564 1 11 568 1 11 571 1 11 574 1 11 575 1 11 578 1 11 581 1 11 584 1 11 585 1 11 587 1 11 590 1 11 591 1 11 593 1 11 594 1 11 596 1 11 599 1 11 603 1 11 606 1 11 609 1 11 610 1 11 613 1 11 616 1 11 619 1 11 620 1 11 622 1 11 625 1 11 626 1 11 628 1 11 629 1 11 631 1 11 633 1 11 636 1 11 639 1 11 640 1 11 642 1 11 645 1 11 646 1 11 648 1 11 649 1 11 651 1 11 652 1 11 655 1 11 656 1 11 658 1 11 659 1 11 661 1 11 662 1 11 663 1 11 665 1 11 666 1 11 669 1 11 673 1 11 676 1 11 679 1 11 680 1 11 683 1 11 686 1 11 689 1 11 690 1 11 692 1 11 695 1 11 696 1 11 698 1 11 699 1 11 701 1 11 703 1 11 706 1 11 709 1 11 710 1 11 712 1 11 715 1 11 716 1 11 718 1 11 719 1 11 721 1 11 722 1 11 725 1 11 726 1 11 728 1 11 729 1 11 731 1 11 732 1 11 733 1 11 735 1 11 736 1 11 738 1 11 741 1 11 744 1 11 745 1 11 747 1 11 750 1 11 751 1 11 753 1 11 754 1 11 756 1 11 757 1 11 760 1 11 761 1 11 763 1 11 764 1 11 766 1 11 767 1 11 768 1 11 770 1 11 771 1 11 772 1 11 775 1 11 776 1 11 778 1 11 779 1 11 781 1 11 782 1 11 783 1 11 785 1 11 786 1 11 787 1 11 788 1 11 790 1 11 791 1 11 792 1 11 797 1 11 803 1 11 808 1 11 812 1 11 815 1 11 818 1 11 819 1 11 824 1 11 829 1 11 833 1 11 836 1 11 839 1 11 840 1 11 844 1 11 848 1 11 851 1 11 854 1 11 855 1 11 858 1 11 861 1 11 864 1 11 865 1 11 867 1 11 870 1 11 871 1 11 873 1 11 874 1 11 876 1 11 880 1 11 885 1 11 889 1 11 892 1 11 895 1 11 896 1 11 900 1 11 904 1 11 907 1 11 910 1 11 911 1 11 914 1 11 917 1 11 920 1 11 921 1 11 923 1 11 926 1 11 927 1 11 929 1 11 930 1 11 932 1 11 935 1 11 939 1 11 942 1 11 945 1 11 946 1 11 949 1 11 952 1 11 955 1 11 956 1 11 958 1 11 961 1 11 962 1 11 964 1 11 965 1 11 967 1 11 969 1 11 972 1 11 975 1 11 976 1 11 978 1 11 981 1 11 982 1 11 984 1 11 985 1 11 987 1 11 988 1 11 991 1 11 992 1 11 994 1 11 995 1 11 997 1 11 998 1 11 999 1 11 1001 1 11 1002 1 11 1006 1 11 1011 1 11 1015 1 11 1018 1 11 1021 1 11 1022 1 11 1026 1 11 1030 1 11 1033 1 11 1036 1 11 1037 1 11 1040 1 11 1043 1 11 1046 1 11 1047 1 11 1049 1 11 1052 1 11 1053 1 11 1055 1 11 1056 1 11 1058 1 11 1061 1 11 1065 1 11 1068 1 11 1071 1 11 1072 1 11 1075 1 11 1078 1 11 1081 1 11 1082 1 11 1084 1 11 1087 1 11 1088 1 11 1090 1 11 1091 1 11 1093 1 11 1095 1 11 1098 1 11 1101 1 11 1102 1 11 1104 1 11 1107 1 11 1108 1 11 1110 1 11 1111 1 11 1113 1 11 1114 1 11 1117 1 11 1118 1 11 1120 1 11 1121 1 11 1123 1 11 1124 1 11 1125 1 11 1127 1 11 1128 1 11 1131 1 11 1135 1 11 1138 1 11 1141 1 11 1142 1 11 1145 1 11 1148 1 11 1151 1 11 1152 1 11 1154 1 11 1157 1 11 1158 1 11 1160 1 11 1161 1 11 1163 1 11 1165 1 11 1168 1 11 1171 1 11 1172 1 11 1174 1 11 1177 1 11 1178 1 11 1180 1 11 1181 1 11 1183 1 11 1184 1 11 1187 1 11 1188 1 11 1190 1 11 1191 1 11 1193 1 11 1194 1 11 1195 1 11 1197 1 11 1198 1 11 1200 1 11 1203 1 11 1206 1 11 1207 1 11 1209 1 11 1212 1 11 1213 1 11 1215 1 11 1216 1 11 1218 1 11 1219 1 11 1222 1 11 1223 1 11 1225 1 11 1226 1 11 1228 1 11 1229 1 11 1230 1 11 1232 1 11 1233 1 11 1234 1 11 1237 1 11 1238 1 11 1240 1 11 1241 1 11 1243 1 11 1244 1 11 1245 1 11 1247 1 11 1248 1 11 1249 1 11 1250 1 11 1252 1 11 1253 1 11 1254 1 11 1258 1 11 1263 1 11 1267 1 11 1270 1 11 1273 1 11 1274 1 11 1278 1 11 1282 1 11 1285 1 11 1288 1 11 1289 1 11 1292 1 11 1295 1 11 1298 1 11 1299 1 11 1301 1 11 1304 1 11 1305 1 11 1307 1 11 1308 1 11 1310 1 11 1313 1 11 1317 1 11 1320 1 11 1323 1 11 1324 1 11 1327 1 11 1330 1 11 1333 1 11 1334 1 11 1336 1 11 1339 1 11 1340 1 11 1342 1 11 1343 1 11 1345 1 11 1347 1 11 1350 1 11 1353 1 11 1354 1 11 1356 1 11 1359 1 11 1360 1 11 1362 1 11 1363 1 11 1365 1 11 1366 1 11 1369 1 11 1370 1 11 1372 1 11 1373 1 11 1375 1 11 1376 1 11 1377 1 11 1379 1 11 1380 1 11 1383 1 11 1387 1 11 1390 1 11 1393 1 11 1394 1 11 1397 1 11 1400 1 11 1403 1 11 1404 1 11 1406 1 11 1409 1 11 1410 1 11 1412 1 11 1413 1 11 1415 1 11 1417 1 11 1420 1 11 1423 1 11 1424 1 11 1426 1 11 1429 1 11 1430 1 11 1432 1 11 1433 1 11 1435 1 11 1436 1 11 1439 1 11 1440 1 11 1442 1 11 1443 1 11 1445 1 11 1446 1 11 1447 1 11 1449 1 11 1450 1 11 1452 1 11 1455 1 11 1458 1 11 1459 1 11 1461 1 11 1464 1 11 1465 1 11 1467 1 11 1468 1 11 1470 1 11 1471 1 11 1474 1 11 1475 1 11 1477 1 11 1478 1 11 1480 1 11 1481 1 11 1482 1 11 1484 1 11 1485 1 11 1486 1 11 1489 1 11 1490 1 11 1492 1 11 1493 1 11 1495 1 11 1496 1 11 1497 1 11 1499 1 11 1500 1 11 1501 1 11 1502 1 11 1504 1 11 1505 1 11 1506 1 11 1509 1 11 1513 1 11 1516 1 11 1519 1 11 1520 1 11 1523 1 11 1526 1 11 1529 1 11 1530 1 11 1532 1 11 1535 1 11 1536 1 11 1538 1 11 1539 1 11 1541 1 11 1543 1 11 1546 1 11 1549 1 11 1550 1 11 1552 1 11 1555 1 11 1556 1 11 1558 1 11 1559 1 11 1561 1 11 1562 1 11 1565 1 11 1566 1 11 1568 1 11 1569 1 11 1571 1 11 1572 1 11 1573 1 11 1575 1 11 1576 1 11 1578 1 11 1581 1 11 1584 1 11 1585 1 11 1587 1 11 1590 1 11 1591 1 11 1593 1 11 1594 1 11 1596 1 11 1597 1 11 1600 1 11 1601 1 11 1603 1 11 1604 1 11 1606 1 11 1607 1 11 1608 1 11 1610 1 11 1611 1 11 1612 1 11 1615 1 11 1616 1 11 1618 1 11 1619 1 11 1621 1 11 1622 1 11 1623 1 11 1625 1 11 1626 1 11 1627 1 11 1628 1 11 1630 1 11 1631 1 11 1632 1 11 1634 1 11 1637 1 11 1640 1 11 1641 1 11 1643 1 11 1646 1 11 1647 1 11 1649 1 11 1650 1 11 1652 1 11 1653 1 11 1656 1 11 1657 1 11 1659 1 11 1660 1 11 1662 1 11 1663 1 11 1664 1 11 1666 1 11 1667 1 11 1668 1 11 1671 1 11 1672 1 11 1674 1 11 1675 1 11 1677 1 11 1678 1 11 1679 1 11 1681 1 11 1682 1 11 1683 1 11 1684 1 11 1686 1 11 1687 1 11 1688 1 11 1689 1 11 1692 1 11 1693 1 11 1695 1 11 1696 1 11 1698 1 11 1699 1 11 1700 1 11 1702 1 11 1703 1 11 1704 1 11 1705 1 11 1707 1 11 1708 1 11 1709 1 11 1710 1 11 1711 1 11 1713 1 11 1714 1 11 1715 1 11 1716 1 12 7 1 12 14 1 12 20 1 12 25 1 12 29 1 12 32 1 12 34 1 12 36 1 12 42 1 12 48 1 12 53 1 12 57 1 12 60 1 12 62 1 12 64 1 12 69 1 12 74 1 12 78 1 12 81 1 12 83 1 12 85 1 12 89 1 12 93 1 12 96 1 12 98 1 12 100 1 12 103 1 12 106 1 12 108 1 12 110 1 12 112 1 12 114 1 12 116 1 12 117 1 12 119 1 12 120 1 12 126 1 12 132 1 12 137 1 12 141 1 12 144 1 12 146 1 12 148 1 12 153 1 12 158 1 12 162 1 12 165 1 12 167 1 12 169 1 12 173 1 12 177 1 12 180 1 12 182 1 12 184 1 12 187 1 12 190 1 12 192 1 12 194 1 12 196 1 12 198 1 12 200 1 12 201 1 12 203 1 12 204 1 12 209 1 12 214 1 12 218 1 12 221 1 12 223 1 12 225 1 12 229 1 12 233 1 12 236 1 12 238 1 12 240 1 12 243 1 12 246 1 12 248 1 12 250 1 12 252 1 12 254 1 12 256 1 12 257 1 12 259 1 12 260 1 12 264 1 12 268 1 12 271 1 12 273 1 12 275 1 12 278 1 12 281 1 12 283 1 12 285 1 12 287 1 12 289 1 12 291 1 12 292 1 12 294 1 12 295 1 12 298 1 12 301 1 12 303 1 12 305 1 12 307 1 12 309 1 12 311 1 12 312 1 12 314 1 12 315 1 12 317 1 12 319 1 12 321 1 12 322 1 12 324 1 12 325 1 12 326 1 12 328 1 12 329 1 12 330 1 12 336 1 12 342 1 12 347 1 12 351 1 12 354 1 12 356 1 12 358 1 12 363 1 12 368 1 12 372 1 12 375 1 12 377 1 12 379 1 12 383 1 12 387 1 12 390 1 12 392 1 12 394 1 12 397 1 12 400 1 12 402 1 12 404 1 12 406 1 12 408 1 12 410 1 12 411 1 12 413 1 12 414 1 12 419 1 12 424 1 12 428 1 12 431 1 12 433 1 12 435 1 12 439 1 12 443 1 12 446 1 12 448 1 12 450 1 12 453 1 12 456 1 12 458 1 12 460 1 12 462 1 12 464 1 12 466 1 12 467 1 12 469 1 12 470 1 12 474 1 12 478 1 12 481 1 12 483 1 12 485 1 12 488 1 12 491 1 12 493 1 12 495 1 12 497 1 12 499 1 12 501 1 12 502 1 12 504 1 12 505 1 12 508 1 12 511 1 12 513 1 12 515 1 12 517 1 12 519 1 12 521 1 12 522 1 12 524 1 12 525 1 12 527 1 12 529 1 12 531 1 12 532 1 12 534 1 12 535 1 12 536 1 12 538 1 12 539 1 12 540 1 12 545 1 12 550 1 12 554 1 12 557 1 12 559 1 12 561 1 12 565 1 12 569 1 12 572 1 12 574 1 12 576 1 12 579 1 12 582 1 12 584 1 12 586 1 12 588 1 12 590 1 12 592 1 12 593 1 12 595 1 12 596 1 12 600 1 12 604 1 12 607 1 12 609 1 12 611 1 12 614 1 12 617 1 12 619 1 12 621 1 12 623 1 12 625 1 12 627 1 12 628 1 12 630 1 12 631 1 12 634 1 12 637 1 12 639 1 12 641 1 12 643 1 12 645 1 12 647 1 12 648 1 12 650 1 12 651 1 12 653 1 12 655 1 12 657 1 12 658 1 12 660 1 12 661 1 12 662 1 12 664 1 12 665 1 12 666 1 12 670 1 12 674 1 12 677 1 12 679 1 12 681 1 12 684 1 12 687 1 12 689 1 12 691 1 12 693 1 12 695 1 12 697 1 12 698 1 12 700 1 12 701 1 12 704 1 12 707 1 12 709 1 12 711 1 12 713 1 12 715 1 12 717 1 12 718 1 12 720 1 12 721 1 12 723 1 12 725 1 12 727 1 12 728 1 12 730 1 12 731 1 12 732 1 12 734 1 12 735 1 12 736 1 12 739 1 12 742 1 12 744 1 12 746 1 12 748 1 12 750 1 12 752 1 12 753 1 12 755 1 12 756 1 12 758 1 12 760 1 12 762 1 12 763 1 12 765 1 12 766 1 12 767 1 12 769 1 12 770 1 12 771 1 12 773 1 12 775 1 12 777 1 12 778 1 12 780 1 12 781 1 12 782 1 12 784 1 12 785 1 12 786 1 12 787 1 12 789 1 12 790 1 12 791 1 12 792 1 12 798 1 12 804 1 12 809 1 12 813 1 12 816 1 12 818 1 12 820 1 12 825 1 12 830 1 12 834 1 12 837 1 12 839 1 12 841 1 12 845 1 12 849 1 12 852 1 12 854 1 12 856 1 12 859 1 12 862 1 12 864 1 12 866 1 12 868 1 12 870 1 12 872 1 12 873 1 12 875 1 12 876 1 12 881 1 12 886 1 12 890 1 12 893 1 12 895 1 12 897 1 12 901 1 12 905 1 12 908 1 12 910 1 12 912 1 12 915 1 12 918 1 12 920 1 12 922 1 12 924 1 12 926 1 12 928 1 12 929 1 12 931 1 12 932 1 12 936 1 12 940 1 12 943 1 12 945 1 12 947 1 12 950 1 12 953 1 12 955 1 12 957 1 12 959 1 12 961 1 12 963 1 12 964 1 12 966 1 12 967 1 12 970 1 12 973 1 12 975 1 12 977 1 12 979 1 12 981 1 12 983 1 12 984 1 12 986 1 12 987 1 12 989 1 12 991 1 12 993 1 12 994 1 12 996 1 12 997 1 12 998 1 12 1000 1 12 1001 1 12 1002 1 12 1007 1 12 1012 1 12 1016 1 12 1019 1 12 1021 1 12 1023 1 12 1027 1 12 1031 1 12 1034 1 12 1036 1 12 1038 1 12 1041 1 12 1044 1 12 1046 1 12 1048 1 12 1050 1 12 1052 1 12 1054 1 12 1055 1 12 1057 1 12 1058 1 12 1062 1 12 1066 1 12 1069 1 12 1071 1 12 1073 1 12 1076 1 12 1079 1 12 1081 1 12 1083 1 12 1085 1 12 1087 1 12 1089 1 12 1090 1 12 1092 1 12 1093 1 12 1096 1 12 1099 1 12 1101 1 12 1103 1 12 1105 1 12 1107 1 12 1109 1 12 1110 1 12 1112 1 12 1113 1 12 1115 1 12 1117 1 12 1119 1 12 1120 1 12 1122 1 12 1123 1 12 1124 1 12 1126 1 12 1127 1 12 1128 1 12 1132 1 12 1136 1 12 1139 1 12 1141 1 12 1143 1 12 1146 1 12 1149 1 12 1151 1 12 1153 1 12 1155 1 12 1157 1 12 1159 1 12 1160 1 12 1162 1 12 1163 1 12 1166 1 12 1169 1 12 1171 1 12 1173 1 12 1175 1 12 1177 1 12 1179 1 12 1180 1 12 1182 1 12 1183 1 12 1185 1 12 1187 1 12 1189 1 12 1190 1 12 1192 1 12 1193 1 12 1194 1 12 1196 1 12 1197 1 12 1198 1 12 1201 1 12 1204 1 12 1206 1 12 1208 1 12 1210 1 12 1212 1 12 1214 1 12 1215 1 12 1217 1 12 1218 1 12 1220 1 12 1222 1 12 1224 1 12 1225 1 12 1227 1 12 1228 1 12 1229 1 12 1231 1 12 1232 1 12 1233 1 12 1235 1 12 1237 1 12 1239 1 12 1240 1 12 1242 1 12 1243 1 12 1244 1 12 1246 1 12 1247 1 12 1248 1 12 1249 1 12 1251 1 12 1252 1 12 1253 1 12 1254 1 12 1259 1 12 1264 1 12 1268 1 12 1271 1 12 1273 1 12 1275 1 12 1279 1 12 1283 1 12 1286 1 12 1288 1 12 1290 1 12 1293 1 12 1296 1 12 1298 1 12 1300 1 12 1302 1 12 1304 1 12 1306 1 12 1307 1 12 1309 1 12 1310 1 12 1314 1 12 1318 1 12 1321 1 12 1323 1 12 1325 1 12 1328 1 12 1331 1 12 1333 1 12 1335 1 12 1337 1 12 1339 1 12 1341 1 12 1342 1 12 1344 1 12 1345 1 12 1348 1 12 1351 1 12 1353 1 12 1355 1 12 1357 1 12 1359 1 12 1361 1 12 1362 1 12 1364 1 12 1365 1 12 1367 1 12 1369 1 12 1371 1 12 1372 1 12 1374 1 12 1375 1 12 1376 1 12 1378 1 12 1379 1 12 1380 1 12 1384 1 12 1388 1 12 1391 1 12 1393 1 12 1395 1 12 1398 1 12 1401 1 12 1403 1 12 1405 1 12 1407 1 12 1409 1 12 1411 1 12 1412 1 12 1414 1 12 1415 1 12 1418 1 12 1421 1 12 1423 1 12 1425 1 12 1427 1 12 1429 1 12 1431 1 12 1432 1 12 1434 1 12 1435 1 12 1437 1 12 1439 1 12 1441 1 12 1442 1 12 1444 1 12 1445 1 12 1446 1 12 1448 1 12 1449 1 12 1450 1 12 1453 1 12 1456 1 12 1458 1 12 1460 1 12 1462 1 12 1464 1 12 1466 1 12 1467 1 12 1469 1 12 1470 1 12 1472 1 12 1474 1 12 1476 1 12 1477 1 12 1479 1 12 1480 1 12 1481 1 12 1483 1 12 1484 1 12 1485 1 12 1487 1 12 1489 1 12 1491 1 12 1492 1 12 1494 1 12 1495 1 12 1496 1 12 1498 1 12 1499 1 12 1500 1 12 1501 1 12 1503 1 12 1504 1 12 1505 1 12 1506 1 12 1510 1 12 1514 1 12 1517 1 12 1519 1 12 1521 1 12 1524 1 12 1527 1 12 1529 1 12 1531 1 12 1533 1 12 1535 1 12 1537 1 12 1538 1 12 1540 1 12 1541 1 12 1544 1 12 1547 1 12 1549 1 12 1551 1 12 1553 1 12 1555 1 12 1557 1 12 1558 1 12 1560 1 12 1561 1 12 1563 1 12 1565 1 12 1567 1 12 1568 1 12 1570 1 12 1571 1 12 1572 1 12 1574 1 12 1575 1 12 1576 1 12 1579 1 12 1582 1 12 1584 1 12 1586 1 12 1588 1 12 1590 1 12 1592 1 12 1593 1 12 1595 1 12 1596 1 12 1598 1 12 1600 1 12 1602 1 12 1603 1 12 1605 1 12 1606 1 12 1607 1 12 1609 1 12 1610 1 12 1611 1 12 1613 1 12 1615 1 12 1617 1 12 1618 1 12 1620 1 12 1621 1 12 1622 1 12 1624 1 12 1625 1 12 1626 1 12 1627 1 12 1629 1 12 1630 1 12 1631 1 12 1632 1 12 1635 1 12 1638 1 12 1640 1 12 1642 1 12 1644 1 12 1646 1 12 1648 1 12 1649 1 12 1651 1 12 1652 1 12 1654 1 12 1656 1 12 1658 1 12 1659 1 12 1661 1 12 1662 1 12 1663 1 12 1665 1 12 1666 1 12 1667 1 12 1669 1 12 1671 1 12 1673 1 12 1674 1 12 1676 1 12 1677 1 12 1678 1 12 1680 1 12 1681 1 12 1682 1 12 1683 1 12 1685 1 12 1686 1 12 1687 1 12 1688 1 12 1690 1 12 1692 1 12 1694 1 12 1695 1 12 1697 1 12 1698 1 12 1699 1 12 1701 1 12 1702 1 12 1703 1 12 1704 1 12 1706 1 12 1707 1 12 1708 1 12 1709 1 12 1710 1 12 1712 1 12 1713 1 12 1714 1 12 1715 1 12 1716 1 13 8 1 13 15 1 13 21 1 13 26 1 13 30 1 13 33 1 13 35 1 13 36 1 13 43 1 13 49 1 13 54 1 13 58 1 13 61 1 13 63 1 13 64 1 13 70 1 13 75 1 13 79 1 13 82 1 13 84 1 13 85 1 13 90 1 13 94 1 13 97 1 13 99 1 13 100 1 13 104 1 13 107 1 13 109 1 13 110 1 13 113 1 13 115 1 13 116 1 13 118 1 13 119 1 13 120 1 13 127 1 13 133 1 13 138 1 13 142 1 13 145 1 13 147 1 13 148 1 13 154 1 13 159 1 13 163 1 13 166 1 13 168 1 13 169 1 13 174 1 13 178 1 13 181 1 13 183 1 13 184 1 13 188 1 13 191 1 13 193 1 13 194 1 13 197 1 13 199 1 13 200 1 13 202 1 13 203 1 13 204 1 13 210 1 13 215 1 13 219 1 13 222 1 13 224 1 13 225 1 13 230 1 13 234 1 13 237 1 13 239 1 13 240 1 13 244 1 13 247 1 13 249 1 13 250 1 13 253 1 13 255 1 13 256 1 13 258 1 13 259 1 13 260 1 13 265 1 13 269 1 13 272 1 13 274 1 13 275 1 13 279 1 13 282 1 13 284 1 13 285 1 13 288 1 13 290 1 13 291 1 13 293 1 13 294 1 13 295 1 13 299 1 13 302 1 13 304 1 13 305 1 13 308 1 13 310 1 13 311 1 13 313 1 13 314 1 13 315 1 13 318 1 13 320 1 13 321 1 13 323 1 13 324 1 13 325 1 13 327 1 13 328 1 13 329 1 13 330 1 13 337 1 13 343 1 13 348 1 13 352 1 13 355 1 13 357 1 13 358 1 13 364 1 13 369 1 13 373 1 13 376 1 13 378 1 13 379 1 13 384 1 13 388 1 13 391 1 13 393 1 13 394 1 13 398 1 13 401 1 13 403 1 13 404 1 13 407 1 13 409 1 13 410 1 13 412 1 13 413 1 13 414 1 13 420 1 13 425 1 13 429 1 13 432 1 13 434 1 13 435 1 13 440 1 13 444 1 13 447 1 13 449 1 13 450 1 13 454 1 13 457 1 13 459 1 13 460 1 13 463 1 13 465 1 13 466 1 13 468 1 13 469 1 13 470 1 13 475 1 13 479 1 13 482 1 13 484 1 13 485 1 13 489 1 13 492 1 13 494 1 13 495 1 13 498 1 13 500 1 13 501 1 13 503 1 13 504 1 13 505 1 13 509 1 13 512 1 13 514 1 13 515 1 13 518 1 13 520 1 13 521 1 13 523 1 13 524 1 13 525 1 13 528 1 13 530 1 13 531 1 13 533 1 13 534 1 13 535 1 13 537 1 13 538 1 13 539 1 13 540 1 13 546 1 13 551 1 13 555 1 13 558 1 13 560 1 13 561 1 13 566 1 13 570 1 13 573 1 13 575 1 13 576 1 13 580 1 13 583 1 13 585 1 13 586 1 13 589 1 13 591 1 13 592 1 13 594 1 13 595 1 13 596 1 13 601 1 13 605 1 13 608 1 13 610 1 13 611 1 13 615 1 13 618 1 13 620 1 13 621 1 13 624 1 13 626 1 13 627 1 13 629 1 13 630 1 13 631 1 13 635 1 13 638 1 13 640 1 13 641 1 13 644 1 13 646 1 13 647 1 13 649 1 13 650 1 13 651 1 13 654 1 13 656 1 13 657 1 13 659 1 13 660 1 13 661 1 13 663 1 13 664 1 13 665 1 13 666 1 13 671 1 13 675 1 13 678 1 13 680 1 13 681 1 13 685 1 13 688 1 13 690 1 13 691 1 13 694 1 13 696 1 13 697 1 13 699 1 13 700 1 13 701 1 13 705 1 13 708 1 13 710 1 13 711 1 13 714 1 13 716 1 13 717 1 13 719 1 13 720 1 13 721 1 13 724 1 13 726 1 13 727 1 13 729 1 13 730 1 13 731 1 13 733 1 13 734 1 13 735 1 13 736 1 13 740 1 13 743 1 13 745 1 13 746 1 13 749 1 13 751 1 13 752 1 13 754 1 13 755 1 13 756 1 13 759 1 13 761 1 13 762 1 13 764 1 13 765 1 13 766 1 13 768 1 13 769 1 13 770 1 13 771 1 13 774 1 13 776 1 13 777 1 13 779 1 13 780 1 13 781 1 13 783 1 13 784 1 13 785 1 13 786 1 13 788 1 13 789 1 13 790 1 13 791 1 13 792 1 13 799 1 13 805 1 13 810 1 13 814 1 13 817 1 13 819 1 13 820 1 13 826 1 13 831 1 13 835 1 13 838 1 13 840 1 13 841 1 13 846 1 13 850 1 13 853 1 13 855 1 13 856 1 13 860 1 13 863 1 13 865 1 13 866 1 13 869 1 13 871 1 13 872 1 13 874 1 13 875 1 13 876 1 13 882 1 13 887 1 13 891 1 13 894 1 13 896 1 13 897 1 13 902 1 13 906 1 13 909 1 13 911 1 13 912 1 13 916 1 13 919 1 13 921 1 13 922 1 13 925 1 13 927 1 13 928 1 13 930 1 13 931 1 13 932 1 13 937 1 13 941 1 13 944 1 13 946 1 13 947 1 13 951 1 13 954 1 13 956 1 13 957 1 13 960 1 13 962 1 13 963 1 13 965 1 13 966 1 13 967 1 13 971 1 13 974 1 13 976 1 13 977 1 13 980 1 13 982 1 13 983 1 13 985 1 13 986 1 13 987 1 13 990 1 13 992 1 13 993 1 13 995 1 13 996 1 13 997 1 13 999 1 13 1000 1 13 1001 1 13 1002 1 13 1008 1 13 1013 1 13 1017 1 13 1020 1 13 1022 1 13 1023 1 13 1028 1 13 1032 1 13 1035 1 13 1037 1 13 1038 1 13 1042 1 13 1045 1 13 1047 1 13 1048 1 13 1051 1 13 1053 1 13 1054 1 13 1056 1 13 1057 1 13 1058 1 13 1063 1 13 1067 1 13 1070 1 13 1072 1 13 1073 1 13 1077 1 13 1080 1 13 1082 1 13 1083 1 13 1086 1 13 1088 1 13 1089 1 13 1091 1 13 1092 1 13 1093 1 13 1097 1 13 1100 1 13 1102 1 13 1103 1 13 1106 1 13 1108 1 13 1109 1 13 1111 1 13 1112 1 13 1113 1 13 1116 1 13 1118 1 13 1119 1 13 1121 1 13 1122 1 13 1123 1 13 1125 1 13 1126 1 13 1127 1 13 1128 1 13 1133 1 13 1137 1 13 1140 1 13 1142 1 13 1143 1 13 1147 1 13 1150 1 13 1152 1 13 1153 1 13 1156 1 13 1158 1 13 1159 1 13 1161 1 13 1162 1 13 1163 1 13 1167 1 13 1170 1 13 1172 1 13 1173 1 13 1176 1 13 1178 1 13 1179 1 13 1181 1 13 1182 1 13 1183 1 13 1186 1 13 1188 1 13 1189 1 13 1191 1 13 1192 1 13 1193 1 13 1195 1 13 1196 1 13 1197 1 13 1198 1 13 1202 1 13 1205 1 13 1207 1 13 1208 1 13 1211 1 13 1213 1 13 1214 1 13 1216 1 13 1217 1 13 1218 1 13 1221 1 13 1223 1 13 1224 1 13 1226 1 13 1227 1 13 1228 1 13 1230 1 13 1231 1 13 1232 1 13 1233 1 13 1236 1 13 1238 1 13 1239 1 13 1241 1 13 1242 1 13 1243 1 13 1245 1 13 1246 1 13 1247 1 13 1248 1 13 1250 1 13 1251 1 13 1252 1 13 1253 1 13 1254 1 13 1260 1 13 1265 1 13 1269 1 13 1272 1 13 1274 1 13 1275 1 13 1280 1 13 1284 1 13 1287 1 13 1289 1 13 1290 1 13 1294 1 13 1297 1 13 1299 1 13 1300 1 13 1303 1 13 1305 1 13 1306 1 13 1308 1 13 1309 1 13 1310 1 13 1315 1 13 1319 1 13 1322 1 13 1324 1 13 1325 1 13 1329 1 13 1332 1 13 1334 1 13 1335 1 13 1338 1 13 1340 1 13 1341 1 13 1343 1 13 1344 1 13 1345 1 13 1349 1 13 1352 1 13 1354 1 13 1355 1 13 1358 1 13 1360 1 13 1361 1 13 1363 1 13 1364 1 13 1365 1 13 1368 1 13 1370 1 13 1371 1 13 1373 1 13 1374 1 13 1375 1 13 1377 1 13 1378 1 13 1379 1 13 1380 1 13 1385 1 13 1389 1 13 1392 1 13 1394 1 13 1395 1 13 1399 1 13 1402 1 13 1404 1 13 1405 1 13 1408 1 13 1410 1 13 1411 1 13 1413 1 13 1414 1 13 1415 1 13 1419 1 13 1422 1 13 1424 1 13 1425 1 13 1428 1 13 1430 1 13 1431 1 13 1433 1 13 1434 1 13 1435 1 13 1438 1 13 1440 1 13 1441 1 13 1443 1 13 1444 1 13 1445 1 13 1447 1 13 1448 1 13 1449 1 13 1450 1 13 1454 1 13 1457 1 13 1459 1 13 1460 1 13 1463 1 13 1465 1 13 1466 1 13 1468 1 13 1469 1 13 1470 1 13 1473 1 13 1475 1 13 1476 1 13 1478 1 13 1479 1 13 1480 1 13 1482 1 13 1483 1 13 1484 1 13 1485 1 13 1488 1 13 1490 1 13 1491 1 13 1493 1 13 1494 1 13 1495 1 13 1497 1 13 1498 1 13 1499 1 13 1500 1 13 1502 1 13 1503 1 13 1504 1 13 1505 1 13 1506 1 13 1511 1 13 1515 1 13 1518 1 13 1520 1 13 1521 1 13 1525 1 13 1528 1 13 1530 1 13 1531 1 13 1534 1 13 1536 1 13 1537 1 13 1539 1 13 1540 1 13 1541 1 13 1545 1 13 1548 1 13 1550 1 13 1551 1 13 1554 1 13 1556 1 13 1557 1 13 1559 1 13 1560 1 13 1561 1 13 1564 1 13 1566 1 13 1567 1 13 1569 1 13 1570 1 13 1571 1 13 1573 1 13 1574 1 13 1575 1 13 1576 1 13 1580 1 13 1583 1 13 1585 1 13 1586 1 13 1589 1 13 1591 1 13 1592 1 13 1594 1 13 1595 1 13 1596 1 13 1599 1 13 1601 1 13 1602 1 13 1604 1 13 1605 1 13 1606 1 13 1608 1 13 1609 1 13 1610 1 13 1611 1 13 1614 1 13 1616 1 13 1617 1 13 1619 1 13 1620 1 13 1621 1 13 1623 1 13 1624 1 13 1625 1 13 1626 1 13 1628 1 13 1629 1 13 1630 1 13 1631 1 13 1632 1 13 1636 1 13 1639 1 13 1641 1 13 1642 1 13 1645 1 13 1647 1 13 1648 1 13 1650 1 13 1651 1 13 1652 1 13 1655 1 13 1657 1 13 1658 1 13 1660 1 13 1661 1 13 1662 1 13 1664 1 13 1665 1 13 1666 1 13 1667 1 13 1670 1 13 1672 1 13 1673 1 13 1675 1 13 1676 1 13 1677 1 13 1679 1 13 1680 1 13 1681 1 13 1682 1 13 1684 1 13 1685 1 13 1686 1 13 1687 1 13 1688 1 13 1691 1 13 1693 1 13 1694 1 13 1696 1 13 1697 1 13 1698 1 13 1700 1 13 1701 1 13 1702 1 13 1703 1 13 1705 1 13 1706 1 13 1707 1 13 1708 1 13 1709 1 13 1711 1 13 1712 1 13 1713 1 13 1714 1 13 1715 1 13 1716 1 14 1 1 14 2 1 14 3 1 14 4 1 14 5 1 14 6 1 14 7 1 14 8 1 14 9 1 14 10 1 14 11 1 14 12 1 14 13 1 14 14 1 14 15 1 14 16 1 14 17 1 14 18 1 14 19 1 14 20 1 14 21 1 14 22 1 14 23 1 14 24 1 14 25 1 14 26 1 14 27 1 14 28 1 14 29 1 14 30 1 14 31 1 14 32 1 14 33 1 14 34 1 14 35 1 14 36 1 14 37 1 14 38 1 14 39 1 14 40 1 14 41 1 14 42 1 14 43 1 14 44 1 14 45 1 14 46 1 14 47 1 14 48 1 14 49 1 14 50 1 14 51 1 14 52 1 14 53 1 14 54 1 14 55 1 14 56 1 14 57 1 14 58 1 14 59 1 14 60 1 14 61 1 14 62 1 14 63 1 14 64 1 14 65 1 14 66 1 14 67 1 14 68 1 14 69 1 14 70 1 14 71 1 14 72 1 14 73 1 14 74 1 14 75 1 14 76 1 14 77 1 14 78 1 14 79 1 14 80 1 14 81 1 14 82 1 14 83 1 14 84 1 14 85 1 14 86 1 14 87 1 14 88 1 14 89 1 14 90 1 14 91 1 14 92 1 14 93 1 14 94 1 14 95 1 14 96 1 14 97 1 14 98 1 14 99 1 14 100 1 14 101 1 14 102 1 14 103 1 14 104 1 14 105 1 14 106 1 14 107 1 14 108 1 14 109 1 14 110 1 14 111 1 14 112 1 14 113 1 14 114 1 14 115 1 14 116 1 14 117 1 14 118 1 14 119 1 14 120 1 14 121 1 14 122 1 14 123 1 14 124 1 14 125 1 14 126 1 14 127 1 14 128 1 14 129 1 14 130 1 14 131 1 14 132 1 14 133 1 14 134 1 14 135 1 14 136 1 14 137 1 14 138 1 14 139 1 14 140 1 14 141 1 14 142 1 14 143 1 14 144 1 14 145 1 14 146 1 14 147 1 14 148 1 14 149 1 14 150 1 14 151 1 14 152 1 14 153 1 14 154 1 14 155 1 14 156 1 14 157 1 14 158 1 14 159 1 14 160 1 14 161 1 14 162 1 14 163 1 14 164 1 14 165 1 14 166 1 14 167 1 14 168 1 14 169 1 14 170 1 14 171 1 14 172 1 14 173 1 14 174 1 14 175 1 14 176 1 14 177 1 14 178 1 14 179 1 14 180 1 14 181 1 14 182 1 14 183 1 14 184 1 14 185 1 14 186 1 14 187 1 14 188 1 14 189 1 14 190 1 14 191 1 14 192 1 14 193 1 14 194 1 14 195 1 14 196 1 14 197 1 14 198 1 14 199 1 14 200 1 14 201 1 14 202 1 14 203 1 14 204 1 14 205 1 14 206 1 14 207 1 14 208 1 14 209 1 14 210 1 14 211 1 14 212 1 14 213 1 14 214 1 14 215 1 14 216 1 14 217 1 14 218 1 14 219 1 14 220 1 14 221 1 14 222 1 14 223 1 14 224 1 14 225 1 14 226 1 14 227 1 14 228 1 14 229 1 14 230 1 14 231 1 14 232 1 14 233 1 14 234 1 14 235 1 14 236 1 14 237 1 14 238 1 14 239 1 14 240 1 14 241 1 14 242 1 14 243 1 14 244 1 14 245 1 14 246 1 14 247 1 14 248 1 14 249 1 14 250 1 14 251 1 14 252 1 14 253 1 14 254 1 14 255 1 14 256 1 14 257 1 14 258 1 14 259 1 14 260 1 14 261 1 14 262 1 14 263 1 14 264 1 14 265 1 14 266 1 14 267 1 14 268 1 14 269 1 14 270 1 14 271 1 14 272 1 14 273 1 14 274 1 14 275 1 14 276 1 14 277 1 14 278 1 14 279 1 14 280 1 14 281 1 14 282 1 14 283 1 14 284 1 14 285 1 14 286 1 14 287 1 14 288 1 14 289 1 14 290 1 14 291 1 14 292 1 14 293 1 14 294 1 14 295 1 14 296 1 14 297 1 14 298 1 14 299 1 14 300 1 14 301 1 14 302 1 14 303 1 14 304 1 14 305 1 14 306 1 14 307 1 14 308 1 14 309 1 14 310 1 14 311 1 14 312 1 14 313 1 14 314 1 14 315 1 14 316 1 14 317 1 14 318 1 14 319 1 14 320 1 14 321 1 14 322 1 14 323 1 14 324 1 14 325 1 14 326 1 14 327 1 14 328 1 14 329 1 14 330 1 14 1717 1 14 1718 1 14 1719 1 14 1720 1 14 1721 1 14 1722 1 14 1723 1 14 1724 1 14 1725 1 14 1726 1 14 1727 1 14 1728 1 14 1729 1 14 1730 1 14 1731 1 14 1732 1 14 1733 1 14 1734 1 14 1735 1 14 1736 1 14 1737 1 14 1738 1 14 1739 1 14 1740 1 14 1741 1 14 1742 1 14 1743 1 14 1744 1 14 1745 1 14 1746 1 14 1747 1 14 1748 1 14 1749 1 14 1750 1 14 1751 1 14 1752 1 14 1753 1 14 1754 1 14 1755 1 14 1756 1 14 1757 1 14 1758 1 14 1759 1 14 1760 1 14 1761 1 14 1762 1 14 1763 1 14 1764 1 14 1765 1 14 1766 1 14 1767 1 14 1768 1 14 1769 1 14 1770 1 14 1771 1 14 1772 1 14 1773 1 14 1774 1 14 1775 1 14 1776 1 14 1777 1 14 1778 1 14 1779 1 14 1780 1 14 1781 1 14 1782 1 14 1783 1 14 1784 1 14 1785 1 14 1786 1 14 1787 1 14 1788 1 14 1789 1 14 1790 1 14 1791 1 14 1792 1 14 1793 1 14 1794 1 14 1795 1 14 1796 1 14 1797 1 14 1798 1 14 1799 1 14 1800 1 14 1801 1 14 1802 1 14 1803 1 14 1804 1 14 1805 1 14 1806 1 14 1807 1 14 1808 1 14 1809 1 14 1810 1 14 1811 1 14 1812 1 14 1813 1 14 1814 1 14 1815 1 14 1816 1 14 1817 1 14 1818 1 14 1819 1 14 1820 1 14 1821 1 14 1822 1 14 1823 1 14 1824 1 14 1825 1 14 1826 1 14 1827 1 14 1828 1 14 1829 1 14 1830 1 14 1831 1 14 1832 1 14 1833 1 14 1834 1 14 1835 1 14 1836 1 14 1837 1 14 1838 1 14 1839 1 14 1840 1 14 1841 1 14 1842 1 14 1843 1 14 1844 1 14 1845 1 14 1846 1 14 1847 1 14 1848 1 14 1849 1 14 1850 1 14 1851 1 14 1852 1 14 1853 1 14 1854 1 14 1855 1 14 1856 1 14 1857 1 14 1858 1 14 1859 1 14 1860 1 14 1861 1 14 1862 1 14 1863 1 14 1864 1 14 1865 1 14 1866 1 14 1867 1 14 1868 1 14 1869 1 14 1870 1 14 1871 1 14 1872 1 14 1873 1 14 1874 1 14 1875 1 14 1876 1 14 1877 1 14 1878 1 14 1879 1 14 1880 1 14 1881 1 14 1882 1 14 1883 1 14 1884 1 14 1885 1 14 1886 1 14 1887 1 14 1888 1 14 1889 1 14 1890 1 14 1891 1 14 1892 1 14 1893 1 14 1894 1 14 1895 1 14 1896 1 14 1897 1 14 1898 1 14 1899 1 14 1900 1 14 1901 1 14 1902 1 14 1903 1 14 1904 1 14 1905 1 14 1906 1 14 1907 1 14 1908 1 14 1909 1 14 1910 1 14 1911 1 14 1912 1 14 1913 1 14 1914 1 14 1915 1 14 1916 1 14 1917 1 14 1918 1 14 1919 1 14 1920 1 14 1921 1 14 1922 1 14 1923 1 14 1924 1 14 1925 1 14 1926 1 14 1927 1 14 1928 1 14 1929 1 14 1930 1 14 1931 1 14 1932 1 14 1933 1 14 1934 1 14 1935 1 14 1936 1 14 1937 1 14 1938 1 14 1939 1 14 1940 1 14 1941 1 14 1942 1 14 1943 1 14 1944 1 14 1945 1 14 1946 1 14 1947 1 14 1948 1 14 1949 1 14 1950 1 14 1951 1 14 1952 1 14 1953 1 14 1954 1 14 1955 1 14 1956 1 14 1957 1 14 1958 1 14 1959 1 14 1960 1 14 1961 1 14 1962 1 14 1963 1 14 1964 1 14 1965 1 14 1966 1 14 1967 1 14 1968 1 14 1969 1 14 1970 1 14 1971 1 14 1972 1 14 1973 1 14 1974 1 14 1975 1 14 1976 1 14 1977 1 14 1978 1 14 1979 1 14 1980 1 14 1981 1 14 1982 1 14 1983 1 14 1984 1 14 1985 1 14 1986 1 14 1987 1 14 1988 1 14 1989 1 14 1990 1 14 1991 1 14 1992 1 14 1993 1 14 1994 1 14 1995 1 14 1996 1 14 1997 1 14 1998 1 14 1999 1 14 2000 1 14 2001 1 14 2002 1 14 2003 1 14 2004 1 14 2005 1 14 2006 1 14 2007 1 14 2008 1 14 2009 1 14 2010 1 14 2011 1 14 2012 1 14 2013 1 14 2014 1 14 2015 1 14 2016 1 14 2017 1 14 2018 1 14 2019 1 14 2020 1 14 2021 1 14 2022 1 14 2023 1 14 2024 1 14 2025 1 14 2026 1 14 2027 1 14 2028 1 14 2029 1 14 2030 1 14 2031 1 14 2032 1 14 2033 1 14 2034 1 14 2035 1 14 2036 1 14 2037 1 14 2038 1 14 2039 1 14 2040 1 14 2041 1 14 2042 1 14 2043 1 14 2044 1 14 2045 1 14 2046 1 14 2047 1 14 2048 1 14 2049 1 14 2050 1 14 2051 1 14 2052 1 14 2053 1 14 2054 1 14 2055 1 14 2056 1 14 2057 1 14 2058 1 14 2059 1 14 2060 1 14 2061 1 14 2062 1 14 2063 1 14 2064 1 14 2065 1 14 2066 1 14 2067 1 14 2068 1 14 2069 1 14 2070 1 14 2071 1 14 2072 1 14 2073 1 14 2074 1 14 2075 1 14 2076 1 14 2077 1 14 2078 1 14 2079 1 14 2080 1 14 2081 1 14 2082 1 14 2083 1 14 2084 1 14 2085 1 14 2086 1 14 2087 1 14 2088 1 14 2089 1 14 2090 1 14 2091 1 14 2092 1 14 2093 1 14 2094 1 14 2095 1 14 2096 1 14 2097 1 14 2098 1 14 2099 1 14 2100 1 14 2101 1 14 2102 1 14 2103 1 14 2104 1 14 2105 1 14 2106 1 14 2107 1 14 2108 1 14 2109 1 14 2110 1 14 2111 1 14 2112 1 14 2113 1 14 2114 1 14 2115 1 14 2116 1 14 2117 1 14 2118 1 14 2119 1 14 2120 1 14 2121 1 14 2122 1 14 2123 1 14 2124 1 14 2125 1 14 2126 1 14 2127 1 14 2128 1 14 2129 1 14 2130 1 14 2131 1 14 2132 1 14 2133 1 14 2134 1 14 2135 1 14 2136 1 14 2137 1 14 2138 1 14 2139 1 14 2140 1 14 2141 1 14 2142 1 14 2143 1 14 2144 1 14 2145 1 14 2146 1 14 2147 1 14 2148 1 14 2149 1 14 2150 1 14 2151 1 14 2152 1 14 2153 1 14 2154 1 14 2155 1 14 2156 1 14 2157 1 14 2158 1 14 2159 1 14 2160 1 14 2161 1 14 2162 1 14 2163 1 14 2164 1 14 2165 1 14 2166 1 14 2167 1 14 2168 1 14 2169 1 14 2170 1 14 2171 1 14 2172 1 14 2173 1 14 2174 1 14 2175 1 14 2176 1 14 2177 1 14 2178 1 15 1 1 15 2 1 15 3 1 15 4 1 15 5 1 15 6 1 15 7 1 15 8 1 15 9 1 15 10 1 15 11 1 15 12 1 15 13 1 15 14 1 15 15 1 15 16 1 15 17 1 15 18 1 15 19 1 15 20 1 15 21 1 15 22 1 15 23 1 15 24 1 15 25 1 15 26 1 15 27 1 15 28 1 15 29 1 15 30 1 15 31 1 15 32 1 15 33 1 15 34 1 15 35 1 15 36 1 15 37 1 15 38 1 15 39 1 15 40 1 15 41 1 15 42 1 15 43 1 15 44 1 15 45 1 15 46 1 15 47 1 15 48 1 15 49 1 15 50 1 15 51 1 15 52 1 15 53 1 15 54 1 15 55 1 15 56 1 15 57 1 15 58 1 15 59 1 15 60 1 15 61 1 15 62 1 15 63 1 15 64 1 15 65 1 15 66 1 15 67 1 15 68 1 15 69 1 15 70 1 15 71 1 15 72 1 15 73 1 15 74 1 15 75 1 15 76 1 15 77 1 15 78 1 15 79 1 15 80 1 15 81 1 15 82 1 15 83 1 15 84 1 15 85 1 15 86 1 15 87 1 15 88 1 15 89 1 15 90 1 15 91 1 15 92 1 15 93 1 15 94 1 15 95 1 15 96 1 15 97 1 15 98 1 15 99 1 15 100 1 15 101 1 15 102 1 15 103 1 15 104 1 15 105 1 15 106 1 15 107 1 15 108 1 15 109 1 15 110 1 15 111 1 15 112 1 15 113 1 15 114 1 15 115 1 15 116 1 15 117 1 15 118 1 15 119 1 15 120 1 15 331 1 15 332 1 15 333 1 15 334 1 15 335 1 15 336 1 15 337 1 15 338 1 15 339 1 15 340 1 15 341 1 15 342 1 15 343 1 15 344 1 15 345 1 15 346 1 15 347 1 15 348 1 15 349 1 15 350 1 15 351 1 15 352 1 15 353 1 15 354 1 15 355 1 15 356 1 15 357 1 15 358 1 15 359 1 15 360 1 15 361 1 15 362 1 15 363 1 15 364 1 15 365 1 15 366 1 15 367 1 15 368 1 15 369 1 15 370 1 15 371 1 15 372 1 15 373 1 15 374 1 15 375 1 15 376 1 15 377 1 15 378 1 15 379 1 15 380 1 15 381 1 15 382 1 15 383 1 15 384 1 15 385 1 15 386 1 15 387 1 15 388 1 15 389 1 15 390 1 15 391 1 15 392 1 15 393 1 15 394 1 15 395 1 15 396 1 15 397 1 15 398 1 15 399 1 15 400 1 15 401 1 15 402 1 15 403 1 15 404 1 15 405 1 15 406 1 15 407 1 15 408 1 15 409 1 15 410 1 15 411 1 15 412 1 15 413 1 15 414 1 15 415 1 15 416 1 15 417 1 15 418 1 15 419 1 15 420 1 15 421 1 15 422 1 15 423 1 15 424 1 15 425 1 15 426 1 15 427 1 15 428 1 15 429 1 15 430 1 15 431 1 15 432 1 15 433 1 15 434 1 15 435 1 15 436 1 15 437 1 15 438 1 15 439 1 15 440 1 15 441 1 15 442 1 15 443 1 15 444 1 15 445 1 15 446 1 15 447 1 15 448 1 15 449 1 15 450 1 15 451 1 15 452 1 15 453 1 15 454 1 15 455 1 15 456 1 15 457 1 15 458 1 15 459 1 15 460 1 15 461 1 15 462 1 15 463 1 15 464 1 15 465 1 15 466 1 15 467 1 15 468 1 15 469 1 15 470 1 15 471 1 15 472 1 15 473 1 15 474 1 15 475 1 15 476 1 15 477 1 15 478 1 15 479 1 15 480 1 15 481 1 15 482 1 15 483 1 15 484 1 15 485 1 15 486 1 15 487 1 15 488 1 15 489 1 15 490 1 15 491 1 15 492 1 15 493 1 15 494 1 15 495 1 15 496 1 15 497 1 15 498 1 15 499 1 15 500 1 15 501 1 15 502 1 15 503 1 15 504 1 15 505 1 15 506 1 15 507 1 15 508 1 15 509 1 15 510 1 15 511 1 15 512 1 15 513 1 15 514 1 15 515 1 15 516 1 15 517 1 15 518 1 15 519 1 15 520 1 15 521 1 15 522 1 15 523 1 15 524 1 15 525 1 15 526 1 15 527 1 15 528 1 15 529 1 15 530 1 15 531 1 15 532 1 15 533 1 15 534 1 15 535 1 15 536 1 15 537 1 15 538 1 15 539 1 15 540 1 15 1717 1 15 1718 1 15 1719 1 15 1720 1 15 1721 1 15 1722 1 15 1723 1 15 1724 1 15 1725 1 15 1726 1 15 1727 1 15 1728 1 15 1729 1 15 1730 1 15 1731 1 15 1732 1 15 1733 1 15 1734 1 15 1735 1 15 1736 1 15 1737 1 15 1738 1 15 1739 1 15 1740 1 15 1741 1 15 1742 1 15 1743 1 15 1744 1 15 1745 1 15 1746 1 15 1747 1 15 1748 1 15 1749 1 15 1750 1 15 1751 1 15 1752 1 15 1753 1 15 1754 1 15 1755 1 15 1756 1 15 1757 1 15 1758 1 15 1759 1 15 1760 1 15 1761 1 15 1762 1 15 1763 1 15 1764 1 15 1765 1 15 1766 1 15 1767 1 15 1768 1 15 1769 1 15 1770 1 15 1771 1 15 1772 1 15 1773 1 15 1774 1 15 1775 1 15 1776 1 15 1777 1 15 1778 1 15 1779 1 15 1780 1 15 1781 1 15 1782 1 15 1783 1 15 1784 1 15 1785 1 15 1786 1 15 1787 1 15 1788 1 15 1789 1 15 1790 1 15 1791 1 15 1792 1 15 1793 1 15 1794 1 15 1795 1 15 1796 1 15 1797 1 15 1798 1 15 1799 1 15 1800 1 15 1801 1 15 1802 1 15 1803 1 15 1804 1 15 1805 1 15 1806 1 15 1807 1 15 1808 1 15 1809 1 15 1810 1 15 1811 1 15 1812 1 15 1813 1 15 1814 1 15 1815 1 15 1816 1 15 1817 1 15 1818 1 15 1819 1 15 1820 1 15 1821 1 15 1822 1 15 1823 1 15 1824 1 15 1825 1 15 1826 1 15 1827 1 15 1828 1 15 1829 1 15 1830 1 15 1831 1 15 1832 1 15 1833 1 15 1834 1 15 1835 1 15 1836 1 15 1837 1 15 1838 1 15 1839 1 15 1840 1 15 1841 1 15 1842 1 15 1843 1 15 1844 1 15 1845 1 15 1846 1 15 1847 1 15 1848 1 15 1849 1 15 1850 1 15 1851 1 15 1852 1 15 1853 1 15 1854 1 15 1855 1 15 1856 1 15 1857 1 15 1858 1 15 1859 1 15 1860 1 15 1861 1 15 1862 1 15 1863 1 15 1864 1 15 1865 1 15 1866 1 15 1867 1 15 1868 1 15 1869 1 15 1870 1 15 1871 1 15 1872 1 15 1873 1 15 1874 1 15 1875 1 15 1876 1 15 1877 1 15 1878 1 15 1879 1 15 1880 1 15 1881 1 15 1882 1 15 1883 1 15 1884 1 15 1885 1 15 1886 1 15 1887 1 15 1888 1 15 1889 1 15 1890 1 15 1891 1 15 1892 1 15 1893 1 15 1894 1 15 1895 1 15 1896 1 15 1897 1 15 1898 1 15 1899 1 15 1900 1 15 1901 1 15 1902 1 15 1903 1 15 1904 1 15 1905 1 15 1906 1 15 1907 1 15 1908 1 15 1909 1 15 1910 1 15 1911 1 15 1912 1 15 1913 1 15 1914 1 15 1915 1 15 1916 1 15 1917 1 15 1918 1 15 1919 1 15 1920 1 15 1921 1 15 1922 1 15 1923 1 15 1924 1 15 1925 1 15 1926 1 15 2179 1 15 2180 1 15 2181 1 15 2182 1 15 2183 1 15 2184 1 15 2185 1 15 2186 1 15 2187 1 15 2188 1 15 2189 1 15 2190 1 15 2191 1 15 2192 1 15 2193 1 15 2194 1 15 2195 1 15 2196 1 15 2197 1 15 2198 1 15 2199 1 15 2200 1 15 2201 1 15 2202 1 15 2203 1 15 2204 1 15 2205 1 15 2206 1 15 2207 1 15 2208 1 15 2209 1 15 2210 1 15 2211 1 15 2212 1 15 2213 1 15 2214 1 15 2215 1 15 2216 1 15 2217 1 15 2218 1 15 2219 1 15 2220 1 15 2221 1 15 2222 1 15 2223 1 15 2224 1 15 2225 1 15 2226 1 15 2227 1 15 2228 1 15 2229 1 15 2230 1 15 2231 1 15 2232 1 15 2233 1 15 2234 1 15 2235 1 15 2236 1 15 2237 1 15 2238 1 15 2239 1 15 2240 1 15 2241 1 15 2242 1 15 2243 1 15 2244 1 15 2245 1 15 2246 1 15 2247 1 15 2248 1 15 2249 1 15 2250 1 15 2251 1 15 2252 1 15 2253 1 15 2254 1 15 2255 1 15 2256 1 15 2257 1 15 2258 1 15 2259 1 15 2260 1 15 2261 1 15 2262 1 15 2263 1 15 2264 1 15 2265 1 15 2266 1 15 2267 1 15 2268 1 15 2269 1 15 2270 1 15 2271 1 15 2272 1 15 2273 1 15 2274 1 15 2275 1 15 2276 1 15 2277 1 15 2278 1 15 2279 1 15 2280 1 15 2281 1 15 2282 1 15 2283 1 15 2284 1 15 2285 1 15 2286 1 15 2287 1 15 2288 1 15 2289 1 15 2290 1 15 2291 1 15 2292 1 15 2293 1 15 2294 1 15 2295 1 15 2296 1 15 2297 1 15 2298 1 15 2299 1 15 2300 1 15 2301 1 15 2302 1 15 2303 1 15 2304 1 15 2305 1 15 2306 1 15 2307 1 15 2308 1 15 2309 1 15 2310 1 15 2311 1 15 2312 1 15 2313 1 15 2314 1 15 2315 1 15 2316 1 15 2317 1 15 2318 1 15 2319 1 15 2320 1 15 2321 1 15 2322 1 15 2323 1 15 2324 1 15 2325 1 15 2326 1 15 2327 1 15 2328 1 15 2329 1 15 2330 1 15 2331 1 15 2332 1 15 2333 1 15 2334 1 15 2335 1 15 2336 1 15 2337 1 15 2338 1 15 2339 1 15 2340 1 15 2341 1 15 2342 1 15 2343 1 15 2344 1 15 2345 1 15 2346 1 15 2347 1 15 2348 1 15 2349 1 15 2350 1 15 2351 1 15 2352 1 15 2353 1 15 2354 1 15 2355 1 15 2356 1 15 2357 1 15 2358 1 15 2359 1 15 2360 1 15 2361 1 15 2362 1 15 2363 1 15 2364 1 15 2365 1 15 2366 1 15 2367 1 15 2368 1 15 2369 1 15 2370 1 15 2371 1 15 2372 1 15 2373 1 15 2374 1 15 2375 1 15 2376 1 15 2377 1 15 2378 1 15 2379 1 15 2380 1 15 2381 1 15 2382 1 15 2383 1 15 2384 1 15 2385 1 15 2386 1 15 2387 1 15 2388 1 15 2389 1 15 2390 1 15 2391 1 15 2392 1 15 2393 1 15 2394 1 15 2395 1 15 2396 1 15 2397 1 15 2398 1 15 2399 1 15 2400 1 15 2401 1 15 2402 1 15 2403 1 15 2404 1 15 2405 1 15 2406 1 15 2407 1 15 2408 1 15 2409 1 15 2410 1 15 2411 1 15 2412 1 15 2413 1 15 2414 1 15 2415 1 15 2416 1 15 2417 1 15 2418 1 15 2419 1 15 2420 1 15 2421 1 15 2422 1 15 2423 1 15 2424 1 15 2425 1 15 2426 1 15 2427 1 15 2428 1 15 2429 1 15 2430 1 16 1 1 16 2 1 16 3 1 16 4 1 16 5 1 16 6 1 16 7 1 16 8 1 16 9 1 16 10 1 16 11 1 16 12 1 16 13 1 16 14 1 16 15 1 16 16 1 16 17 1 16 18 1 16 19 1 16 20 1 16 21 1 16 22 1 16 23 1 16 24 1 16 25 1 16 26 1 16 27 1 16 28 1 16 29 1 16 30 1 16 31 1 16 32 1 16 33 1 16 34 1 16 35 1 16 36 1 16 121 1 16 122 1 16 123 1 16 124 1 16 125 1 16 126 1 16 127 1 16 128 1 16 129 1 16 130 1 16 131 1 16 132 1 16 133 1 16 134 1 16 135 1 16 136 1 16 137 1 16 138 1 16 139 1 16 140 1 16 141 1 16 142 1 16 143 1 16 144 1 16 145 1 16 146 1 16 147 1 16 148 1 16 149 1 16 150 1 16 151 1 16 152 1 16 153 1 16 154 1 16 155 1 16 156 1 16 157 1 16 158 1 16 159 1 16 160 1 16 161 1 16 162 1 16 163 1 16 164 1 16 165 1 16 166 1 16 167 1 16 168 1 16 169 1 16 170 1 16 171 1 16 172 1 16 173 1 16 174 1 16 175 1 16 176 1 16 177 1 16 178 1 16 179 1 16 180 1 16 181 1 16 182 1 16 183 1 16 184 1 16 185 1 16 186 1 16 187 1 16 188 1 16 189 1 16 190 1 16 191 1 16 192 1 16 193 1 16 194 1 16 195 1 16 196 1 16 197 1 16 198 1 16 199 1 16 200 1 16 201 1 16 202 1 16 203 1 16 204 1 16 331 1 16 332 1 16 333 1 16 334 1 16 335 1 16 336 1 16 337 1 16 338 1 16 339 1 16 340 1 16 341 1 16 342 1 16 343 1 16 344 1 16 345 1 16 346 1 16 347 1 16 348 1 16 349 1 16 350 1 16 351 1 16 352 1 16 353 1 16 354 1 16 355 1 16 356 1 16 357 1 16 358 1 16 359 1 16 360 1 16 361 1 16 362 1 16 363 1 16 364 1 16 365 1 16 366 1 16 367 1 16 368 1 16 369 1 16 370 1 16 371 1 16 372 1 16 373 1 16 374 1 16 375 1 16 376 1 16 377 1 16 378 1 16 379 1 16 380 1 16 381 1 16 382 1 16 383 1 16 384 1 16 385 1 16 386 1 16 387 1 16 388 1 16 389 1 16 390 1 16 391 1 16 392 1 16 393 1 16 394 1 16 395 1 16 396 1 16 397 1 16 398 1 16 399 1 16 400 1 16 401 1 16 402 1 16 403 1 16 404 1 16 405 1 16 406 1 16 407 1 16 408 1 16 409 1 16 410 1 16 411 1 16 412 1 16 413 1 16 414 1 16 541 1 16 542 1 16 543 1 16 544 1 16 545 1 16 546 1 16 547 1 16 548 1 16 549 1 16 550 1 16 551 1 16 552 1 16 553 1 16 554 1 16 555 1 16 556 1 16 557 1 16 558 1 16 559 1 16 560 1 16 561 1 16 562 1 16 563 1 16 564 1 16 565 1 16 566 1 16 567 1 16 568 1 16 569 1 16 570 1 16 571 1 16 572 1 16 573 1 16 574 1 16 575 1 16 576 1 16 577 1 16 578 1 16 579 1 16 580 1 16 581 1 16 582 1 16 583 1 16 584 1 16 585 1 16 586 1 16 587 1 16 588 1 16 589 1 16 590 1 16 591 1 16 592 1 16 593 1 16 594 1 16 595 1 16 596 1 16 597 1 16 598 1 16 599 1 16 600 1 16 601 1 16 602 1 16 603 1 16 604 1 16 605 1 16 606 1 16 607 1 16 608 1 16 609 1 16 610 1 16 611 1 16 612 1 16 613 1 16 614 1 16 615 1 16 616 1 16 617 1 16 618 1 16 619 1 16 620 1 16 621 1 16 622 1 16 623 1 16 624 1 16 625 1 16 626 1 16 627 1 16 628 1 16 629 1 16 630 1 16 631 1 16 632 1 16 633 1 16 634 1 16 635 1 16 636 1 16 637 1 16 638 1 16 639 1 16 640 1 16 641 1 16 642 1 16 643 1 16 644 1 16 645 1 16 646 1 16 647 1 16 648 1 16 649 1 16 650 1 16 651 1 16 652 1 16 653 1 16 654 1 16 655 1 16 656 1 16 657 1 16 658 1 16 659 1 16 660 1 16 661 1 16 662 1 16 663 1 16 664 1 16 665 1 16 666 1 16 1717 1 16 1718 1 16 1719 1 16 1720 1 16 1721 1 16 1722 1 16 1723 1 16 1724 1 16 1725 1 16 1726 1 16 1727 1 16 1728 1 16 1729 1 16 1730 1 16 1731 1 16 1732 1 16 1733 1 16 1734 1 16 1735 1 16 1736 1 16 1737 1 16 1738 1 16 1739 1 16 1740 1 16 1741 1 16 1742 1 16 1743 1 16 1744 1 16 1745 1 16 1746 1 16 1747 1 16 1748 1 16 1749 1 16 1750 1 16 1751 1 16 1752 1 16 1753 1 16 1754 1 16 1755 1 16 1756 1 16 1757 1 16 1758 1 16 1759 1 16 1760 1 16 1761 1 16 1762 1 16 1763 1 16 1764 1 16 1765 1 16 1766 1 16 1767 1 16 1768 1 16 1769 1 16 1770 1 16 1771 1 16 1772 1 16 1773 1 16 1774 1 16 1775 1 16 1776 1 16 1777 1 16 1778 1 16 1779 1 16 1780 1 16 1781 1 16 1782 1 16 1783 1 16 1784 1 16 1785 1 16 1786 1 16 1787 1 16 1788 1 16 1789 1 16 1790 1 16 1791 1 16 1792 1 16 1793 1 16 1794 1 16 1795 1 16 1796 1 16 1797 1 16 1798 1 16 1799 1 16 1800 1 16 1927 1 16 1928 1 16 1929 1 16 1930 1 16 1931 1 16 1932 1 16 1933 1 16 1934 1 16 1935 1 16 1936 1 16 1937 1 16 1938 1 16 1939 1 16 1940 1 16 1941 1 16 1942 1 16 1943 1 16 1944 1 16 1945 1 16 1946 1 16 1947 1 16 1948 1 16 1949 1 16 1950 1 16 1951 1 16 1952 1 16 1953 1 16 1954 1 16 1955 1 16 1956 1 16 1957 1 16 1958 1 16 1959 1 16 1960 1 16 1961 1 16 1962 1 16 1963 1 16 1964 1 16 1965 1 16 1966 1 16 1967 1 16 1968 1 16 1969 1 16 1970 1 16 1971 1 16 1972 1 16 1973 1 16 1974 1 16 1975 1 16 1976 1 16 1977 1 16 1978 1 16 1979 1 16 1980 1 16 1981 1 16 1982 1 16 1983 1 16 1984 1 16 1985 1 16 1986 1 16 1987 1 16 1988 1 16 1989 1 16 1990 1 16 1991 1 16 1992 1 16 1993 1 16 1994 1 16 1995 1 16 1996 1 16 1997 1 16 1998 1 16 1999 1 16 2000 1 16 2001 1 16 2002 1 16 2003 1 16 2004 1 16 2005 1 16 2006 1 16 2007 1 16 2008 1 16 2009 1 16 2010 1 16 2011 1 16 2012 1 16 2013 1 16 2014 1 16 2015 1 16 2016 1 16 2017 1 16 2018 1 16 2019 1 16 2020 1 16 2021 1 16 2022 1 16 2023 1 16 2024 1 16 2025 1 16 2026 1 16 2027 1 16 2028 1 16 2029 1 16 2030 1 16 2031 1 16 2032 1 16 2033 1 16 2034 1 16 2035 1 16 2036 1 16 2037 1 16 2038 1 16 2039 1 16 2040 1 16 2041 1 16 2042 1 16 2043 1 16 2044 1 16 2045 1 16 2046 1 16 2047 1 16 2048 1 16 2049 1 16 2050 1 16 2051 1 16 2052 1 16 2179 1 16 2180 1 16 2181 1 16 2182 1 16 2183 1 16 2184 1 16 2185 1 16 2186 1 16 2187 1 16 2188 1 16 2189 1 16 2190 1 16 2191 1 16 2192 1 16 2193 1 16 2194 1 16 2195 1 16 2196 1 16 2197 1 16 2198 1 16 2199 1 16 2200 1 16 2201 1 16 2202 1 16 2203 1 16 2204 1 16 2205 1 16 2206 1 16 2207 1 16 2208 1 16 2209 1 16 2210 1 16 2211 1 16 2212 1 16 2213 1 16 2214 1 16 2215 1 16 2216 1 16 2217 1 16 2218 1 16 2219 1 16 2220 1 16 2221 1 16 2222 1 16 2223 1 16 2224 1 16 2225 1 16 2226 1 16 2227 1 16 2228 1 16 2229 1 16 2230 1 16 2231 1 16 2232 1 16 2233 1 16 2234 1 16 2235 1 16 2236 1 16 2237 1 16 2238 1 16 2239 1 16 2240 1 16 2241 1 16 2242 1 16 2243 1 16 2244 1 16 2245 1 16 2246 1 16 2247 1 16 2248 1 16 2249 1 16 2250 1 16 2251 1 16 2252 1 16 2253 1 16 2254 1 16 2255 1 16 2256 1 16 2257 1 16 2258 1 16 2259 1 16 2260 1 16 2261 1 16 2262 1 16 2263 1 16 2264 1 16 2265 1 16 2266 1 16 2267 1 16 2268 1 16 2269 1 16 2270 1 16 2271 1 16 2272 1 16 2273 1 16 2274 1 16 2275 1 16 2276 1 16 2277 1 16 2278 1 16 2279 1 16 2280 1 16 2281 1 16 2282 1 16 2283 1 16 2284 1 16 2285 1 16 2286 1 16 2287 1 16 2288 1 16 2289 1 16 2290 1 16 2291 1 16 2292 1 16 2293 1 16 2294 1 16 2295 1 16 2296 1 16 2297 1 16 2298 1 16 2299 1 16 2300 1 16 2301 1 16 2302 1 16 2303 1 16 2304 1 16 2431 1 16 2432 1 16 2433 1 16 2434 1 16 2435 1 16 2436 1 16 2437 1 16 2438 1 16 2439 1 16 2440 1 16 2441 1 16 2442 1 16 2443 1 16 2444 1 16 2445 1 16 2446 1 16 2447 1 16 2448 1 16 2449 1 16 2450 1 16 2451 1 16 2452 1 16 2453 1 16 2454 1 16 2455 1 16 2456 1 16 2457 1 16 2458 1 16 2459 1 16 2460 1 16 2461 1 16 2462 1 16 2463 1 16 2464 1 16 2465 1 16 2466 1 16 2467 1 16 2468 1 16 2469 1 16 2470 1 16 2471 1 16 2472 1 16 2473 1 16 2474 1 16 2475 1 16 2476 1 16 2477 1 16 2478 1 16 2479 1 16 2480 1 16 2481 1 16 2482 1 16 2483 1 16 2484 1 16 2485 1 16 2486 1 16 2487 1 16 2488 1 16 2489 1 16 2490 1 16 2491 1 16 2492 1 16 2493 1 16 2494 1 16 2495 1 16 2496 1 16 2497 1 16 2498 1 16 2499 1 16 2500 1 16 2501 1 16 2502 1 16 2503 1 16 2504 1 16 2505 1 16 2506 1 16 2507 1 16 2508 1 16 2509 1 16 2510 1 16 2511 1 16 2512 1 16 2513 1 16 2514 1 16 2515 1 16 2516 1 16 2517 1 16 2518 1 16 2519 1 16 2520 1 16 2521 1 16 2522 1 16 2523 1 16 2524 1 16 2525 1 16 2526 1 16 2527 1 16 2528 1 16 2529 1 16 2530 1 16 2531 1 16 2532 1 16 2533 1 16 2534 1 16 2535 1 16 2536 1 16 2537 1 16 2538 1 16 2539 1 16 2540 1 16 2541 1 16 2542 1 16 2543 1 16 2544 1 16 2545 1 16 2546 1 16 2547 1 16 2548 1 16 2549 1 16 2550 1 16 2551 1 16 2552 1 16 2553 1 16 2554 1 16 2555 1 16 2556 1 17 1 1 17 2 1 17 3 1 17 4 1 17 5 1 17 6 1 17 7 1 17 8 1 17 37 1 17 38 1 17 39 1 17 40 1 17 41 1 17 42 1 17 43 1 17 44 1 17 45 1 17 46 1 17 47 1 17 48 1 17 49 1 17 50 1 17 51 1 17 52 1 17 53 1 17 54 1 17 55 1 17 56 1 17 57 1 17 58 1 17 59 1 17 60 1 17 61 1 17 62 1 17 63 1 17 64 1 17 121 1 17 122 1 17 123 1 17 124 1 17 125 1 17 126 1 17 127 1 17 128 1 17 129 1 17 130 1 17 131 1 17 132 1 17 133 1 17 134 1 17 135 1 17 136 1 17 137 1 17 138 1 17 139 1 17 140 1 17 141 1 17 142 1 17 143 1 17 144 1 17 145 1 17 146 1 17 147 1 17 148 1 17 205 1 17 206 1 17 207 1 17 208 1 17 209 1 17 210 1 17 211 1 17 212 1 17 213 1 17 214 1 17 215 1 17 216 1 17 217 1 17 218 1 17 219 1 17 220 1 17 221 1 17 222 1 17 223 1 17 224 1 17 225 1 17 226 1 17 227 1 17 228 1 17 229 1 17 230 1 17 231 1 17 232 1 17 233 1 17 234 1 17 235 1 17 236 1 17 237 1 17 238 1 17 239 1 17 240 1 17 241 1 17 242 1 17 243 1 17 244 1 17 245 1 17 246 1 17 247 1 17 248 1 17 249 1 17 250 1 17 251 1 17 252 1 17 253 1 17 254 1 17 255 1 17 256 1 17 257 1 17 258 1 17 259 1 17 260 1 17 331 1 17 332 1 17 333 1 17 334 1 17 335 1 17 336 1 17 337 1 17 338 1 17 339 1 17 340 1 17 341 1 17 342 1 17 343 1 17 344 1 17 345 1 17 346 1 17 347 1 17 348 1 17 349 1 17 350 1 17 351 1 17 352 1 17 353 1 17 354 1 17 355 1 17 356 1 17 357 1 17 358 1 17 415 1 17 416 1 17 417 1 17 418 1 17 419 1 17 420 1 17 421 1 17 422 1 17 423 1 17 424 1 17 425 1 17 426 1 17 427 1 17 428 1 17 429 1 17 430 1 17 431 1 17 432 1 17 433 1 17 434 1 17 435 1 17 436 1 17 437 1 17 438 1 17 439 1 17 440 1 17 441 1 17 442 1 17 443 1 17 444 1 17 445 1 17 446 1 17 447 1 17 448 1 17 449 1 17 450 1 17 451 1 17 452 1 17 453 1 17 454 1 17 455 1 17 456 1 17 457 1 17 458 1 17 459 1 17 460 1 17 461 1 17 462 1 17 463 1 17 464 1 17 465 1 17 466 1 17 467 1 17 468 1 17 469 1 17 470 1 17 541 1 17 542 1 17 543 1 17 544 1 17 545 1 17 546 1 17 547 1 17 548 1 17 549 1 17 550 1 17 551 1 17 552 1 17 553 1 17 554 1 17 555 1 17 556 1 17 557 1 17 558 1 17 559 1 17 560 1 17 561 1 17 562 1 17 563 1 17 564 1 17 565 1 17 566 1 17 567 1 17 568 1 17 569 1 17 570 1 17 571 1 17 572 1 17 573 1 17 574 1 17 575 1 17 576 1 17 577 1 17 578 1 17 579 1 17 580 1 17 581 1 17 582 1 17 583 1 17 584 1 17 585 1 17 586 1 17 587 1 17 588 1 17 589 1 17 590 1 17 591 1 17 592 1 17 593 1 17 594 1 17 595 1 17 596 1 17 667 1 17 668 1 17 669 1 17 670 1 17 671 1 17 672 1 17 673 1 17 674 1 17 675 1 17 676 1 17 677 1 17 678 1 17 679 1 17 680 1 17 681 1 17 682 1 17 683 1 17 684 1 17 685 1 17 686 1 17 687 1 17 688 1 17 689 1 17 690 1 17 691 1 17 692 1 17 693 1 17 694 1 17 695 1 17 696 1 17 697 1 17 698 1 17 699 1 17 700 1 17 701 1 17 702 1 17 703 1 17 704 1 17 705 1 17 706 1 17 707 1 17 708 1 17 709 1 17 710 1 17 711 1 17 712 1 17 713 1 17 714 1 17 715 1 17 716 1 17 717 1 17 718 1 17 719 1 17 720 1 17 721 1 17 722 1 17 723 1 17 724 1 17 725 1 17 726 1 17 727 1 17 728 1 17 729 1 17 730 1 17 731 1 17 732 1 17 733 1 17 734 1 17 735 1 17 736 1 17 1717 1 17 1718 1 17 1719 1 17 1720 1 17 1721 1 17 1722 1 17 1723 1 17 1724 1 17 1725 1 17 1726 1 17 1727 1 17 1728 1 17 1729 1 17 1730 1 17 1731 1 17 1732 1 17 1733 1 17 1734 1 17 1735 1 17 1736 1 17 1737 1 17 1738 1 17 1739 1 17 1740 1 17 1741 1 17 1742 1 17 1743 1 17 1744 1 17 1801 1 17 1802 1 17 1803 1 17 1804 1 17 1805 1 17 1806 1 17 1807 1 17 1808 1 17 1809 1 17 1810 1 17 1811 1 17 1812 1 17 1813 1 17 1814 1 17 1815 1 17 1816 1 17 1817 1 17 1818 1 17 1819 1 17 1820 1 17 1821 1 17 1822 1 17 1823 1 17 1824 1 17 1825 1 17 1826 1 17 1827 1 17 1828 1 17 1829 1 17 1830 1 17 1831 1 17 1832 1 17 1833 1 17 1834 1 17 1835 1 17 1836 1 17 1837 1 17 1838 1 17 1839 1 17 1840 1 17 1841 1 17 1842 1 17 1843 1 17 1844 1 17 1845 1 17 1846 1 17 1847 1 17 1848 1 17 1849 1 17 1850 1 17 1851 1 17 1852 1 17 1853 1 17 1854 1 17 1855 1 17 1856 1 17 1927 1 17 1928 1 17 1929 1 17 1930 1 17 1931 1 17 1932 1 17 1933 1 17 1934 1 17 1935 1 17 1936 1 17 1937 1 17 1938 1 17 1939 1 17 1940 1 17 1941 1 17 1942 1 17 1943 1 17 1944 1 17 1945 1 17 1946 1 17 1947 1 17 1948 1 17 1949 1 17 1950 1 17 1951 1 17 1952 1 17 1953 1 17 1954 1 17 1955 1 17 1956 1 17 1957 1 17 1958 1 17 1959 1 17 1960 1 17 1961 1 17 1962 1 17 1963 1 17 1964 1 17 1965 1 17 1966 1 17 1967 1 17 1968 1 17 1969 1 17 1970 1 17 1971 1 17 1972 1 17 1973 1 17 1974 1 17 1975 1 17 1976 1 17 1977 1 17 1978 1 17 1979 1 17 1980 1 17 1981 1 17 1982 1 17 2053 1 17 2054 1 17 2055 1 17 2056 1 17 2057 1 17 2058 1 17 2059 1 17 2060 1 17 2061 1 17 2062 1 17 2063 1 17 2064 1 17 2065 1 17 2066 1 17 2067 1 17 2068 1 17 2069 1 17 2070 1 17 2071 1 17 2072 1 17 2073 1 17 2074 1 17 2075 1 17 2076 1 17 2077 1 17 2078 1 17 2079 1 17 2080 1 17 2081 1 17 2082 1 17 2083 1 17 2084 1 17 2085 1 17 2086 1 17 2087 1 17 2088 1 17 2089 1 17 2090 1 17 2091 1 17 2092 1 17 2093 1 17 2094 1 17 2095 1 17 2096 1 17 2097 1 17 2098 1 17 2099 1 17 2100 1 17 2101 1 17 2102 1 17 2103 1 17 2104 1 17 2105 1 17 2106 1 17 2107 1 17 2108 1 17 2109 1 17 2110 1 17 2111 1 17 2112 1 17 2113 1 17 2114 1 17 2115 1 17 2116 1 17 2117 1 17 2118 1 17 2119 1 17 2120 1 17 2121 1 17 2122 1 17 2179 1 17 2180 1 17 2181 1 17 2182 1 17 2183 1 17 2184 1 17 2185 1 17 2186 1 17 2187 1 17 2188 1 17 2189 1 17 2190 1 17 2191 1 17 2192 1 17 2193 1 17 2194 1 17 2195 1 17 2196 1 17 2197 1 17 2198 1 17 2199 1 17 2200 1 17 2201 1 17 2202 1 17 2203 1 17 2204 1 17 2205 1 17 2206 1 17 2207 1 17 2208 1 17 2209 1 17 2210 1 17 2211 1 17 2212 1 17 2213 1 17 2214 1 17 2215 1 17 2216 1 17 2217 1 17 2218 1 17 2219 1 17 2220 1 17 2221 1 17 2222 1 17 2223 1 17 2224 1 17 2225 1 17 2226 1 17 2227 1 17 2228 1 17 2229 1 17 2230 1 17 2231 1 17 2232 1 17 2233 1 17 2234 1 17 2305 1 17 2306 1 17 2307 1 17 2308 1 17 2309 1 17 2310 1 17 2311 1 17 2312 1 17 2313 1 17 2314 1 17 2315 1 17 2316 1 17 2317 1 17 2318 1 17 2319 1 17 2320 1 17 2321 1 17 2322 1 17 2323 1 17 2324 1 17 2325 1 17 2326 1 17 2327 1 17 2328 1 17 2329 1 17 2330 1 17 2331 1 17 2332 1 17 2333 1 17 2334 1 17 2335 1 17 2336 1 17 2337 1 17 2338 1 17 2339 1 17 2340 1 17 2341 1 17 2342 1 17 2343 1 17 2344 1 17 2345 1 17 2346 1 17 2347 1 17 2348 1 17 2349 1 17 2350 1 17 2351 1 17 2352 1 17 2353 1 17 2354 1 17 2355 1 17 2356 1 17 2357 1 17 2358 1 17 2359 1 17 2360 1 17 2361 1 17 2362 1 17 2363 1 17 2364 1 17 2365 1 17 2366 1 17 2367 1 17 2368 1 17 2369 1 17 2370 1 17 2371 1 17 2372 1 17 2373 1 17 2374 1 17 2431 1 17 2432 1 17 2433 1 17 2434 1 17 2435 1 17 2436 1 17 2437 1 17 2438 1 17 2439 1 17 2440 1 17 2441 1 17 2442 1 17 2443 1 17 2444 1 17 2445 1 17 2446 1 17 2447 1 17 2448 1 17 2449 1 17 2450 1 17 2451 1 17 2452 1 17 2453 1 17 2454 1 17 2455 1 17 2456 1 17 2457 1 17 2458 1 17 2459 1 17 2460 1 17 2461 1 17 2462 1 17 2463 1 17 2464 1 17 2465 1 17 2466 1 17 2467 1 17 2468 1 17 2469 1 17 2470 1 17 2471 1 17 2472 1 17 2473 1 17 2474 1 17 2475 1 17 2476 1 17 2477 1 17 2478 1 17 2479 1 17 2480 1 17 2481 1 17 2482 1 17 2483 1 17 2484 1 17 2485 1 17 2486 1 17 2487 1 17 2488 1 17 2489 1 17 2490 1 17 2491 1 17 2492 1 17 2493 1 17 2494 1 17 2495 1 17 2496 1 17 2497 1 17 2498 1 17 2499 1 17 2500 1 17 2557 1 17 2558 1 17 2559 1 17 2560 1 17 2561 1 17 2562 1 17 2563 1 17 2564 1 17 2565 1 17 2566 1 17 2567 1 17 2568 1 17 2569 1 17 2570 1 17 2571 1 17 2572 1 17 2573 1 17 2574 1 17 2575 1 17 2576 1 17 2577 1 17 2578 1 17 2579 1 17 2580 1 17 2581 1 17 2582 1 17 2583 1 17 2584 1 17 2585 1 17 2586 1 17 2587 1 17 2588 1 17 2589 1 17 2590 1 17 2591 1 17 2592 1 17 2593 1 17 2594 1 17 2595 1 17 2596 1 17 2597 1 17 2598 1 17 2599 1 17 2600 1 17 2601 1 17 2602 1 17 2603 1 17 2604 1 17 2605 1 17 2606 1 17 2607 1 17 2608 1 17 2609 1 17 2610 1 17 2611 1 17 2612 1 18 1 1 18 9 1 18 10 1 18 11 1 18 12 1 18 13 1 18 14 1 18 15 1 18 37 1 18 38 1 18 39 1 18 40 1 18 41 1 18 42 1 18 43 1 18 65 1 18 66 1 18 67 1 18 68 1 18 69 1 18 70 1 18 71 1 18 72 1 18 73 1 18 74 1 18 75 1 18 76 1 18 77 1 18 78 1 18 79 1 18 80 1 18 81 1 18 82 1 18 83 1 18 84 1 18 85 1 18 121 1 18 122 1 18 123 1 18 124 1 18 125 1 18 126 1 18 127 1 18 149 1 18 150 1 18 151 1 18 152 1 18 153 1 18 154 1 18 155 1 18 156 1 18 157 1 18 158 1 18 159 1 18 160 1 18 161 1 18 162 1 18 163 1 18 164 1 18 165 1 18 166 1 18 167 1 18 168 1 18 169 1 18 205 1 18 206 1 18 207 1 18 208 1 18 209 1 18 210 1 18 211 1 18 212 1 18 213 1 18 214 1 18 215 1 18 216 1 18 217 1 18 218 1 18 219 1 18 220 1 18 221 1 18 222 1 18 223 1 18 224 1 18 225 1 18 261 1 18 262 1 18 263 1 18 264 1 18 265 1 18 266 1 18 267 1 18 268 1 18 269 1 18 270 1 18 271 1 18 272 1 18 273 1 18 274 1 18 275 1 18 276 1 18 277 1 18 278 1 18 279 1 18 280 1 18 281 1 18 282 1 18 283 1 18 284 1 18 285 1 18 286 1 18 287 1 18 288 1 18 289 1 18 290 1 18 291 1 18 292 1 18 293 1 18 294 1 18 295 1 18 331 1 18 332 1 18 333 1 18 334 1 18 335 1 18 336 1 18 337 1 18 359 1 18 360 1 18 361 1 18 362 1 18 363 1 18 364 1 18 365 1 18 366 1 18 367 1 18 368 1 18 369 1 18 370 1 18 371 1 18 372 1 18 373 1 18 374 1 18 375 1 18 376 1 18 377 1 18 378 1 18 379 1 18 415 1 18 416 1 18 417 1 18 418 1 18 419 1 18 420 1 18 421 1 18 422 1 18 423 1 18 424 1 18 425 1 18 426 1 18 427 1 18 428 1 18 429 1 18 430 1 18 431 1 18 432 1 18 433 1 18 434 1 18 435 1 18 471 1 18 472 1 18 473 1 18 474 1 18 475 1 18 476 1 18 477 1 18 478 1 18 479 1 18 480 1 18 481 1 18 482 1 18 483 1 18 484 1 18 485 1 18 486 1 18 487 1 18 488 1 18 489 1 18 490 1 18 491 1 18 492 1 18 493 1 18 494 1 18 495 1 18 496 1 18 497 1 18 498 1 18 499 1 18 500 1 18 501 1 18 502 1 18 503 1 18 504 1 18 505 1 18 541 1 18 542 1 18 543 1 18 544 1 18 545 1 18 546 1 18 547 1 18 548 1 18 549 1 18 550 1 18 551 1 18 552 1 18 553 1 18 554 1 18 555 1 18 556 1 18 557 1 18 558 1 18 559 1 18 560 1 18 561 1 18 597 1 18 598 1 18 599 1 18 600 1 18 601 1 18 602 1 18 603 1 18 604 1 18 605 1 18 606 1 18 607 1 18 608 1 18 609 1 18 610 1 18 611 1 18 612 1 18 613 1 18 614 1 18 615 1 18 616 1 18 617 1 18 618 1 18 619 1 18 620 1 18 621 1 18 622 1 18 623 1 18 624 1 18 625 1 18 626 1 18 627 1 18 628 1 18 629 1 18 630 1 18 631 1 18 667 1 18 668 1 18 669 1 18 670 1 18 671 1 18 672 1 18 673 1 18 674 1 18 675 1 18 676 1 18 677 1 18 678 1 18 679 1 18 680 1 18 681 1 18 682 1 18 683 1 18 684 1 18 685 1 18 686 1 18 687 1 18 688 1 18 689 1 18 690 1 18 691 1 18 692 1 18 693 1 18 694 1 18 695 1 18 696 1 18 697 1 18 698 1 18 699 1 18 700 1 18 701 1 18 737 1 18 738 1 18 739 1 18 740 1 18 741 1 18 742 1 18 743 1 18 744 1 18 745 1 18 746 1 18 747 1 18 748 1 18 749 1 18 750 1 18 751 1 18 752 1 18 753 1 18 754 1 18 755 1 18 756 1 18 757 1 18 758 1 18 759 1 18 760 1 18 761 1 18 762 1 18 763 1 18 764 1 18 765 1 18 766 1 18 767 1 18 768 1 18 769 1 18 770 1 18 771 1 18 1717 1 18 1718 1 18 1719 1 18 1720 1 18 1721 1 18 1722 1 18 1723 1 18 1745 1 18 1746 1 18 1747 1 18 1748 1 18 1749 1 18 1750 1 18 1751 1 18 1752 1 18 1753 1 18 1754 1 18 1755 1 18 1756 1 18 1757 1 18 1758 1 18 1759 1 18 1760 1 18 1761 1 18 1762 1 18 1763 1 18 1764 1 18 1765 1 18 1801 1 18 1802 1 18 1803 1 18 1804 1 18 1805 1 18 1806 1 18 1807 1 18 1808 1 18 1809 1 18 1810 1 18 1811 1 18 1812 1 18 1813 1 18 1814 1 18 1815 1 18 1816 1 18 1817 1 18 1818 1 18 1819 1 18 1820 1 18 1821 1 18 1857 1 18 1858 1 18 1859 1 18 1860 1 18 1861 1 18 1862 1 18 1863 1 18 1864 1 18 1865 1 18 1866 1 18 1867 1 18 1868 1 18 1869 1 18 1870 1 18 1871 1 18 1872 1 18 1873 1 18 1874 1 18 1875 1 18 1876 1 18 1877 1 18 1878 1 18 1879 1 18 1880 1 18 1881 1 18 1882 1 18 1883 1 18 1884 1 18 1885 1 18 1886 1 18 1887 1 18 1888 1 18 1889 1 18 1890 1 18 1891 1 18 1927 1 18 1928 1 18 1929 1 18 1930 1 18 1931 1 18 1932 1 18 1933 1 18 1934 1 18 1935 1 18 1936 1 18 1937 1 18 1938 1 18 1939 1 18 1940 1 18 1941 1 18 1942 1 18 1943 1 18 1944 1 18 1945 1 18 1946 1 18 1947 1 18 1983 1 18 1984 1 18 1985 1 18 1986 1 18 1987 1 18 1988 1 18 1989 1 18 1990 1 18 1991 1 18 1992 1 18 1993 1 18 1994 1 18 1995 1 18 1996 1 18 1997 1 18 1998 1 18 1999 1 18 2000 1 18 2001 1 18 2002 1 18 2003 1 18 2004 1 18 2005 1 18 2006 1 18 2007 1 18 2008 1 18 2009 1 18 2010 1 18 2011 1 18 2012 1 18 2013 1 18 2014 1 18 2015 1 18 2016 1 18 2017 1 18 2053 1 18 2054 1 18 2055 1 18 2056 1 18 2057 1 18 2058 1 18 2059 1 18 2060 1 18 2061 1 18 2062 1 18 2063 1 18 2064 1 18 2065 1 18 2066 1 18 2067 1 18 2068 1 18 2069 1 18 2070 1 18 2071 1 18 2072 1 18 2073 1 18 2074 1 18 2075 1 18 2076 1 18 2077 1 18 2078 1 18 2079 1 18 2080 1 18 2081 1 18 2082 1 18 2083 1 18 2084 1 18 2085 1 18 2086 1 18 2087 1 18 2123 1 18 2124 1 18 2125 1 18 2126 1 18 2127 1 18 2128 1 18 2129 1 18 2130 1 18 2131 1 18 2132 1 18 2133 1 18 2134 1 18 2135 1 18 2136 1 18 2137 1 18 2138 1 18 2139 1 18 2140 1 18 2141 1 18 2142 1 18 2143 1 18 2144 1 18 2145 1 18 2146 1 18 2147 1 18 2148 1 18 2149 1 18 2150 1 18 2151 1 18 2152 1 18 2153 1 18 2154 1 18 2155 1 18 2156 1 18 2157 1 18 2179 1 18 2180 1 18 2181 1 18 2182 1 18 2183 1 18 2184 1 18 2185 1 18 2186 1 18 2187 1 18 2188 1 18 2189 1 18 2190 1 18 2191 1 18 2192 1 18 2193 1 18 2194 1 18 2195 1 18 2196 1 18 2197 1 18 2198 1 18 2199 1 18 2235 1 18 2236 1 18 2237 1 18 2238 1 18 2239 1 18 2240 1 18 2241 1 18 2242 1 18 2243 1 18 2244 1 18 2245 1 18 2246 1 18 2247 1 18 2248 1 18 2249 1 18 2250 1 18 2251 1 18 2252 1 18 2253 1 18 2254 1 18 2255 1 18 2256 1 18 2257 1 18 2258 1 18 2259 1 18 2260 1 18 2261 1 18 2262 1 18 2263 1 18 2264 1 18 2265 1 18 2266 1 18 2267 1 18 2268 1 18 2269 1 18 2305 1 18 2306 1 18 2307 1 18 2308 1 18 2309 1 18 2310 1 18 2311 1 18 2312 1 18 2313 1 18 2314 1 18 2315 1 18 2316 1 18 2317 1 18 2318 1 18 2319 1 18 2320 1 18 2321 1 18 2322 1 18 2323 1 18 2324 1 18 2325 1 18 2326 1 18 2327 1 18 2328 1 18 2329 1 18 2330 1 18 2331 1 18 2332 1 18 2333 1 18 2334 1 18 2335 1 18 2336 1 18 2337 1 18 2338 1 18 2339 1 18 2375 1 18 2376 1 18 2377 1 18 2378 1 18 2379 1 18 2380 1 18 2381 1 18 2382 1 18 2383 1 18 2384 1 18 2385 1 18 2386 1 18 2387 1 18 2388 1 18 2389 1 18 2390 1 18 2391 1 18 2392 1 18 2393 1 18 2394 1 18 2395 1 18 2396 1 18 2397 1 18 2398 1 18 2399 1 18 2400 1 18 2401 1 18 2402 1 18 2403 1 18 2404 1 18 2405 1 18 2406 1 18 2407 1 18 2408 1 18 2409 1 18 2431 1 18 2432 1 18 2433 1 18 2434 1 18 2435 1 18 2436 1 18 2437 1 18 2438 1 18 2439 1 18 2440 1 18 2441 1 18 2442 1 18 2443 1 18 2444 1 18 2445 1 18 2446 1 18 2447 1 18 2448 1 18 2449 1 18 2450 1 18 2451 1 18 2452 1 18 2453 1 18 2454 1 18 2455 1 18 2456 1 18 2457 1 18 2458 1 18 2459 1 18 2460 1 18 2461 1 18 2462 1 18 2463 1 18 2464 1 18 2465 1 18 2501 1 18 2502 1 18 2503 1 18 2504 1 18 2505 1 18 2506 1 18 2507 1 18 2508 1 18 2509 1 18 2510 1 18 2511 1 18 2512 1 18 2513 1 18 2514 1 18 2515 1 18 2516 1 18 2517 1 18 2518 1 18 2519 1 18 2520 1 18 2521 1 18 2522 1 18 2523 1 18 2524 1 18 2525 1 18 2526 1 18 2527 1 18 2528 1 18 2529 1 18 2530 1 18 2531 1 18 2532 1 18 2533 1 18 2534 1 18 2535 1 18 2557 1 18 2558 1 18 2559 1 18 2560 1 18 2561 1 18 2562 1 18 2563 1 18 2564 1 18 2565 1 18 2566 1 18 2567 1 18 2568 1 18 2569 1 18 2570 1 18 2571 1 18 2572 1 18 2573 1 18 2574 1 18 2575 1 18 2576 1 18 2577 1 18 2578 1 18 2579 1 18 2580 1 18 2581 1 18 2582 1 18 2583 1 18 2584 1 18 2585 1 18 2586 1 18 2587 1 18 2588 1 18 2589 1 18 2590 1 18 2591 1 18 2613 1 18 2614 1 18 2615 1 18 2616 1 18 2617 1 18 2618 1 18 2619 1 18 2620 1 18 2621 1 18 2622 1 18 2623 1 18 2624 1 18 2625 1 18 2626 1 18 2627 1 18 2628 1 18 2629 1 18 2630 1 18 2631 1 18 2632 1 18 2633 1 19 2 1 19 9 1 19 16 1 19 17 1 19 18 1 19 19 1 19 20 1 19 21 1 19 37 1 19 44 1 19 45 1 19 46 1 19 47 1 19 48 1 19 49 1 19 65 1 19 66 1 19 67 1 19 68 1 19 69 1 19 70 1 19 86 1 19 87 1 19 88 1 19 89 1 19 90 1 19 91 1 19 92 1 19 93 1 19 94 1 19 95 1 19 96 1 19 97 1 19 98 1 19 99 1 19 100 1 19 121 1 19 128 1 19 129 1 19 130 1 19 131 1 19 132 1 19 133 1 19 149 1 19 150 1 19 151 1 19 152 1 19 153 1 19 154 1 19 170 1 19 171 1 19 172 1 19 173 1 19 174 1 19 175 1 19 176 1 19 177 1 19 178 1 19 179 1 19 180 1 19 181 1 19 182 1 19 183 1 19 184 1 19 205 1 19 206 1 19 207 1 19 208 1 19 209 1 19 210 1 19 226 1 19 227 1 19 228 1 19 229 1 19 230 1 19 231 1 19 232 1 19 233 1 19 234 1 19 235 1 19 236 1 19 237 1 19 238 1 19 239 1 19 240 1 19 261 1 19 262 1 19 263 1 19 264 1 19 265 1 19 266 1 19 267 1 19 268 1 19 269 1 19 270 1 19 271 1 19 272 1 19 273 1 19 274 1 19 275 1 19 296 1 19 297 1 19 298 1 19 299 1 19 300 1 19 301 1 19 302 1 19 303 1 19 304 1 19 305 1 19 306 1 19 307 1 19 308 1 19 309 1 19 310 1 19 311 1 19 312 1 19 313 1 19 314 1 19 315 1 19 331 1 19 338 1 19 339 1 19 340 1 19 341 1 19 342 1 19 343 1 19 359 1 19 360 1 19 361 1 19 362 1 19 363 1 19 364 1 19 380 1 19 381 1 19 382 1 19 383 1 19 384 1 19 385 1 19 386 1 19 387 1 19 388 1 19 389 1 19 390 1 19 391 1 19 392 1 19 393 1 19 394 1 19 415 1 19 416 1 19 417 1 19 418 1 19 419 1 19 420 1 19 436 1 19 437 1 19 438 1 19 439 1 19 440 1 19 441 1 19 442 1 19 443 1 19 444 1 19 445 1 19 446 1 19 447 1 19 448 1 19 449 1 19 450 1 19 471 1 19 472 1 19 473 1 19 474 1 19 475 1 19 476 1 19 477 1 19 478 1 19 479 1 19 480 1 19 481 1 19 482 1 19 483 1 19 484 1 19 485 1 19 506 1 19 507 1 19 508 1 19 509 1 19 510 1 19 511 1 19 512 1 19 513 1 19 514 1 19 515 1 19 516 1 19 517 1 19 518 1 19 519 1 19 520 1 19 521 1 19 522 1 19 523 1 19 524 1 19 525 1 19 541 1 19 542 1 19 543 1 19 544 1 19 545 1 19 546 1 19 562 1 19 563 1 19 564 1 19 565 1 19 566 1 19 567 1 19 568 1 19 569 1 19 570 1 19 571 1 19 572 1 19 573 1 19 574 1 19 575 1 19 576 1 19 597 1 19 598 1 19 599 1 19 600 1 19 601 1 19 602 1 19 603 1 19 604 1 19 605 1 19 606 1 19 607 1 19 608 1 19 609 1 19 610 1 19 611 1 19 632 1 19 633 1 19 634 1 19 635 1 19 636 1 19 637 1 19 638 1 19 639 1 19 640 1 19 641 1 19 642 1 19 643 1 19 644 1 19 645 1 19 646 1 19 647 1 19 648 1 19 649 1 19 650 1 19 651 1 19 667 1 19 668 1 19 669 1 19 670 1 19 671 1 19 672 1 19 673 1 19 674 1 19 675 1 19 676 1 19 677 1 19 678 1 19 679 1 19 680 1 19 681 1 19 702 1 19 703 1 19 704 1 19 705 1 19 706 1 19 707 1 19 708 1 19 709 1 19 710 1 19 711 1 19 712 1 19 713 1 19 714 1 19 715 1 19 716 1 19 717 1 19 718 1 19 719 1 19 720 1 19 721 1 19 737 1 19 738 1 19 739 1 19 740 1 19 741 1 19 742 1 19 743 1 19 744 1 19 745 1 19 746 1 19 747 1 19 748 1 19 749 1 19 750 1 19 751 1 19 752 1 19 753 1 19 754 1 19 755 1 19 756 1 19 772 1 19 773 1 19 774 1 19 775 1 19 776 1 19 777 1 19 778 1 19 779 1 19 780 1 19 781 1 19 782 1 19 783 1 19 784 1 19 785 1 19 786 1 19 1717 1 19 1724 1 19 1725 1 19 1726 1 19 1727 1 19 1728 1 19 1729 1 19 1745 1 19 1746 1 19 1747 1 19 1748 1 19 1749 1 19 1750 1 19 1766 1 19 1767 1 19 1768 1 19 1769 1 19 1770 1 19 1771 1 19 1772 1 19 1773 1 19 1774 1 19 1775 1 19 1776 1 19 1777 1 19 1778 1 19 1779 1 19 1780 1 19 1801 1 19 1802 1 19 1803 1 19 1804 1 19 1805 1 19 1806 1 19 1822 1 19 1823 1 19 1824 1 19 1825 1 19 1826 1 19 1827 1 19 1828 1 19 1829 1 19 1830 1 19 1831 1 19 1832 1 19 1833 1 19 1834 1 19 1835 1 19 1836 1 19 1857 1 19 1858 1 19 1859 1 19 1860 1 19 1861 1 19 1862 1 19 1863 1 19 1864 1 19 1865 1 19 1866 1 19 1867 1 19 1868 1 19 1869 1 19 1870 1 19 1871 1 19 1892 1 19 1893 1 19 1894 1 19 1895 1 19 1896 1 19 1897 1 19 1898 1 19 1899 1 19 1900 1 19 1901 1 19 1902 1 19 1903 1 19 1904 1 19 1905 1 19 1906 1 19 1907 1 19 1908 1 19 1909 1 19 1910 1 19 1911 1 19 1927 1 19 1928 1 19 1929 1 19 1930 1 19 1931 1 19 1932 1 19 1948 1 19 1949 1 19 1950 1 19 1951 1 19 1952 1 19 1953 1 19 1954 1 19 1955 1 19 1956 1 19 1957 1 19 1958 1 19 1959 1 19 1960 1 19 1961 1 19 1962 1 19 1983 1 19 1984 1 19 1985 1 19 1986 1 19 1987 1 19 1988 1 19 1989 1 19 1990 1 19 1991 1 19 1992 1 19 1993 1 19 1994 1 19 1995 1 19 1996 1 19 1997 1 19 2018 1 19 2019 1 19 2020 1 19 2021 1 19 2022 1 19 2023 1 19 2024 1 19 2025 1 19 2026 1 19 2027 1 19 2028 1 19 2029 1 19 2030 1 19 2031 1 19 2032 1 19 2033 1 19 2034 1 19 2035 1 19 2036 1 19 2037 1 19 2053 1 19 2054 1 19 2055 1 19 2056 1 19 2057 1 19 2058 1 19 2059 1 19 2060 1 19 2061 1 19 2062 1 19 2063 1 19 2064 1 19 2065 1 19 2066 1 19 2067 1 19 2088 1 19 2089 1 19 2090 1 19 2091 1 19 2092 1 19 2093 1 19 2094 1 19 2095 1 19 2096 1 19 2097 1 19 2098 1 19 2099 1 19 2100 1 19 2101 1 19 2102 1 19 2103 1 19 2104 1 19 2105 1 19 2106 1 19 2107 1 19 2123 1 19 2124 1 19 2125 1 19 2126 1 19 2127 1 19 2128 1 19 2129 1 19 2130 1 19 2131 1 19 2132 1 19 2133 1 19 2134 1 19 2135 1 19 2136 1 19 2137 1 19 2138 1 19 2139 1 19 2140 1 19 2141 1 19 2142 1 19 2158 1 19 2159 1 19 2160 1 19 2161 1 19 2162 1 19 2163 1 19 2164 1 19 2165 1 19 2166 1 19 2167 1 19 2168 1 19 2169 1 19 2170 1 19 2171 1 19 2172 1 19 2179 1 19 2180 1 19 2181 1 19 2182 1 19 2183 1 19 2184 1 19 2200 1 19 2201 1 19 2202 1 19 2203 1 19 2204 1 19 2205 1 19 2206 1 19 2207 1 19 2208 1 19 2209 1 19 2210 1 19 2211 1 19 2212 1 19 2213 1 19 2214 1 19 2235 1 19 2236 1 19 2237 1 19 2238 1 19 2239 1 19 2240 1 19 2241 1 19 2242 1 19 2243 1 19 2244 1 19 2245 1 19 2246 1 19 2247 1 19 2248 1 19 2249 1 19 2270 1 19 2271 1 19 2272 1 19 2273 1 19 2274 1 19 2275 1 19 2276 1 19 2277 1 19 2278 1 19 2279 1 19 2280 1 19 2281 1 19 2282 1 19 2283 1 19 2284 1 19 2285 1 19 2286 1 19 2287 1 19 2288 1 19 2289 1 19 2305 1 19 2306 1 19 2307 1 19 2308 1 19 2309 1 19 2310 1 19 2311 1 19 2312 1 19 2313 1 19 2314 1 19 2315 1 19 2316 1 19 2317 1 19 2318 1 19 2319 1 19 2340 1 19 2341 1 19 2342 1 19 2343 1 19 2344 1 19 2345 1 19 2346 1 19 2347 1 19 2348 1 19 2349 1 19 2350 1 19 2351 1 19 2352 1 19 2353 1 19 2354 1 19 2355 1 19 2356 1 19 2357 1 19 2358 1 19 2359 1 19 2375 1 19 2376 1 19 2377 1 19 2378 1 19 2379 1 19 2380 1 19 2381 1 19 2382 1 19 2383 1 19 2384 1 19 2385 1 19 2386 1 19 2387 1 19 2388 1 19 2389 1 19 2390 1 19 2391 1 19 2392 1 19 2393 1 19 2394 1 19 2410 1 19 2411 1 19 2412 1 19 2413 1 19 2414 1 19 2415 1 19 2416 1 19 2417 1 19 2418 1 19 2419 1 19 2420 1 19 2421 1 19 2422 1 19 2423 1 19 2424 1 19 2431 1 19 2432 1 19 2433 1 19 2434 1 19 2435 1 19 2436 1 19 2437 1 19 2438 1 19 2439 1 19 2440 1 19 2441 1 19 2442 1 19 2443 1 19 2444 1 19 2445 1 19 2466 1 19 2467 1 19 2468 1 19 2469 1 19 2470 1 19 2471 1 19 2472 1 19 2473 1 19 2474 1 19 2475 1 19 2476 1 19 2477 1 19 2478 1 19 2479 1 19 2480 1 19 2481 1 19 2482 1 19 2483 1 19 2484 1 19 2485 1 19 2501 1 19 2502 1 19 2503 1 19 2504 1 19 2505 1 19 2506 1 19 2507 1 19 2508 1 19 2509 1 19 2510 1 19 2511 1 19 2512 1 19 2513 1 19 2514 1 19 2515 1 19 2516 1 19 2517 1 19 2518 1 19 2519 1 19 2520 1 19 2536 1 19 2537 1 19 2538 1 19 2539 1 19 2540 1 19 2541 1 19 2542 1 19 2543 1 19 2544 1 19 2545 1 19 2546 1 19 2547 1 19 2548 1 19 2549 1 19 2550 1 19 2557 1 19 2558 1 19 2559 1 19 2560 1 19 2561 1 19 2562 1 19 2563 1 19 2564 1 19 2565 1 19 2566 1 19 2567 1 19 2568 1 19 2569 1 19 2570 1 19 2571 1 19 2572 1 19 2573 1 19 2574 1 19 2575 1 19 2576 1 19 2592 1 19 2593 1 19 2594 1 19 2595 1 19 2596 1 19 2597 1 19 2598 1 19 2599 1 19 2600 1 19 2601 1 19 2602 1 19 2603 1 19 2604 1 19 2605 1 19 2606 1 19 2613 1 19 2614 1 19 2615 1 19 2616 1 19 2617 1 19 2618 1 19 2619 1 19 2620 1 19 2621 1 19 2622 1 19 2623 1 19 2624 1 19 2625 1 19 2626 1 19 2627 1 19 2634 1 19 2635 1 19 2636 1 19 2637 1 19 2638 1 19 2639 1 20 3 1 20 10 1 20 16 1 20 22 1 20 23 1 20 24 1 20 25 1 20 26 1 20 38 1 20 44 1 20 50 1 20 51 1 20 52 1 20 53 1 20 54 1 20 65 1 20 71 1 20 72 1 20 73 1 20 74 1 20 75 1 20 86 1 20 87 1 20 88 1 20 89 1 20 90 1 20 101 1 20 102 1 20 103 1 20 104 1 20 105 1 20 106 1 20 107 1 20 108 1 20 109 1 20 110 1 20 122 1 20 128 1 20 134 1 20 135 1 20 136 1 20 137 1 20 138 1 20 149 1 20 155 1 20 156 1 20 157 1 20 158 1 20 159 1 20 170 1 20 171 1 20 172 1 20 173 1 20 174 1 20 185 1 20 186 1 20 187 1 20 188 1 20 189 1 20 190 1 20 191 1 20 192 1 20 193 1 20 194 1 20 205 1 20 211 1 20 212 1 20 213 1 20 214 1 20 215 1 20 226 1 20 227 1 20 228 1 20 229 1 20 230 1 20 241 1 20 242 1 20 243 1 20 244 1 20 245 1 20 246 1 20 247 1 20 248 1 20 249 1 20 250 1 20 261 1 20 262 1 20 263 1 20 264 1 20 265 1 20 276 1 20 277 1 20 278 1 20 279 1 20 280 1 20 281 1 20 282 1 20 283 1 20 284 1 20 285 1 20 296 1 20 297 1 20 298 1 20 299 1 20 300 1 20 301 1 20 302 1 20 303 1 20 304 1 20 305 1 20 316 1 20 317 1 20 318 1 20 319 1 20 320 1 20 321 1 20 322 1 20 323 1 20 324 1 20 325 1 20 332 1 20 338 1 20 344 1 20 345 1 20 346 1 20 347 1 20 348 1 20 359 1 20 365 1 20 366 1 20 367 1 20 368 1 20 369 1 20 380 1 20 381 1 20 382 1 20 383 1 20 384 1 20 395 1 20 396 1 20 397 1 20 398 1 20 399 1 20 400 1 20 401 1 20 402 1 20 403 1 20 404 1 20 415 1 20 421 1 20 422 1 20 423 1 20 424 1 20 425 1 20 436 1 20 437 1 20 438 1 20 439 1 20 440 1 20 451 1 20 452 1 20 453 1 20 454 1 20 455 1 20 456 1 20 457 1 20 458 1 20 459 1 20 460 1 20 471 1 20 472 1 20 473 1 20 474 1 20 475 1 20 486 1 20 487 1 20 488 1 20 489 1 20 490 1 20 491 1 20 492 1 20 493 1 20 494 1 20 495 1 20 506 1 20 507 1 20 508 1 20 509 1 20 510 1 20 511 1 20 512 1 20 513 1 20 514 1 20 515 1 20 526 1 20 527 1 20 528 1 20 529 1 20 530 1 20 531 1 20 532 1 20 533 1 20 534 1 20 535 1 20 541 1 20 547 1 20 548 1 20 549 1 20 550 1 20 551 1 20 562 1 20 563 1 20 564 1 20 565 1 20 566 1 20 577 1 20 578 1 20 579 1 20 580 1 20 581 1 20 582 1 20 583 1 20 584 1 20 585 1 20 586 1 20 597 1 20 598 1 20 599 1 20 600 1 20 601 1 20 612 1 20 613 1 20 614 1 20 615 1 20 616 1 20 617 1 20 618 1 20 619 1 20 620 1 20 621 1 20 632 1 20 633 1 20 634 1 20 635 1 20 636 1 20 637 1 20 638 1 20 639 1 20 640 1 20 641 1 20 652 1 20 653 1 20 654 1 20 655 1 20 656 1 20 657 1 20 658 1 20 659 1 20 660 1 20 661 1 20 667 1 20 668 1 20 669 1 20 670 1 20 671 1 20 682 1 20 683 1 20 684 1 20 685 1 20 686 1 20 687 1 20 688 1 20 689 1 20 690 1 20 691 1 20 702 1 20 703 1 20 704 1 20 705 1 20 706 1 20 707 1 20 708 1 20 709 1 20 710 1 20 711 1 20 722 1 20 723 1 20 724 1 20 725 1 20 726 1 20 727 1 20 728 1 20 729 1 20 730 1 20 731 1 20 737 1 20 738 1 20 739 1 20 740 1 20 741 1 20 742 1 20 743 1 20 744 1 20 745 1 20 746 1 20 757 1 20 758 1 20 759 1 20 760 1 20 761 1 20 762 1 20 763 1 20 764 1 20 765 1 20 766 1 20 772 1 20 773 1 20 774 1 20 775 1 20 776 1 20 777 1 20 778 1 20 779 1 20 780 1 20 781 1 20 787 1 20 788 1 20 789 1 20 790 1 20 791 1 20 1718 1 20 1724 1 20 1730 1 20 1731 1 20 1732 1 20 1733 1 20 1734 1 20 1745 1 20 1751 1 20 1752 1 20 1753 1 20 1754 1 20 1755 1 20 1766 1 20 1767 1 20 1768 1 20 1769 1 20 1770 1 20 1781 1 20 1782 1 20 1783 1 20 1784 1 20 1785 1 20 1786 1 20 1787 1 20 1788 1 20 1789 1 20 1790 1 20 1801 1 20 1807 1 20 1808 1 20 1809 1 20 1810 1 20 1811 1 20 1822 1 20 1823 1 20 1824 1 20 1825 1 20 1826 1 20 1837 1 20 1838 1 20 1839 1 20 1840 1 20 1841 1 20 1842 1 20 1843 1 20 1844 1 20 1845 1 20 1846 1 20 1857 1 20 1858 1 20 1859 1 20 1860 1 20 1861 1 20 1872 1 20 1873 1 20 1874 1 20 1875 1 20 1876 1 20 1877 1 20 1878 1 20 1879 1 20 1880 1 20 1881 1 20 1892 1 20 1893 1 20 1894 1 20 1895 1 20 1896 1 20 1897 1 20 1898 1 20 1899 1 20 1900 1 20 1901 1 20 1912 1 20 1913 1 20 1914 1 20 1915 1 20 1916 1 20 1917 1 20 1918 1 20 1919 1 20 1920 1 20 1921 1 20 1927 1 20 1933 1 20 1934 1 20 1935 1 20 1936 1 20 1937 1 20 1948 1 20 1949 1 20 1950 1 20 1951 1 20 1952 1 20 1963 1 20 1964 1 20 1965 1 20 1966 1 20 1967 1 20 1968 1 20 1969 1 20 1970 1 20 1971 1 20 1972 1 20 1983 1 20 1984 1 20 1985 1 20 1986 1 20 1987 1 20 1998 1 20 1999 1 20 2000 1 20 2001 1 20 2002 1 20 2003 1 20 2004 1 20 2005 1 20 2006 1 20 2007 1 20 2018 1 20 2019 1 20 2020 1 20 2021 1 20 2022 1 20 2023 1 20 2024 1 20 2025 1 20 2026 1 20 2027 1 20 2038 1 20 2039 1 20 2040 1 20 2041 1 20 2042 1 20 2043 1 20 2044 1 20 2045 1 20 2046 1 20 2047 1 20 2053 1 20 2054 1 20 2055 1 20 2056 1 20 2057 1 20 2068 1 20 2069 1 20 2070 1 20 2071 1 20 2072 1 20 2073 1 20 2074 1 20 2075 1 20 2076 1 20 2077 1 20 2088 1 20 2089 1 20 2090 1 20 2091 1 20 2092 1 20 2093 1 20 2094 1 20 2095 1 20 2096 1 20 2097 1 20 2108 1 20 2109 1 20 2110 1 20 2111 1 20 2112 1 20 2113 1 20 2114 1 20 2115 1 20 2116 1 20 2117 1 20 2123 1 20 2124 1 20 2125 1 20 2126 1 20 2127 1 20 2128 1 20 2129 1 20 2130 1 20 2131 1 20 2132 1 20 2143 1 20 2144 1 20 2145 1 20 2146 1 20 2147 1 20 2148 1 20 2149 1 20 2150 1 20 2151 1 20 2152 1 20 2158 1 20 2159 1 20 2160 1 20 2161 1 20 2162 1 20 2163 1 20 2164 1 20 2165 1 20 2166 1 20 2167 1 20 2173 1 20 2174 1 20 2175 1 20 2176 1 20 2177 1 20 2179 1 20 2185 1 20 2186 1 20 2187 1 20 2188 1 20 2189 1 20 2200 1 20 2201 1 20 2202 1 20 2203 1 20 2204 1 20 2215 1 20 2216 1 20 2217 1 20 2218 1 20 2219 1 20 2220 1 20 2221 1 20 2222 1 20 2223 1 20 2224 1 20 2235 1 20 2236 1 20 2237 1 20 2238 1 20 2239 1 20 2250 1 20 2251 1 20 2252 1 20 2253 1 20 2254 1 20 2255 1 20 2256 1 20 2257 1 20 2258 1 20 2259 1 20 2270 1 20 2271 1 20 2272 1 20 2273 1 20 2274 1 20 2275 1 20 2276 1 20 2277 1 20 2278 1 20 2279 1 20 2290 1 20 2291 1 20 2292 1 20 2293 1 20 2294 1 20 2295 1 20 2296 1 20 2297 1 20 2298 1 20 2299 1 20 2305 1 20 2306 1 20 2307 1 20 2308 1 20 2309 1 20 2320 1 20 2321 1 20 2322 1 20 2323 1 20 2324 1 20 2325 1 20 2326 1 20 2327 1 20 2328 1 20 2329 1 20 2340 1 20 2341 1 20 2342 1 20 2343 1 20 2344 1 20 2345 1 20 2346 1 20 2347 1 20 2348 1 20 2349 1 20 2360 1 20 2361 1 20 2362 1 20 2363 1 20 2364 1 20 2365 1 20 2366 1 20 2367 1 20 2368 1 20 2369 1 20 2375 1 20 2376 1 20 2377 1 20 2378 1 20 2379 1 20 2380 1 20 2381 1 20 2382 1 20 2383 1 20 2384 1 20 2395 1 20 2396 1 20 2397 1 20 2398 1 20 2399 1 20 2400 1 20 2401 1 20 2402 1 20 2403 1 20 2404 1 20 2410 1 20 2411 1 20 2412 1 20 2413 1 20 2414 1 20 2415 1 20 2416 1 20 2417 1 20 2418 1 20 2419 1 20 2425 1 20 2426 1 20 2427 1 20 2428 1 20 2429 1 20 2431 1 20 2432 1 20 2433 1 20 2434 1 20 2435 1 20 2446 1 20 2447 1 20 2448 1 20 2449 1 20 2450 1 20 2451 1 20 2452 1 20 2453 1 20 2454 1 20 2455 1 20 2466 1 20 2467 1 20 2468 1 20 2469 1 20 2470 1 20 2471 1 20 2472 1 20 2473 1 20 2474 1 20 2475 1 20 2486 1 20 2487 1 20 2488 1 20 2489 1 20 2490 1 20 2491 1 20 2492 1 20 2493 1 20 2494 1 20 2495 1 20 2501 1 20 2502 1 20 2503 1 20 2504 1 20 2505 1 20 2506 1 20 2507 1 20 2508 1 20 2509 1 20 2510 1 20 2521 1 20 2522 1 20 2523 1 20 2524 1 20 2525 1 20 2526 1 20 2527 1 20 2528 1 20 2529 1 20 2530 1 20 2536 1 20 2537 1 20 2538 1 20 2539 1 20 2540 1 20 2541 1 20 2542 1 20 2543 1 20 2544 1 20 2545 1 20 2551 1 20 2552 1 20 2553 1 20 2554 1 20 2555 1 20 2557 1 20 2558 1 20 2559 1 20 2560 1 20 2561 1 20 2562 1 20 2563 1 20 2564 1 20 2565 1 20 2566 1 20 2577 1 20 2578 1 20 2579 1 20 2580 1 20 2581 1 20 2582 1 20 2583 1 20 2584 1 20 2585 1 20 2586 1 20 2592 1 20 2593 1 20 2594 1 20 2595 1 20 2596 1 20 2597 1 20 2598 1 20 2599 1 20 2600 1 20 2601 1 20 2607 1 20 2608 1 20 2609 1 20 2610 1 20 2611 1 20 2613 1 20 2614 1 20 2615 1 20 2616 1 20 2617 1 20 2618 1 20 2619 1 20 2620 1 20 2621 1 20 2622 1 20 2628 1 20 2629 1 20 2630 1 20 2631 1 20 2632 1 20 2634 1 20 2635 1 20 2636 1 20 2637 1 20 2638 1 20 2640 1 21 4 1 21 11 1 21 17 1 21 22 1 21 27 1 21 28 1 21 29 1 21 30 1 21 39 1 21 45 1 21 50 1 21 55 1 21 56 1 21 57 1 21 58 1 21 66 1 21 71 1 21 76 1 21 77 1 21 78 1 21 79 1 21 86 1 21 91 1 21 92 1 21 93 1 21 94 1 21 101 1 21 102 1 21 103 1 21 104 1 21 111 1 21 112 1 21 113 1 21 114 1 21 115 1 21 116 1 21 123 1 21 129 1 21 134 1 21 139 1 21 140 1 21 141 1 21 142 1 21 150 1 21 155 1 21 160 1 21 161 1 21 162 1 21 163 1 21 170 1 21 175 1 21 176 1 21 177 1 21 178 1 21 185 1 21 186 1 21 187 1 21 188 1 21 195 1 21 196 1 21 197 1 21 198 1 21 199 1 21 200 1 21 206 1 21 211 1 21 216 1 21 217 1 21 218 1 21 219 1 21 226 1 21 231 1 21 232 1 21 233 1 21 234 1 21 241 1 21 242 1 21 243 1 21 244 1 21 251 1 21 252 1 21 253 1 21 254 1 21 255 1 21 256 1 21 261 1 21 266 1 21 267 1 21 268 1 21 269 1 21 276 1 21 277 1 21 278 1 21 279 1 21 286 1 21 287 1 21 288 1 21 289 1 21 290 1 21 291 1 21 296 1 21 297 1 21 298 1 21 299 1 21 306 1 21 307 1 21 308 1 21 309 1 21 310 1 21 311 1 21 316 1 21 317 1 21 318 1 21 319 1 21 320 1 21 321 1 21 326 1 21 327 1 21 328 1 21 329 1 21 333 1 21 339 1 21 344 1 21 349 1 21 350 1 21 351 1 21 352 1 21 360 1 21 365 1 21 370 1 21 371 1 21 372 1 21 373 1 21 380 1 21 385 1 21 386 1 21 387 1 21 388 1 21 395 1 21 396 1 21 397 1 21 398 1 21 405 1 21 406 1 21 407 1 21 408 1 21 409 1 21 410 1 21 416 1 21 421 1 21 426 1 21 427 1 21 428 1 21 429 1 21 436 1 21 441 1 21 442 1 21 443 1 21 444 1 21 451 1 21 452 1 21 453 1 21 454 1 21 461 1 21 462 1 21 463 1 21 464 1 21 465 1 21 466 1 21 471 1 21 476 1 21 477 1 21 478 1 21 479 1 21 486 1 21 487 1 21 488 1 21 489 1 21 496 1 21 497 1 21 498 1 21 499 1 21 500 1 21 501 1 21 506 1 21 507 1 21 508 1 21 509 1 21 516 1 21 517 1 21 518 1 21 519 1 21 520 1 21 521 1 21 526 1 21 527 1 21 528 1 21 529 1 21 530 1 21 531 1 21 536 1 21 537 1 21 538 1 21 539 1 21 542 1 21 547 1 21 552 1 21 553 1 21 554 1 21 555 1 21 562 1 21 567 1 21 568 1 21 569 1 21 570 1 21 577 1 21 578 1 21 579 1 21 580 1 21 587 1 21 588 1 21 589 1 21 590 1 21 591 1 21 592 1 21 597 1 21 602 1 21 603 1 21 604 1 21 605 1 21 612 1 21 613 1 21 614 1 21 615 1 21 622 1 21 623 1 21 624 1 21 625 1 21 626 1 21 627 1 21 632 1 21 633 1 21 634 1 21 635 1 21 642 1 21 643 1 21 644 1 21 645 1 21 646 1 21 647 1 21 652 1 21 653 1 21 654 1 21 655 1 21 656 1 21 657 1 21 662 1 21 663 1 21 664 1 21 665 1 21 667 1 21 672 1 21 673 1 21 674 1 21 675 1 21 682 1 21 683 1 21 684 1 21 685 1 21 692 1 21 693 1 21 694 1 21 695 1 21 696 1 21 697 1 21 702 1 21 703 1 21 704 1 21 705 1 21 712 1 21 713 1 21 714 1 21 715 1 21 716 1 21 717 1 21 722 1 21 723 1 21 724 1 21 725 1 21 726 1 21 727 1 21 732 1 21 733 1 21 734 1 21 735 1 21 737 1 21 738 1 21 739 1 21 740 1 21 747 1 21 748 1 21 749 1 21 750 1 21 751 1 21 752 1 21 757 1 21 758 1 21 759 1 21 760 1 21 761 1 21 762 1 21 767 1 21 768 1 21 769 1 21 770 1 21 772 1 21 773 1 21 774 1 21 775 1 21 776 1 21 777 1 21 782 1 21 783 1 21 784 1 21 785 1 21 787 1 21 788 1 21 789 1 21 790 1 21 792 1 21 1719 1 21 1725 1 21 1730 1 21 1735 1 21 1736 1 21 1737 1 21 1738 1 21 1746 1 21 1751 1 21 1756 1 21 1757 1 21 1758 1 21 1759 1 21 1766 1 21 1771 1 21 1772 1 21 1773 1 21 1774 1 21 1781 1 21 1782 1 21 1783 1 21 1784 1 21 1791 1 21 1792 1 21 1793 1 21 1794 1 21 1795 1 21 1796 1 21 1802 1 21 1807 1 21 1812 1 21 1813 1 21 1814 1 21 1815 1 21 1822 1 21 1827 1 21 1828 1 21 1829 1 21 1830 1 21 1837 1 21 1838 1 21 1839 1 21 1840 1 21 1847 1 21 1848 1 21 1849 1 21 1850 1 21 1851 1 21 1852 1 21 1857 1 21 1862 1 21 1863 1 21 1864 1 21 1865 1 21 1872 1 21 1873 1 21 1874 1 21 1875 1 21 1882 1 21 1883 1 21 1884 1 21 1885 1 21 1886 1 21 1887 1 21 1892 1 21 1893 1 21 1894 1 21 1895 1 21 1902 1 21 1903 1 21 1904 1 21 1905 1 21 1906 1 21 1907 1 21 1912 1 21 1913 1 21 1914 1 21 1915 1 21 1916 1 21 1917 1 21 1922 1 21 1923 1 21 1924 1 21 1925 1 21 1928 1 21 1933 1 21 1938 1 21 1939 1 21 1940 1 21 1941 1 21 1948 1 21 1953 1 21 1954 1 21 1955 1 21 1956 1 21 1963 1 21 1964 1 21 1965 1 21 1966 1 21 1973 1 21 1974 1 21 1975 1 21 1976 1 21 1977 1 21 1978 1 21 1983 1 21 1988 1 21 1989 1 21 1990 1 21 1991 1 21 1998 1 21 1999 1 21 2000 1 21 2001 1 21 2008 1 21 2009 1 21 2010 1 21 2011 1 21 2012 1 21 2013 1 21 2018 1 21 2019 1 21 2020 1 21 2021 1 21 2028 1 21 2029 1 21 2030 1 21 2031 1 21 2032 1 21 2033 1 21 2038 1 21 2039 1 21 2040 1 21 2041 1 21 2042 1 21 2043 1 21 2048 1 21 2049 1 21 2050 1 21 2051 1 21 2053 1 21 2058 1 21 2059 1 21 2060 1 21 2061 1 21 2068 1 21 2069 1 21 2070 1 21 2071 1 21 2078 1 21 2079 1 21 2080 1 21 2081 1 21 2082 1 21 2083 1 21 2088 1 21 2089 1 21 2090 1 21 2091 1 21 2098 1 21 2099 1 21 2100 1 21 2101 1 21 2102 1 21 2103 1 21 2108 1 21 2109 1 21 2110 1 21 2111 1 21 2112 1 21 2113 1 21 2118 1 21 2119 1 21 2120 1 21 2121 1 21 2123 1 21 2124 1 21 2125 1 21 2126 1 21 2133 1 21 2134 1 21 2135 1 21 2136 1 21 2137 1 21 2138 1 21 2143 1 21 2144 1 21 2145 1 21 2146 1 21 2147 1 21 2148 1 21 2153 1 21 2154 1 21 2155 1 21 2156 1 21 2158 1 21 2159 1 21 2160 1 21 2161 1 21 2162 1 21 2163 1 21 2168 1 21 2169 1 21 2170 1 21 2171 1 21 2173 1 21 2174 1 21 2175 1 21 2176 1 21 2178 1 21 2180 1 21 2185 1 21 2190 1 21 2191 1 21 2192 1 21 2193 1 21 2200 1 21 2205 1 21 2206 1 21 2207 1 21 2208 1 21 2215 1 21 2216 1 21 2217 1 21 2218 1 21 2225 1 21 2226 1 21 2227 1 21 2228 1 21 2229 1 21 2230 1 21 2235 1 21 2240 1 21 2241 1 21 2242 1 21 2243 1 21 2250 1 21 2251 1 21 2252 1 21 2253 1 21 2260 1 21 2261 1 21 2262 1 21 2263 1 21 2264 1 21 2265 1 21 2270 1 21 2271 1 21 2272 1 21 2273 1 21 2280 1 21 2281 1 21 2282 1 21 2283 1 21 2284 1 21 2285 1 21 2290 1 21 2291 1 21 2292 1 21 2293 1 21 2294 1 21 2295 1 21 2300 1 21 2301 1 21 2302 1 21 2303 1 21 2305 1 21 2310 1 21 2311 1 21 2312 1 21 2313 1 21 2320 1 21 2321 1 21 2322 1 21 2323 1 21 2330 1 21 2331 1 21 2332 1 21 2333 1 21 2334 1 21 2335 1 21 2340 1 21 2341 1 21 2342 1 21 2343 1 21 2350 1 21 2351 1 21 2352 1 21 2353 1 21 2354 1 21 2355 1 21 2360 1 21 2361 1 21 2362 1 21 2363 1 21 2364 1 21 2365 1 21 2370 1 21 2371 1 21 2372 1 21 2373 1 21 2375 1 21 2376 1 21 2377 1 21 2378 1 21 2385 1 21 2386 1 21 2387 1 21 2388 1 21 2389 1 21 2390 1 21 2395 1 21 2396 1 21 2397 1 21 2398 1 21 2399 1 21 2400 1 21 2405 1 21 2406 1 21 2407 1 21 2408 1 21 2410 1 21 2411 1 21 2412 1 21 2413 1 21 2414 1 21 2415 1 21 2420 1 21 2421 1 21 2422 1 21 2423 1 21 2425 1 21 2426 1 21 2427 1 21 2428 1 21 2430 1 21 2431 1 21 2436 1 21 2437 1 21 2438 1 21 2439 1 21 2446 1 21 2447 1 21 2448 1 21 2449 1 21 2456 1 21 2457 1 21 2458 1 21 2459 1 21 2460 1 21 2461 1 21 2466 1 21 2467 1 21 2468 1 21 2469 1 21 2476 1 21 2477 1 21 2478 1 21 2479 1 21 2480 1 21 2481 1 21 2486 1 21 2487 1 21 2488 1 21 2489 1 21 2490 1 21 2491 1 21 2496 1 21 2497 1 21 2498 1 21 2499 1 21 2501 1 21 2502 1 21 2503 1 21 2504 1 21 2511 1 21 2512 1 21 2513 1 21 2514 1 21 2515 1 21 2516 1 21 2521 1 21 2522 1 21 2523 1 21 2524 1 21 2525 1 21 2526 1 21 2531 1 21 2532 1 21 2533 1 21 2534 1 21 2536 1 21 2537 1 21 2538 1 21 2539 1 21 2540 1 21 2541 1 21 2546 1 21 2547 1 21 2548 1 21 2549 1 21 2551 1 21 2552 1 21 2553 1 21 2554 1 21 2556 1 21 2557 1 21 2558 1 21 2559 1 21 2560 1 21 2567 1 21 2568 1 21 2569 1 21 2570 1 21 2571 1 21 2572 1 21 2577 1 21 2578 1 21 2579 1 21 2580 1 21 2581 1 21 2582 1 21 2587 1 21 2588 1 21 2589 1 21 2590 1 21 2592 1 21 2593 1 21 2594 1 21 2595 1 21 2596 1 21 2597 1 21 2602 1 21 2603 1 21 2604 1 21 2605 1 21 2607 1 21 2608 1 21 2609 1 21 2610 1 21 2612 1 21 2613 1 21 2614 1 21 2615 1 21 2616 1 21 2617 1 21 2618 1 21 2623 1 21 2624 1 21 2625 1 21 2626 1 21 2628 1 21 2629 1 21 2630 1 21 2631 1 21 2633 1 21 2634 1 21 2635 1 21 2636 1 21 2637 1 21 2639 1 21 2640 1 22 5 1 22 12 1 22 18 1 22 23 1 22 27 1 22 31 1 22 32 1 22 33 1 22 40 1 22 46 1 22 51 1 22 55 1 22 59 1 22 60 1 22 61 1 22 67 1 22 72 1 22 76 1 22 80 1 22 81 1 22 82 1 22 87 1 22 91 1 22 95 1 22 96 1 22 97 1 22 101 1 22 105 1 22 106 1 22 107 1 22 111 1 22 112 1 22 113 1 22 117 1 22 118 1 22 119 1 22 124 1 22 130 1 22 135 1 22 139 1 22 143 1 22 144 1 22 145 1 22 151 1 22 156 1 22 160 1 22 164 1 22 165 1 22 166 1 22 171 1 22 175 1 22 179 1 22 180 1 22 181 1 22 185 1 22 189 1 22 190 1 22 191 1 22 195 1 22 196 1 22 197 1 22 201 1 22 202 1 22 203 1 22 207 1 22 212 1 22 216 1 22 220 1 22 221 1 22 222 1 22 227 1 22 231 1 22 235 1 22 236 1 22 237 1 22 241 1 22 245 1 22 246 1 22 247 1 22 251 1 22 252 1 22 253 1 22 257 1 22 258 1 22 259 1 22 262 1 22 266 1 22 270 1 22 271 1 22 272 1 22 276 1 22 280 1 22 281 1 22 282 1 22 286 1 22 287 1 22 288 1 22 292 1 22 293 1 22 294 1 22 296 1 22 300 1 22 301 1 22 302 1 22 306 1 22 307 1 22 308 1 22 312 1 22 313 1 22 314 1 22 316 1 22 317 1 22 318 1 22 322 1 22 323 1 22 324 1 22 326 1 22 327 1 22 328 1 22 330 1 22 334 1 22 340 1 22 345 1 22 349 1 22 353 1 22 354 1 22 355 1 22 361 1 22 366 1 22 370 1 22 374 1 22 375 1 22 376 1 22 381 1 22 385 1 22 389 1 22 390 1 22 391 1 22 395 1 22 399 1 22 400 1 22 401 1 22 405 1 22 406 1 22 407 1 22 411 1 22 412 1 22 413 1 22 417 1 22 422 1 22 426 1 22 430 1 22 431 1 22 432 1 22 437 1 22 441 1 22 445 1 22 446 1 22 447 1 22 451 1 22 455 1 22 456 1 22 457 1 22 461 1 22 462 1 22 463 1 22 467 1 22 468 1 22 469 1 22 472 1 22 476 1 22 480 1 22 481 1 22 482 1 22 486 1 22 490 1 22 491 1 22 492 1 22 496 1 22 497 1 22 498 1 22 502 1 22 503 1 22 504 1 22 506 1 22 510 1 22 511 1 22 512 1 22 516 1 22 517 1 22 518 1 22 522 1 22 523 1 22 524 1 22 526 1 22 527 1 22 528 1 22 532 1 22 533 1 22 534 1 22 536 1 22 537 1 22 538 1 22 540 1 22 543 1 22 548 1 22 552 1 22 556 1 22 557 1 22 558 1 22 563 1 22 567 1 22 571 1 22 572 1 22 573 1 22 577 1 22 581 1 22 582 1 22 583 1 22 587 1 22 588 1 22 589 1 22 593 1 22 594 1 22 595 1 22 598 1 22 602 1 22 606 1 22 607 1 22 608 1 22 612 1 22 616 1 22 617 1 22 618 1 22 622 1 22 623 1 22 624 1 22 628 1 22 629 1 22 630 1 22 632 1 22 636 1 22 637 1 22 638 1 22 642 1 22 643 1 22 644 1 22 648 1 22 649 1 22 650 1 22 652 1 22 653 1 22 654 1 22 658 1 22 659 1 22 660 1 22 662 1 22 663 1 22 664 1 22 666 1 22 668 1 22 672 1 22 676 1 22 677 1 22 678 1 22 682 1 22 686 1 22 687 1 22 688 1 22 692 1 22 693 1 22 694 1 22 698 1 22 699 1 22 700 1 22 702 1 22 706 1 22 707 1 22 708 1 22 712 1 22 713 1 22 714 1 22 718 1 22 719 1 22 720 1 22 722 1 22 723 1 22 724 1 22 728 1 22 729 1 22 730 1 22 732 1 22 733 1 22 734 1 22 736 1 22 737 1 22 741 1 22 742 1 22 743 1 22 747 1 22 748 1 22 749 1 22 753 1 22 754 1 22 755 1 22 757 1 22 758 1 22 759 1 22 763 1 22 764 1 22 765 1 22 767 1 22 768 1 22 769 1 22 771 1 22 772 1 22 773 1 22 774 1 22 778 1 22 779 1 22 780 1 22 782 1 22 783 1 22 784 1 22 786 1 22 787 1 22 788 1 22 789 1 22 791 1 22 792 1 22 1720 1 22 1726 1 22 1731 1 22 1735 1 22 1739 1 22 1740 1 22 1741 1 22 1747 1 22 1752 1 22 1756 1 22 1760 1 22 1761 1 22 1762 1 22 1767 1 22 1771 1 22 1775 1 22 1776 1 22 1777 1 22 1781 1 22 1785 1 22 1786 1 22 1787 1 22 1791 1 22 1792 1 22 1793 1 22 1797 1 22 1798 1 22 1799 1 22 1803 1 22 1808 1 22 1812 1 22 1816 1 22 1817 1 22 1818 1 22 1823 1 22 1827 1 22 1831 1 22 1832 1 22 1833 1 22 1837 1 22 1841 1 22 1842 1 22 1843 1 22 1847 1 22 1848 1 22 1849 1 22 1853 1 22 1854 1 22 1855 1 22 1858 1 22 1862 1 22 1866 1 22 1867 1 22 1868 1 22 1872 1 22 1876 1 22 1877 1 22 1878 1 22 1882 1 22 1883 1 22 1884 1 22 1888 1 22 1889 1 22 1890 1 22 1892 1 22 1896 1 22 1897 1 22 1898 1 22 1902 1 22 1903 1 22 1904 1 22 1908 1 22 1909 1 22 1910 1 22 1912 1 22 1913 1 22 1914 1 22 1918 1 22 1919 1 22 1920 1 22 1922 1 22 1923 1 22 1924 1 22 1926 1 22 1929 1 22 1934 1 22 1938 1 22 1942 1 22 1943 1 22 1944 1 22 1949 1 22 1953 1 22 1957 1 22 1958 1 22 1959 1 22 1963 1 22 1967 1 22 1968 1 22 1969 1 22 1973 1 22 1974 1 22 1975 1 22 1979 1 22 1980 1 22 1981 1 22 1984 1 22 1988 1 22 1992 1 22 1993 1 22 1994 1 22 1998 1 22 2002 1 22 2003 1 22 2004 1 22 2008 1 22 2009 1 22 2010 1 22 2014 1 22 2015 1 22 2016 1 22 2018 1 22 2022 1 22 2023 1 22 2024 1 22 2028 1 22 2029 1 22 2030 1 22 2034 1 22 2035 1 22 2036 1 22 2038 1 22 2039 1 22 2040 1 22 2044 1 22 2045 1 22 2046 1 22 2048 1 22 2049 1 22 2050 1 22 2052 1 22 2054 1 22 2058 1 22 2062 1 22 2063 1 22 2064 1 22 2068 1 22 2072 1 22 2073 1 22 2074 1 22 2078 1 22 2079 1 22 2080 1 22 2084 1 22 2085 1 22 2086 1 22 2088 1 22 2092 1 22 2093 1 22 2094 1 22 2098 1 22 2099 1 22 2100 1 22 2104 1 22 2105 1 22 2106 1 22 2108 1 22 2109 1 22 2110 1 22 2114 1 22 2115 1 22 2116 1 22 2118 1 22 2119 1 22 2120 1 22 2122 1 22 2123 1 22 2127 1 22 2128 1 22 2129 1 22 2133 1 22 2134 1 22 2135 1 22 2139 1 22 2140 1 22 2141 1 22 2143 1 22 2144 1 22 2145 1 22 2149 1 22 2150 1 22 2151 1 22 2153 1 22 2154 1 22 2155 1 22 2157 1 22 2158 1 22 2159 1 22 2160 1 22 2164 1 22 2165 1 22 2166 1 22 2168 1 22 2169 1 22 2170 1 22 2172 1 22 2173 1 22 2174 1 22 2175 1 22 2177 1 22 2178 1 22 2181 1 22 2186 1 22 2190 1 22 2194 1 22 2195 1 22 2196 1 22 2201 1 22 2205 1 22 2209 1 22 2210 1 22 2211 1 22 2215 1 22 2219 1 22 2220 1 22 2221 1 22 2225 1 22 2226 1 22 2227 1 22 2231 1 22 2232 1 22 2233 1 22 2236 1 22 2240 1 22 2244 1 22 2245 1 22 2246 1 22 2250 1 22 2254 1 22 2255 1 22 2256 1 22 2260 1 22 2261 1 22 2262 1 22 2266 1 22 2267 1 22 2268 1 22 2270 1 22 2274 1 22 2275 1 22 2276 1 22 2280 1 22 2281 1 22 2282 1 22 2286 1 22 2287 1 22 2288 1 22 2290 1 22 2291 1 22 2292 1 22 2296 1 22 2297 1 22 2298 1 22 2300 1 22 2301 1 22 2302 1 22 2304 1 22 2306 1 22 2310 1 22 2314 1 22 2315 1 22 2316 1 22 2320 1 22 2324 1 22 2325 1 22 2326 1 22 2330 1 22 2331 1 22 2332 1 22 2336 1 22 2337 1 22 2338 1 22 2340 1 22 2344 1 22 2345 1 22 2346 1 22 2350 1 22 2351 1 22 2352 1 22 2356 1 22 2357 1 22 2358 1 22 2360 1 22 2361 1 22 2362 1 22 2366 1 22 2367 1 22 2368 1 22 2370 1 22 2371 1 22 2372 1 22 2374 1 22 2375 1 22 2379 1 22 2380 1 22 2381 1 22 2385 1 22 2386 1 22 2387 1 22 2391 1 22 2392 1 22 2393 1 22 2395 1 22 2396 1 22 2397 1 22 2401 1 22 2402 1 22 2403 1 22 2405 1 22 2406 1 22 2407 1 22 2409 1 22 2410 1 22 2411 1 22 2412 1 22 2416 1 22 2417 1 22 2418 1 22 2420 1 22 2421 1 22 2422 1 22 2424 1 22 2425 1 22 2426 1 22 2427 1 22 2429 1 22 2430 1 22 2432 1 22 2436 1 22 2440 1 22 2441 1 22 2442 1 22 2446 1 22 2450 1 22 2451 1 22 2452 1 22 2456 1 22 2457 1 22 2458 1 22 2462 1 22 2463 1 22 2464 1 22 2466 1 22 2470 1 22 2471 1 22 2472 1 22 2476 1 22 2477 1 22 2478 1 22 2482 1 22 2483 1 22 2484 1 22 2486 1 22 2487 1 22 2488 1 22 2492 1 22 2493 1 22 2494 1 22 2496 1 22 2497 1 22 2498 1 22 2500 1 22 2501 1 22 2505 1 22 2506 1 22 2507 1 22 2511 1 22 2512 1 22 2513 1 22 2517 1 22 2518 1 22 2519 1 22 2521 1 22 2522 1 22 2523 1 22 2527 1 22 2528 1 22 2529 1 22 2531 1 22 2532 1 22 2533 1 22 2535 1 22 2536 1 22 2537 1 22 2538 1 22 2542 1 22 2543 1 22 2544 1 22 2546 1 22 2547 1 22 2548 1 22 2550 1 22 2551 1 22 2552 1 22 2553 1 22 2555 1 22 2556 1 22 2557 1 22 2561 1 22 2562 1 22 2563 1 22 2567 1 22 2568 1 22 2569 1 22 2573 1 22 2574 1 22 2575 1 22 2577 1 22 2578 1 22 2579 1 22 2583 1 22 2584 1 22 2585 1 22 2587 1 22 2588 1 22 2589 1 22 2591 1 22 2592 1 22 2593 1 22 2594 1 22 2598 1 22 2599 1 22 2600 1 22 2602 1 22 2603 1 22 2604 1 22 2606 1 22 2607 1 22 2608 1 22 2609 1 22 2611 1 22 2612 1 22 2613 1 22 2614 1 22 2615 1 22 2619 1 22 2620 1 22 2621 1 22 2623 1 22 2624 1 22 2625 1 22 2627 1 22 2628 1 22 2629 1 22 2630 1 22 2632 1 22 2633 1 22 2634 1 22 2635 1 22 2636 1 22 2638 1 22 2639 1 22 2640 1 23 6 1 23 13 1 23 19 1 23 24 1 23 28 1 23 31 1 23 34 1 23 35 1 23 41 1 23 47 1 23 52 1 23 56 1 23 59 1 23 62 1 23 63 1 23 68 1 23 73 1 23 77 1 23 80 1 23 83 1 23 84 1 23 88 1 23 92 1 23 95 1 23 98 1 23 99 1 23 102 1 23 105 1 23 108 1 23 109 1 23 111 1 23 114 1 23 115 1 23 117 1 23 118 1 23 120 1 23 125 1 23 131 1 23 136 1 23 140 1 23 143 1 23 146 1 23 147 1 23 152 1 23 157 1 23 161 1 23 164 1 23 167 1 23 168 1 23 172 1 23 176 1 23 179 1 23 182 1 23 183 1 23 186 1 23 189 1 23 192 1 23 193 1 23 195 1 23 198 1 23 199 1 23 201 1 23 202 1 23 204 1 23 208 1 23 213 1 23 217 1 23 220 1 23 223 1 23 224 1 23 228 1 23 232 1 23 235 1 23 238 1 23 239 1 23 242 1 23 245 1 23 248 1 23 249 1 23 251 1 23 254 1 23 255 1 23 257 1 23 258 1 23 260 1 23 263 1 23 267 1 23 270 1 23 273 1 23 274 1 23 277 1 23 280 1 23 283 1 23 284 1 23 286 1 23 289 1 23 290 1 23 292 1 23 293 1 23 295 1 23 297 1 23 300 1 23 303 1 23 304 1 23 306 1 23 309 1 23 310 1 23 312 1 23 313 1 23 315 1 23 316 1 23 319 1 23 320 1 23 322 1 23 323 1 23 325 1 23 326 1 23 327 1 23 329 1 23 330 1 23 335 1 23 341 1 23 346 1 23 350 1 23 353 1 23 356 1 23 357 1 23 362 1 23 367 1 23 371 1 23 374 1 23 377 1 23 378 1 23 382 1 23 386 1 23 389 1 23 392 1 23 393 1 23 396 1 23 399 1 23 402 1 23 403 1 23 405 1 23 408 1 23 409 1 23 411 1 23 412 1 23 414 1 23 418 1 23 423 1 23 427 1 23 430 1 23 433 1 23 434 1 23 438 1 23 442 1 23 445 1 23 448 1 23 449 1 23 452 1 23 455 1 23 458 1 23 459 1 23 461 1 23 464 1 23 465 1 23 467 1 23 468 1 23 470 1 23 473 1 23 477 1 23 480 1 23 483 1 23 484 1 23 487 1 23 490 1 23 493 1 23 494 1 23 496 1 23 499 1 23 500 1 23 502 1 23 503 1 23 505 1 23 507 1 23 510 1 23 513 1 23 514 1 23 516 1 23 519 1 23 520 1 23 522 1 23 523 1 23 525 1 23 526 1 23 529 1 23 530 1 23 532 1 23 533 1 23 535 1 23 536 1 23 537 1 23 539 1 23 540 1 23 544 1 23 549 1 23 553 1 23 556 1 23 559 1 23 560 1 23 564 1 23 568 1 23 571 1 23 574 1 23 575 1 23 578 1 23 581 1 23 584 1 23 585 1 23 587 1 23 590 1 23 591 1 23 593 1 23 594 1 23 596 1 23 599 1 23 603 1 23 606 1 23 609 1 23 610 1 23 613 1 23 616 1 23 619 1 23 620 1 23 622 1 23 625 1 23 626 1 23 628 1 23 629 1 23 631 1 23 633 1 23 636 1 23 639 1 23 640 1 23 642 1 23 645 1 23 646 1 23 648 1 23 649 1 23 651 1 23 652 1 23 655 1 23 656 1 23 658 1 23 659 1 23 661 1 23 662 1 23 663 1 23 665 1 23 666 1 23 669 1 23 673 1 23 676 1 23 679 1 23 680 1 23 683 1 23 686 1 23 689 1 23 690 1 23 692 1 23 695 1 23 696 1 23 698 1 23 699 1 23 701 1 23 703 1 23 706 1 23 709 1 23 710 1 23 712 1 23 715 1 23 716 1 23 718 1 23 719 1 23 721 1 23 722 1 23 725 1 23 726 1 23 728 1 23 729 1 23 731 1 23 732 1 23 733 1 23 735 1 23 736 1 23 738 1 23 741 1 23 744 1 23 745 1 23 747 1 23 750 1 23 751 1 23 753 1 23 754 1 23 756 1 23 757 1 23 760 1 23 761 1 23 763 1 23 764 1 23 766 1 23 767 1 23 768 1 23 770 1 23 771 1 23 772 1 23 775 1 23 776 1 23 778 1 23 779 1 23 781 1 23 782 1 23 783 1 23 785 1 23 786 1 23 787 1 23 788 1 23 790 1 23 791 1 23 792 1 23 1721 1 23 1727 1 23 1732 1 23 1736 1 23 1739 1 23 1742 1 23 1743 1 23 1748 1 23 1753 1 23 1757 1 23 1760 1 23 1763 1 23 1764 1 23 1768 1 23 1772 1 23 1775 1 23 1778 1 23 1779 1 23 1782 1 23 1785 1 23 1788 1 23 1789 1 23 1791 1 23 1794 1 23 1795 1 23 1797 1 23 1798 1 23 1800 1 23 1804 1 23 1809 1 23 1813 1 23 1816 1 23 1819 1 23 1820 1 23 1824 1 23 1828 1 23 1831 1 23 1834 1 23 1835 1 23 1838 1 23 1841 1 23 1844 1 23 1845 1 23 1847 1 23 1850 1 23 1851 1 23 1853 1 23 1854 1 23 1856 1 23 1859 1 23 1863 1 23 1866 1 23 1869 1 23 1870 1 23 1873 1 23 1876 1 23 1879 1 23 1880 1 23 1882 1 23 1885 1 23 1886 1 23 1888 1 23 1889 1 23 1891 1 23 1893 1 23 1896 1 23 1899 1 23 1900 1 23 1902 1 23 1905 1 23 1906 1 23 1908 1 23 1909 1 23 1911 1 23 1912 1 23 1915 1 23 1916 1 23 1918 1 23 1919 1 23 1921 1 23 1922 1 23 1923 1 23 1925 1 23 1926 1 23 1930 1 23 1935 1 23 1939 1 23 1942 1 23 1945 1 23 1946 1 23 1950 1 23 1954 1 23 1957 1 23 1960 1 23 1961 1 23 1964 1 23 1967 1 23 1970 1 23 1971 1 23 1973 1 23 1976 1 23 1977 1 23 1979 1 23 1980 1 23 1982 1 23 1985 1 23 1989 1 23 1992 1 23 1995 1 23 1996 1 23 1999 1 23 2002 1 23 2005 1 23 2006 1 23 2008 1 23 2011 1 23 2012 1 23 2014 1 23 2015 1 23 2017 1 23 2019 1 23 2022 1 23 2025 1 23 2026 1 23 2028 1 23 2031 1 23 2032 1 23 2034 1 23 2035 1 23 2037 1 23 2038 1 23 2041 1 23 2042 1 23 2044 1 23 2045 1 23 2047 1 23 2048 1 23 2049 1 23 2051 1 23 2052 1 23 2055 1 23 2059 1 23 2062 1 23 2065 1 23 2066 1 23 2069 1 23 2072 1 23 2075 1 23 2076 1 23 2078 1 23 2081 1 23 2082 1 23 2084 1 23 2085 1 23 2087 1 23 2089 1 23 2092 1 23 2095 1 23 2096 1 23 2098 1 23 2101 1 23 2102 1 23 2104 1 23 2105 1 23 2107 1 23 2108 1 23 2111 1 23 2112 1 23 2114 1 23 2115 1 23 2117 1 23 2118 1 23 2119 1 23 2121 1 23 2122 1 23 2124 1 23 2127 1 23 2130 1 23 2131 1 23 2133 1 23 2136 1 23 2137 1 23 2139 1 23 2140 1 23 2142 1 23 2143 1 23 2146 1 23 2147 1 23 2149 1 23 2150 1 23 2152 1 23 2153 1 23 2154 1 23 2156 1 23 2157 1 23 2158 1 23 2161 1 23 2162 1 23 2164 1 23 2165 1 23 2167 1 23 2168 1 23 2169 1 23 2171 1 23 2172 1 23 2173 1 23 2174 1 23 2176 1 23 2177 1 23 2178 1 23 2182 1 23 2187 1 23 2191 1 23 2194 1 23 2197 1 23 2198 1 23 2202 1 23 2206 1 23 2209 1 23 2212 1 23 2213 1 23 2216 1 23 2219 1 23 2222 1 23 2223 1 23 2225 1 23 2228 1 23 2229 1 23 2231 1 23 2232 1 23 2234 1 23 2237 1 23 2241 1 23 2244 1 23 2247 1 23 2248 1 23 2251 1 23 2254 1 23 2257 1 23 2258 1 23 2260 1 23 2263 1 23 2264 1 23 2266 1 23 2267 1 23 2269 1 23 2271 1 23 2274 1 23 2277 1 23 2278 1 23 2280 1 23 2283 1 23 2284 1 23 2286 1 23 2287 1 23 2289 1 23 2290 1 23 2293 1 23 2294 1 23 2296 1 23 2297 1 23 2299 1 23 2300 1 23 2301 1 23 2303 1 23 2304 1 23 2307 1 23 2311 1 23 2314 1 23 2317 1 23 2318 1 23 2321 1 23 2324 1 23 2327 1 23 2328 1 23 2330 1 23 2333 1 23 2334 1 23 2336 1 23 2337 1 23 2339 1 23 2341 1 23 2344 1 23 2347 1 23 2348 1 23 2350 1 23 2353 1 23 2354 1 23 2356 1 23 2357 1 23 2359 1 23 2360 1 23 2363 1 23 2364 1 23 2366 1 23 2367 1 23 2369 1 23 2370 1 23 2371 1 23 2373 1 23 2374 1 23 2376 1 23 2379 1 23 2382 1 23 2383 1 23 2385 1 23 2388 1 23 2389 1 23 2391 1 23 2392 1 23 2394 1 23 2395 1 23 2398 1 23 2399 1 23 2401 1 23 2402 1 23 2404 1 23 2405 1 23 2406 1 23 2408 1 23 2409 1 23 2410 1 23 2413 1 23 2414 1 23 2416 1 23 2417 1 23 2419 1 23 2420 1 23 2421 1 23 2423 1 23 2424 1 23 2425 1 23 2426 1 23 2428 1 23 2429 1 23 2430 1 23 2433 1 23 2437 1 23 2440 1 23 2443 1 23 2444 1 23 2447 1 23 2450 1 23 2453 1 23 2454 1 23 2456 1 23 2459 1 23 2460 1 23 2462 1 23 2463 1 23 2465 1 23 2467 1 23 2470 1 23 2473 1 23 2474 1 23 2476 1 23 2479 1 23 2480 1 23 2482 1 23 2483 1 23 2485 1 23 2486 1 23 2489 1 23 2490 1 23 2492 1 23 2493 1 23 2495 1 23 2496 1 23 2497 1 23 2499 1 23 2500 1 23 2502 1 23 2505 1 23 2508 1 23 2509 1 23 2511 1 23 2514 1 23 2515 1 23 2517 1 23 2518 1 23 2520 1 23 2521 1 23 2524 1 23 2525 1 23 2527 1 23 2528 1 23 2530 1 23 2531 1 23 2532 1 23 2534 1 23 2535 1 23 2536 1 23 2539 1 23 2540 1 23 2542 1 23 2543 1 23 2545 1 23 2546 1 23 2547 1 23 2549 1 23 2550 1 23 2551 1 23 2552 1 23 2554 1 23 2555 1 23 2556 1 23 2558 1 23 2561 1 23 2564 1 23 2565 1 23 2567 1 23 2570 1 23 2571 1 23 2573 1 23 2574 1 23 2576 1 23 2577 1 23 2580 1 23 2581 1 23 2583 1 23 2584 1 23 2586 1 23 2587 1 23 2588 1 23 2590 1 23 2591 1 23 2592 1 23 2595 1 23 2596 1 23 2598 1 23 2599 1 23 2601 1 23 2602 1 23 2603 1 23 2605 1 23 2606 1 23 2607 1 23 2608 1 23 2610 1 23 2611 1 23 2612 1 23 2613 1 23 2616 1 23 2617 1 23 2619 1 23 2620 1 23 2622 1 23 2623 1 23 2624 1 23 2626 1 23 2627 1 23 2628 1 23 2629 1 23 2631 1 23 2632 1 23 2633 1 23 2634 1 23 2635 1 23 2637 1 23 2638 1 23 2639 1 23 2640 1 24 7 1 24 14 1 24 20 1 24 25 1 24 29 1 24 32 1 24 34 1 24 36 1 24 42 1 24 48 1 24 53 1 24 57 1 24 60 1 24 62 1 24 64 1 24 69 1 24 74 1 24 78 1 24 81 1 24 83 1 24 85 1 24 89 1 24 93 1 24 96 1 24 98 1 24 100 1 24 103 1 24 106 1 24 108 1 24 110 1 24 112 1 24 114 1 24 116 1 24 117 1 24 119 1 24 120 1 24 126 1 24 132 1 24 137 1 24 141 1 24 144 1 24 146 1 24 148 1 24 153 1 24 158 1 24 162 1 24 165 1 24 167 1 24 169 1 24 173 1 24 177 1 24 180 1 24 182 1 24 184 1 24 187 1 24 190 1 24 192 1 24 194 1 24 196 1 24 198 1 24 200 1 24 201 1 24 203 1 24 204 1 24 209 1 24 214 1 24 218 1 24 221 1 24 223 1 24 225 1 24 229 1 24 233 1 24 236 1 24 238 1 24 240 1 24 243 1 24 246 1 24 248 1 24 250 1 24 252 1 24 254 1 24 256 1 24 257 1 24 259 1 24 260 1 24 264 1 24 268 1 24 271 1 24 273 1 24 275 1 24 278 1 24 281 1 24 283 1 24 285 1 24 287 1 24 289 1 24 291 1 24 292 1 24 294 1 24 295 1 24 298 1 24 301 1 24 303 1 24 305 1 24 307 1 24 309 1 24 311 1 24 312 1 24 314 1 24 315 1 24 317 1 24 319 1 24 321 1 24 322 1 24 324 1 24 325 1 24 326 1 24 328 1 24 329 1 24 330 1 24 336 1 24 342 1 24 347 1 24 351 1 24 354 1 24 356 1 24 358 1 24 363 1 24 368 1 24 372 1 24 375 1 24 377 1 24 379 1 24 383 1 24 387 1 24 390 1 24 392 1 24 394 1 24 397 1 24 400 1 24 402 1 24 404 1 24 406 1 24 408 1 24 410 1 24 411 1 24 413 1 24 414 1 24 419 1 24 424 1 24 428 1 24 431 1 24 433 1 24 435 1 24 439 1 24 443 1 24 446 1 24 448 1 24 450 1 24 453 1 24 456 1 24 458 1 24 460 1 24 462 1 24 464 1 24 466 1 24 467 1 24 469 1 24 470 1 24 474 1 24 478 1 24 481 1 24 483 1 24 485 1 24 488 1 24 491 1 24 493 1 24 495 1 24 497 1 24 499 1 24 501 1 24 502 1 24 504 1 24 505 1 24 508 1 24 511 1 24 513 1 24 515 1 24 517 1 24 519 1 24 521 1 24 522 1 24 524 1 24 525 1 24 527 1 24 529 1 24 531 1 24 532 1 24 534 1 24 535 1 24 536 1 24 538 1 24 539 1 24 540 1 24 545 1 24 550 1 24 554 1 24 557 1 24 559 1 24 561 1 24 565 1 24 569 1 24 572 1 24 574 1 24 576 1 24 579 1 24 582 1 24 584 1 24 586 1 24 588 1 24 590 1 24 592 1 24 593 1 24 595 1 24 596 1 24 600 1 24 604 1 24 607 1 24 609 1 24 611 1 24 614 1 24 617 1 24 619 1 24 621 1 24 623 1 24 625 1 24 627 1 24 628 1 24 630 1 24 631 1 24 634 1 24 637 1 24 639 1 24 641 1 24 643 1 24 645 1 24 647 1 24 648 1 24 650 1 24 651 1 24 653 1 24 655 1 24 657 1 24 658 1 24 660 1 24 661 1 24 662 1 24 664 1 24 665 1 24 666 1 24 670 1 24 674 1 24 677 1 24 679 1 24 681 1 24 684 1 24 687 1 24 689 1 24 691 1 24 693 1 24 695 1 24 697 1 24 698 1 24 700 1 24 701 1 24 704 1 24 707 1 24 709 1 24 711 1 24 713 1 24 715 1 24 717 1 24 718 1 24 720 1 24 721 1 24 723 1 24 725 1 24 727 1 24 728 1 24 730 1 24 731 1 24 732 1 24 734 1 24 735 1 24 736 1 24 739 1 24 742 1 24 744 1 24 746 1 24 748 1 24 750 1 24 752 1 24 753 1 24 755 1 24 756 1 24 758 1 24 760 1 24 762 1 24 763 1 24 765 1 24 766 1 24 767 1 24 769 1 24 770 1 24 771 1 24 773 1 24 775 1 24 777 1 24 778 1 24 780 1 24 781 1 24 782 1 24 784 1 24 785 1 24 786 1 24 787 1 24 789 1 24 790 1 24 791 1 24 792 1 24 1722 1 24 1728 1 24 1733 1 24 1737 1 24 1740 1 24 1742 1 24 1744 1 24 1749 1 24 1754 1 24 1758 1 24 1761 1 24 1763 1 24 1765 1 24 1769 1 24 1773 1 24 1776 1 24 1778 1 24 1780 1 24 1783 1 24 1786 1 24 1788 1 24 1790 1 24 1792 1 24 1794 1 24 1796 1 24 1797 1 24 1799 1 24 1800 1 24 1805 1 24 1810 1 24 1814 1 24 1817 1 24 1819 1 24 1821 1 24 1825 1 24 1829 1 24 1832 1 24 1834 1 24 1836 1 24 1839 1 24 1842 1 24 1844 1 24 1846 1 24 1848 1 24 1850 1 24 1852 1 24 1853 1 24 1855 1 24 1856 1 24 1860 1 24 1864 1 24 1867 1 24 1869 1 24 1871 1 24 1874 1 24 1877 1 24 1879 1 24 1881 1 24 1883 1 24 1885 1 24 1887 1 24 1888 1 24 1890 1 24 1891 1 24 1894 1 24 1897 1 24 1899 1 24 1901 1 24 1903 1 24 1905 1 24 1907 1 24 1908 1 24 1910 1 24 1911 1 24 1913 1 24 1915 1 24 1917 1 24 1918 1 24 1920 1 24 1921 1 24 1922 1 24 1924 1 24 1925 1 24 1926 1 24 1931 1 24 1936 1 24 1940 1 24 1943 1 24 1945 1 24 1947 1 24 1951 1 24 1955 1 24 1958 1 24 1960 1 24 1962 1 24 1965 1 24 1968 1 24 1970 1 24 1972 1 24 1974 1 24 1976 1 24 1978 1 24 1979 1 24 1981 1 24 1982 1 24 1986 1 24 1990 1 24 1993 1 24 1995 1 24 1997 1 24 2000 1 24 2003 1 24 2005 1 24 2007 1 24 2009 1 24 2011 1 24 2013 1 24 2014 1 24 2016 1 24 2017 1 24 2020 1 24 2023 1 24 2025 1 24 2027 1 24 2029 1 24 2031 1 24 2033 1 24 2034 1 24 2036 1 24 2037 1 24 2039 1 24 2041 1 24 2043 1 24 2044 1 24 2046 1 24 2047 1 24 2048 1 24 2050 1 24 2051 1 24 2052 1 24 2056 1 24 2060 1 24 2063 1 24 2065 1 24 2067 1 24 2070 1 24 2073 1 24 2075 1 24 2077 1 24 2079 1 24 2081 1 24 2083 1 24 2084 1 24 2086 1 24 2087 1 24 2090 1 24 2093 1 24 2095 1 24 2097 1 24 2099 1 24 2101 1 24 2103 1 24 2104 1 24 2106 1 24 2107 1 24 2109 1 24 2111 1 24 2113 1 24 2114 1 24 2116 1 24 2117 1 24 2118 1 24 2120 1 24 2121 1 24 2122 1 24 2125 1 24 2128 1 24 2130 1 24 2132 1 24 2134 1 24 2136 1 24 2138 1 24 2139 1 24 2141 1 24 2142 1 24 2144 1 24 2146 1 24 2148 1 24 2149 1 24 2151 1 24 2152 1 24 2153 1 24 2155 1 24 2156 1 24 2157 1 24 2159 1 24 2161 1 24 2163 1 24 2164 1 24 2166 1 24 2167 1 24 2168 1 24 2170 1 24 2171 1 24 2172 1 24 2173 1 24 2175 1 24 2176 1 24 2177 1 24 2178 1 24 2183 1 24 2188 1 24 2192 1 24 2195 1 24 2197 1 24 2199 1 24 2203 1 24 2207 1 24 2210 1 24 2212 1 24 2214 1 24 2217 1 24 2220 1 24 2222 1 24 2224 1 24 2226 1 24 2228 1 24 2230 1 24 2231 1 24 2233 1 24 2234 1 24 2238 1 24 2242 1 24 2245 1 24 2247 1 24 2249 1 24 2252 1 24 2255 1 24 2257 1 24 2259 1 24 2261 1 24 2263 1 24 2265 1 24 2266 1 24 2268 1 24 2269 1 24 2272 1 24 2275 1 24 2277 1 24 2279 1 24 2281 1 24 2283 1 24 2285 1 24 2286 1 24 2288 1 24 2289 1 24 2291 1 24 2293 1 24 2295 1 24 2296 1 24 2298 1 24 2299 1 24 2300 1 24 2302 1 24 2303 1 24 2304 1 24 2308 1 24 2312 1 24 2315 1 24 2317 1 24 2319 1 24 2322 1 24 2325 1 24 2327 1 24 2329 1 24 2331 1 24 2333 1 24 2335 1 24 2336 1 24 2338 1 24 2339 1 24 2342 1 24 2345 1 24 2347 1 24 2349 1 24 2351 1 24 2353 1 24 2355 1 24 2356 1 24 2358 1 24 2359 1 24 2361 1 24 2363 1 24 2365 1 24 2366 1 24 2368 1 24 2369 1 24 2370 1 24 2372 1 24 2373 1 24 2374 1 24 2377 1 24 2380 1 24 2382 1 24 2384 1 24 2386 1 24 2388 1 24 2390 1 24 2391 1 24 2393 1 24 2394 1 24 2396 1 24 2398 1 24 2400 1 24 2401 1 24 2403 1 24 2404 1 24 2405 1 24 2407 1 24 2408 1 24 2409 1 24 2411 1 24 2413 1 24 2415 1 24 2416 1 24 2418 1 24 2419 1 24 2420 1 24 2422 1 24 2423 1 24 2424 1 24 2425 1 24 2427 1 24 2428 1 24 2429 1 24 2430 1 24 2434 1 24 2438 1 24 2441 1 24 2443 1 24 2445 1 24 2448 1 24 2451 1 24 2453 1 24 2455 1 24 2457 1 24 2459 1 24 2461 1 24 2462 1 24 2464 1 24 2465 1 24 2468 1 24 2471 1 24 2473 1 24 2475 1 24 2477 1 24 2479 1 24 2481 1 24 2482 1 24 2484 1 24 2485 1 24 2487 1 24 2489 1 24 2491 1 24 2492 1 24 2494 1 24 2495 1 24 2496 1 24 2498 1 24 2499 1 24 2500 1 24 2503 1 24 2506 1 24 2508 1 24 2510 1 24 2512 1 24 2514 1 24 2516 1 24 2517 1 24 2519 1 24 2520 1 24 2522 1 24 2524 1 24 2526 1 24 2527 1 24 2529 1 24 2530 1 24 2531 1 24 2533 1 24 2534 1 24 2535 1 24 2537 1 24 2539 1 24 2541 1 24 2542 1 24 2544 1 24 2545 1 24 2546 1 24 2548 1 24 2549 1 24 2550 1 24 2551 1 24 2553 1 24 2554 1 24 2555 1 24 2556 1 24 2559 1 24 2562 1 24 2564 1 24 2566 1 24 2568 1 24 2570 1 24 2572 1 24 2573 1 24 2575 1 24 2576 1 24 2578 1 24 2580 1 24 2582 1 24 2583 1 24 2585 1 24 2586 1 24 2587 1 24 2589 1 24 2590 1 24 2591 1 24 2593 1 24 2595 1 24 2597 1 24 2598 1 24 2600 1 24 2601 1 24 2602 1 24 2604 1 24 2605 1 24 2606 1 24 2607 1 24 2609 1 24 2610 1 24 2611 1 24 2612 1 24 2614 1 24 2616 1 24 2618 1 24 2619 1 24 2621 1 24 2622 1 24 2623 1 24 2625 1 24 2626 1 24 2627 1 24 2628 1 24 2630 1 24 2631 1 24 2632 1 24 2633 1 24 2634 1 24 2636 1 24 2637 1 24 2638 1 24 2639 1 24 2640 1 25 8 1 25 15 1 25 21 1 25 26 1 25 30 1 25 33 1 25 35 1 25 36 1 25 43 1 25 49 1 25 54 1 25 58 1 25 61 1 25 63 1 25 64 1 25 70 1 25 75 1 25 79 1 25 82 1 25 84 1 25 85 1 25 90 1 25 94 1 25 97 1 25 99 1 25 100 1 25 104 1 25 107 1 25 109 1 25 110 1 25 113 1 25 115 1 25 116 1 25 118 1 25 119 1 25 120 1 25 127 1 25 133 1 25 138 1 25 142 1 25 145 1 25 147 1 25 148 1 25 154 1 25 159 1 25 163 1 25 166 1 25 168 1 25 169 1 25 174 1 25 178 1 25 181 1 25 183 1 25 184 1 25 188 1 25 191 1 25 193 1 25 194 1 25 197 1 25 199 1 25 200 1 25 202 1 25 203 1 25 204 1 25 210 1 25 215 1 25 219 1 25 222 1 25 224 1 25 225 1 25 230 1 25 234 1 25 237 1 25 239 1 25 240 1 25 244 1 25 247 1 25 249 1 25 250 1 25 253 1 25 255 1 25 256 1 25 258 1 25 259 1 25 260 1 25 265 1 25 269 1 25 272 1 25 274 1 25 275 1 25 279 1 25 282 1 25 284 1 25 285 1 25 288 1 25 290 1 25 291 1 25 293 1 25 294 1 25 295 1 25 299 1 25 302 1 25 304 1 25 305 1 25 308 1 25 310 1 25 311 1 25 313 1 25 314 1 25 315 1 25 318 1 25 320 1 25 321 1 25 323 1 25 324 1 25 325 1 25 327 1 25 328 1 25 329 1 25 330 1 25 337 1 25 343 1 25 348 1 25 352 1 25 355 1 25 357 1 25 358 1 25 364 1 25 369 1 25 373 1 25 376 1 25 378 1 25 379 1 25 384 1 25 388 1 25 391 1 25 393 1 25 394 1 25 398 1 25 401 1 25 403 1 25 404 1 25 407 1 25 409 1 25 410 1 25 412 1 25 413 1 25 414 1 25 420 1 25 425 1 25 429 1 25 432 1 25 434 1 25 435 1 25 440 1 25 444 1 25 447 1 25 449 1 25 450 1 25 454 1 25 457 1 25 459 1 25 460 1 25 463 1 25 465 1 25 466 1 25 468 1 25 469 1 25 470 1 25 475 1 25 479 1 25 482 1 25 484 1 25 485 1 25 489 1 25 492 1 25 494 1 25 495 1 25 498 1 25 500 1 25 501 1 25 503 1 25 504 1 25 505 1 25 509 1 25 512 1 25 514 1 25 515 1 25 518 1 25 520 1 25 521 1 25 523 1 25 524 1 25 525 1 25 528 1 25 530 1 25 531 1 25 533 1 25 534 1 25 535 1 25 537 1 25 538 1 25 539 1 25 540 1 25 546 1 25 551 1 25 555 1 25 558 1 25 560 1 25 561 1 25 566 1 25 570 1 25 573 1 25 575 1 25 576 1 25 580 1 25 583 1 25 585 1 25 586 1 25 589 1 25 591 1 25 592 1 25 594 1 25 595 1 25 596 1 25 601 1 25 605 1 25 608 1 25 610 1 25 611 1 25 615 1 25 618 1 25 620 1 25 621 1 25 624 1 25 626 1 25 627 1 25 629 1 25 630 1 25 631 1 25 635 1 25 638 1 25 640 1 25 641 1 25 644 1 25 646 1 25 647 1 25 649 1 25 650 1 25 651 1 25 654 1 25 656 1 25 657 1 25 659 1 25 660 1 25 661 1 25 663 1 25 664 1 25 665 1 25 666 1 25 671 1 25 675 1 25 678 1 25 680 1 25 681 1 25 685 1 25 688 1 25 690 1 25 691 1 25 694 1 25 696 1 25 697 1 25 699 1 25 700 1 25 701 1 25 705 1 25 708 1 25 710 1 25 711 1 25 714 1 25 716 1 25 717 1 25 719 1 25 720 1 25 721 1 25 724 1 25 726 1 25 727 1 25 729 1 25 730 1 25 731 1 25 733 1 25 734 1 25 735 1 25 736 1 25 740 1 25 743 1 25 745 1 25 746 1 25 749 1 25 751 1 25 752 1 25 754 1 25 755 1 25 756 1 25 759 1 25 761 1 25 762 1 25 764 1 25 765 1 25 766 1 25 768 1 25 769 1 25 770 1 25 771 1 25 774 1 25 776 1 25 777 1 25 779 1 25 780 1 25 781 1 25 783 1 25 784 1 25 785 1 25 786 1 25 788 1 25 789 1 25 790 1 25 791 1 25 792 1 25 1723 1 25 1729 1 25 1734 1 25 1738 1 25 1741 1 25 1743 1 25 1744 1 25 1750 1 25 1755 1 25 1759 1 25 1762 1 25 1764 1 25 1765 1 25 1770 1 25 1774 1 25 1777 1 25 1779 1 25 1780 1 25 1784 1 25 1787 1 25 1789 1 25 1790 1 25 1793 1 25 1795 1 25 1796 1 25 1798 1 25 1799 1 25 1800 1 25 1806 1 25 1811 1 25 1815 1 25 1818 1 25 1820 1 25 1821 1 25 1826 1 25 1830 1 25 1833 1 25 1835 1 25 1836 1 25 1840 1 25 1843 1 25 1845 1 25 1846 1 25 1849 1 25 1851 1 25 1852 1 25 1854 1 25 1855 1 25 1856 1 25 1861 1 25 1865 1 25 1868 1 25 1870 1 25 1871 1 25 1875 1 25 1878 1 25 1880 1 25 1881 1 25 1884 1 25 1886 1 25 1887 1 25 1889 1 25 1890 1 25 1891 1 25 1895 1 25 1898 1 25 1900 1 25 1901 1 25 1904 1 25 1906 1 25 1907 1 25 1909 1 25 1910 1 25 1911 1 25 1914 1 25 1916 1 25 1917 1 25 1919 1 25 1920 1 25 1921 1 25 1923 1 25 1924 1 25 1925 1 25 1926 1 25 1932 1 25 1937 1 25 1941 1 25 1944 1 25 1946 1 25 1947 1 25 1952 1 25 1956 1 25 1959 1 25 1961 1 25 1962 1 25 1966 1 25 1969 1 25 1971 1 25 1972 1 25 1975 1 25 1977 1 25 1978 1 25 1980 1 25 1981 1 25 1982 1 25 1987 1 25 1991 1 25 1994 1 25 1996 1 25 1997 1 25 2001 1 25 2004 1 25 2006 1 25 2007 1 25 2010 1 25 2012 1 25 2013 1 25 2015 1 25 2016 1 25 2017 1 25 2021 1 25 2024 1 25 2026 1 25 2027 1 25 2030 1 25 2032 1 25 2033 1 25 2035 1 25 2036 1 25 2037 1 25 2040 1 25 2042 1 25 2043 1 25 2045 1 25 2046 1 25 2047 1 25 2049 1 25 2050 1 25 2051 1 25 2052 1 25 2057 1 25 2061 1 25 2064 1 25 2066 1 25 2067 1 25 2071 1 25 2074 1 25 2076 1 25 2077 1 25 2080 1 25 2082 1 25 2083 1 25 2085 1 25 2086 1 25 2087 1 25 2091 1 25 2094 1 25 2096 1 25 2097 1 25 2100 1 25 2102 1 25 2103 1 25 2105 1 25 2106 1 25 2107 1 25 2110 1 25 2112 1 25 2113 1 25 2115 1 25 2116 1 25 2117 1 25 2119 1 25 2120 1 25 2121 1 25 2122 1 25 2126 1 25 2129 1 25 2131 1 25 2132 1 25 2135 1 25 2137 1 25 2138 1 25 2140 1 25 2141 1 25 2142 1 25 2145 1 25 2147 1 25 2148 1 25 2150 1 25 2151 1 25 2152 1 25 2154 1 25 2155 1 25 2156 1 25 2157 1 25 2160 1 25 2162 1 25 2163 1 25 2165 1 25 2166 1 25 2167 1 25 2169 1 25 2170 1 25 2171 1 25 2172 1 25 2174 1 25 2175 1 25 2176 1 25 2177 1 25 2178 1 25 2184 1 25 2189 1 25 2193 1 25 2196 1 25 2198 1 25 2199 1 25 2204 1 25 2208 1 25 2211 1 25 2213 1 25 2214 1 25 2218 1 25 2221 1 25 2223 1 25 2224 1 25 2227 1 25 2229 1 25 2230 1 25 2232 1 25 2233 1 25 2234 1 25 2239 1 25 2243 1 25 2246 1 25 2248 1 25 2249 1 25 2253 1 25 2256 1 25 2258 1 25 2259 1 25 2262 1 25 2264 1 25 2265 1 25 2267 1 25 2268 1 25 2269 1 25 2273 1 25 2276 1 25 2278 1 25 2279 1 25 2282 1 25 2284 1 25 2285 1 25 2287 1 25 2288 1 25 2289 1 25 2292 1 25 2294 1 25 2295 1 25 2297 1 25 2298 1 25 2299 1 25 2301 1 25 2302 1 25 2303 1 25 2304 1 25 2309 1 25 2313 1 25 2316 1 25 2318 1 25 2319 1 25 2323 1 25 2326 1 25 2328 1 25 2329 1 25 2332 1 25 2334 1 25 2335 1 25 2337 1 25 2338 1 25 2339 1 25 2343 1 25 2346 1 25 2348 1 25 2349 1 25 2352 1 25 2354 1 25 2355 1 25 2357 1 25 2358 1 25 2359 1 25 2362 1 25 2364 1 25 2365 1 25 2367 1 25 2368 1 25 2369 1 25 2371 1 25 2372 1 25 2373 1 25 2374 1 25 2378 1 25 2381 1 25 2383 1 25 2384 1 25 2387 1 25 2389 1 25 2390 1 25 2392 1 25 2393 1 25 2394 1 25 2397 1 25 2399 1 25 2400 1 25 2402 1 25 2403 1 25 2404 1 25 2406 1 25 2407 1 25 2408 1 25 2409 1 25 2412 1 25 2414 1 25 2415 1 25 2417 1 25 2418 1 25 2419 1 25 2421 1 25 2422 1 25 2423 1 25 2424 1 25 2426 1 25 2427 1 25 2428 1 25 2429 1 25 2430 1 25 2435 1 25 2439 1 25 2442 1 25 2444 1 25 2445 1 25 2449 1 25 2452 1 25 2454 1 25 2455 1 25 2458 1 25 2460 1 25 2461 1 25 2463 1 25 2464 1 25 2465 1 25 2469 1 25 2472 1 25 2474 1 25 2475 1 25 2478 1 25 2480 1 25 2481 1 25 2483 1 25 2484 1 25 2485 1 25 2488 1 25 2490 1 25 2491 1 25 2493 1 25 2494 1 25 2495 1 25 2497 1 25 2498 1 25 2499 1 25 2500 1 25 2504 1 25 2507 1 25 2509 1 25 2510 1 25 2513 1 25 2515 1 25 2516 1 25 2518 1 25 2519 1 25 2520 1 25 2523 1 25 2525 1 25 2526 1 25 2528 1 25 2529 1 25 2530 1 25 2532 1 25 2533 1 25 2534 1 25 2535 1 25 2538 1 25 2540 1 25 2541 1 25 2543 1 25 2544 1 25 2545 1 25 2547 1 25 2548 1 25 2549 1 25 2550 1 25 2552 1 25 2553 1 25 2554 1 25 2555 1 25 2556 1 25 2560 1 25 2563 1 25 2565 1 25 2566 1 25 2569 1 25 2571 1 25 2572 1 25 2574 1 25 2575 1 25 2576 1 25 2579 1 25 2581 1 25 2582 1 25 2584 1 25 2585 1 25 2586 1 25 2588 1 25 2589 1 25 2590 1 25 2591 1 25 2594 1 25 2596 1 25 2597 1 25 2599 1 25 2600 1 25 2601 1 25 2603 1 25 2604 1 25 2605 1 25 2606 1 25 2608 1 25 2609 1 25 2610 1 25 2611 1 25 2612 1 25 2615 1 25 2617 1 25 2618 1 25 2620 1 25 2621 1 25 2622 1 25 2624 1 25 2625 1 25 2626 1 25 2627 1 25 2629 1 25 2630 1 25 2631 1 25 2632 1 25 2633 1 25 2635 1 25 2636 1 25 2637 1 25 2638 1 25 2639 1 25 2640 1 26 1 1 26 2 1 26 3 1 26 4 1 26 5 1 26 6 1 26 7 1 26 8 1 26 9 1 26 10 1 26 11 1 26 12 1 26 13 1 26 14 1 26 15 1 26 16 1 26 17 1 26 18 1 26 19 1 26 20 1 26 21 1 26 22 1 26 23 1 26 24 1 26 25 1 26 26 1 26 27 1 26 28 1 26 29 1 26 30 1 26 31 1 26 32 1 26 33 1 26 34 1 26 35 1 26 36 1 26 37 1 26 38 1 26 39 1 26 40 1 26 41 1 26 42 1 26 43 1 26 44 1 26 45 1 26 46 1 26 47 1 26 48 1 26 49 1 26 50 1 26 51 1 26 52 1 26 53 1 26 54 1 26 55 1 26 56 1 26 57 1 26 58 1 26 59 1 26 60 1 26 61 1 26 62 1 26 63 1 26 64 1 26 65 1 26 66 1 26 67 1 26 68 1 26 69 1 26 70 1 26 71 1 26 72 1 26 73 1 26 74 1 26 75 1 26 76 1 26 77 1 26 78 1 26 79 1 26 80 1 26 81 1 26 82 1 26 83 1 26 84 1 26 85 1 26 86 1 26 87 1 26 88 1 26 89 1 26 90 1 26 91 1 26 92 1 26 93 1 26 94 1 26 95 1 26 96 1 26 97 1 26 98 1 26 99 1 26 100 1 26 101 1 26 102 1 26 103 1 26 104 1 26 105 1 26 106 1 26 107 1 26 108 1 26 109 1 26 110 1 26 111 1 26 112 1 26 113 1 26 114 1 26 115 1 26 116 1 26 117 1 26 118 1 26 119 1 26 120 1 26 793 1 26 794 1 26 795 1 26 796 1 26 797 1 26 798 1 26 799 1 26 800 1 26 801 1 26 802 1 26 803 1 26 804 1 26 805 1 26 806 1 26 807 1 26 808 1 26 809 1 26 810 1 26 811 1 26 812 1 26 813 1 26 814 1 26 815 1 26 816 1 26 817 1 26 818 1 26 819 1 26 820 1 26 821 1 26 822 1 26 823 1 26 824 1 26 825 1 26 826 1 26 827 1 26 828 1 26 829 1 26 830 1 26 831 1 26 832 1 26 833 1 26 834 1 26 835 1 26 836 1 26 837 1 26 838 1 26 839 1 26 840 1 26 841 1 26 842 1 26 843 1 26 844 1 26 845 1 26 846 1 26 847 1 26 848 1 26 849 1 26 850 1 26 851 1 26 852 1 26 853 1 26 854 1 26 855 1 26 856 1 26 857 1 26 858 1 26 859 1 26 860 1 26 861 1 26 862 1 26 863 1 26 864 1 26 865 1 26 866 1 26 867 1 26 868 1 26 869 1 26 870 1 26 871 1 26 872 1 26 873 1 26 874 1 26 875 1 26 876 1 26 877 1 26 878 1 26 879 1 26 880 1 26 881 1 26 882 1 26 883 1 26 884 1 26 885 1 26 886 1 26 887 1 26 888 1 26 889 1 26 890 1 26 891 1 26 892 1 26 893 1 26 894 1 26 895 1 26 896 1 26 897 1 26 898 1 26 899 1 26 900 1 26 901 1 26 902 1 26 903 1 26 904 1 26 905 1 26 906 1 26 907 1 26 908 1 26 909 1 26 910 1 26 911 1 26 912 1 26 913 1 26 914 1 26 915 1 26 916 1 26 917 1 26 918 1 26 919 1 26 920 1 26 921 1 26 922 1 26 923 1 26 924 1 26 925 1 26 926 1 26 927 1 26 928 1 26 929 1 26 930 1 26 931 1 26 932 1 26 933 1 26 934 1 26 935 1 26 936 1 26 937 1 26 938 1 26 939 1 26 940 1 26 941 1 26 942 1 26 943 1 26 944 1 26 945 1 26 946 1 26 947 1 26 948 1 26 949 1 26 950 1 26 951 1 26 952 1 26 953 1 26 954 1 26 955 1 26 956 1 26 957 1 26 958 1 26 959 1 26 960 1 26 961 1 26 962 1 26 963 1 26 964 1 26 965 1 26 966 1 26 967 1 26 968 1 26 969 1 26 970 1 26 971 1 26 972 1 26 973 1 26 974 1 26 975 1 26 976 1 26 977 1 26 978 1 26 979 1 26 980 1 26 981 1 26 982 1 26 983 1 26 984 1 26 985 1 26 986 1 26 987 1 26 988 1 26 989 1 26 990 1 26 991 1 26 992 1 26 993 1 26 994 1 26 995 1 26 996 1 26 997 1 26 998 1 26 999 1 26 1000 1 26 1001 1 26 1002 1 26 1717 1 26 1718 1 26 1719 1 26 1720 1 26 1721 1 26 1722 1 26 1723 1 26 1724 1 26 1725 1 26 1726 1 26 1727 1 26 1728 1 26 1729 1 26 1730 1 26 1731 1 26 1732 1 26 1733 1 26 1734 1 26 1735 1 26 1736 1 26 1737 1 26 1738 1 26 1739 1 26 1740 1 26 1741 1 26 1742 1 26 1743 1 26 1744 1 26 1745 1 26 1746 1 26 1747 1 26 1748 1 26 1749 1 26 1750 1 26 1751 1 26 1752 1 26 1753 1 26 1754 1 26 1755 1 26 1756 1 26 1757 1 26 1758 1 26 1759 1 26 1760 1 26 1761 1 26 1762 1 26 1763 1 26 1764 1 26 1765 1 26 1766 1 26 1767 1 26 1768 1 26 1769 1 26 1770 1 26 1771 1 26 1772 1 26 1773 1 26 1774 1 26 1775 1 26 1776 1 26 1777 1 26 1778 1 26 1779 1 26 1780 1 26 1781 1 26 1782 1 26 1783 1 26 1784 1 26 1785 1 26 1786 1 26 1787 1 26 1788 1 26 1789 1 26 1790 1 26 1791 1 26 1792 1 26 1793 1 26 1794 1 26 1795 1 26 1796 1 26 1797 1 26 1798 1 26 1799 1 26 1800 1 26 1801 1 26 1802 1 26 1803 1 26 1804 1 26 1805 1 26 1806 1 26 1807 1 26 1808 1 26 1809 1 26 1810 1 26 1811 1 26 1812 1 26 1813 1 26 1814 1 26 1815 1 26 1816 1 26 1817 1 26 1818 1 26 1819 1 26 1820 1 26 1821 1 26 1822 1 26 1823 1 26 1824 1 26 1825 1 26 1826 1 26 1827 1 26 1828 1 26 1829 1 26 1830 1 26 1831 1 26 1832 1 26 1833 1 26 1834 1 26 1835 1 26 1836 1 26 1837 1 26 1838 1 26 1839 1 26 1840 1 26 1841 1 26 1842 1 26 1843 1 26 1844 1 26 1845 1 26 1846 1 26 1847 1 26 1848 1 26 1849 1 26 1850 1 26 1851 1 26 1852 1 26 1853 1 26 1854 1 26 1855 1 26 1856 1 26 1857 1 26 1858 1 26 1859 1 26 1860 1 26 1861 1 26 1862 1 26 1863 1 26 1864 1 26 1865 1 26 1866 1 26 1867 1 26 1868 1 26 1869 1 26 1870 1 26 1871 1 26 1872 1 26 1873 1 26 1874 1 26 1875 1 26 1876 1 26 1877 1 26 1878 1 26 1879 1 26 1880 1 26 1881 1 26 1882 1 26 1883 1 26 1884 1 26 1885 1 26 1886 1 26 1887 1 26 1888 1 26 1889 1 26 1890 1 26 1891 1 26 1892 1 26 1893 1 26 1894 1 26 1895 1 26 1896 1 26 1897 1 26 1898 1 26 1899 1 26 1900 1 26 1901 1 26 1902 1 26 1903 1 26 1904 1 26 1905 1 26 1906 1 26 1907 1 26 1908 1 26 1909 1 26 1910 1 26 1911 1 26 1912 1 26 1913 1 26 1914 1 26 1915 1 26 1916 1 26 1917 1 26 1918 1 26 1919 1 26 1920 1 26 1921 1 26 1922 1 26 1923 1 26 1924 1 26 1925 1 26 1926 1 26 2641 1 26 2642 1 26 2643 1 26 2644 1 26 2645 1 26 2646 1 26 2647 1 26 2648 1 26 2649 1 26 2650 1 26 2651 1 26 2652 1 26 2653 1 26 2654 1 26 2655 1 26 2656 1 26 2657 1 26 2658 1 26 2659 1 26 2660 1 26 2661 1 26 2662 1 26 2663 1 26 2664 1 26 2665 1 26 2666 1 26 2667 1 26 2668 1 26 2669 1 26 2670 1 26 2671 1 26 2672 1 26 2673 1 26 2674 1 26 2675 1 26 2676 1 26 2677 1 26 2678 1 26 2679 1 26 2680 1 26 2681 1 26 2682 1 26 2683 1 26 2684 1 26 2685 1 26 2686 1 26 2687 1 26 2688 1 26 2689 1 26 2690 1 26 2691 1 26 2692 1 26 2693 1 26 2694 1 26 2695 1 26 2696 1 26 2697 1 26 2698 1 26 2699 1 26 2700 1 26 2701 1 26 2702 1 26 2703 1 26 2704 1 26 2705 1 26 2706 1 26 2707 1 26 2708 1 26 2709 1 26 2710 1 26 2711 1 26 2712 1 26 2713 1 26 2714 1 26 2715 1 26 2716 1 26 2717 1 26 2718 1 26 2719 1 26 2720 1 26 2721 1 26 2722 1 26 2723 1 26 2724 1 26 2725 1 26 2726 1 26 2727 1 26 2728 1 26 2729 1 26 2730 1 26 2731 1 26 2732 1 26 2733 1 26 2734 1 26 2735 1 26 2736 1 26 2737 1 26 2738 1 26 2739 1 26 2740 1 26 2741 1 26 2742 1 26 2743 1 26 2744 1 26 2745 1 26 2746 1 26 2747 1 26 2748 1 26 2749 1 26 2750 1 26 2751 1 26 2752 1 26 2753 1 26 2754 1 26 2755 1 26 2756 1 26 2757 1 26 2758 1 26 2759 1 26 2760 1 26 2761 1 26 2762 1 26 2763 1 26 2764 1 26 2765 1 26 2766 1 26 2767 1 26 2768 1 26 2769 1 26 2770 1 26 2771 1 26 2772 1 26 2773 1 26 2774 1 26 2775 1 26 2776 1 26 2777 1 26 2778 1 26 2779 1 26 2780 1 26 2781 1 26 2782 1 26 2783 1 26 2784 1 26 2785 1 26 2786 1 26 2787 1 26 2788 1 26 2789 1 26 2790 1 26 2791 1 26 2792 1 26 2793 1 26 2794 1 26 2795 1 26 2796 1 26 2797 1 26 2798 1 26 2799 1 26 2800 1 26 2801 1 26 2802 1 26 2803 1 26 2804 1 26 2805 1 26 2806 1 26 2807 1 26 2808 1 26 2809 1 26 2810 1 26 2811 1 26 2812 1 26 2813 1 26 2814 1 26 2815 1 26 2816 1 26 2817 1 26 2818 1 26 2819 1 26 2820 1 26 2821 1 26 2822 1 26 2823 1 26 2824 1 26 2825 1 26 2826 1 26 2827 1 26 2828 1 26 2829 1 26 2830 1 26 2831 1 26 2832 1 26 2833 1 26 2834 1 26 2835 1 26 2836 1 26 2837 1 26 2838 1 26 2839 1 26 2840 1 26 2841 1 26 2842 1 26 2843 1 26 2844 1 26 2845 1 26 2846 1 26 2847 1 26 2848 1 26 2849 1 26 2850 1 26 2851 1 26 2852 1 26 2853 1 26 2854 1 26 2855 1 26 2856 1 26 2857 1 26 2858 1 26 2859 1 26 2860 1 26 2861 1 26 2862 1 26 2863 1 26 2864 1 26 2865 1 26 2866 1 26 2867 1 26 2868 1 26 2869 1 26 2870 1 26 2871 1 26 2872 1 26 2873 1 26 2874 1 26 2875 1 26 2876 1 26 2877 1 26 2878 1 26 2879 1 26 2880 1 26 2881 1 26 2882 1 26 2883 1 26 2884 1 26 2885 1 26 2886 1 26 2887 1 26 2888 1 26 2889 1 26 2890 1 26 2891 1 26 2892 1 27 1 1 27 2 1 27 3 1 27 4 1 27 5 1 27 6 1 27 7 1 27 8 1 27 9 1 27 10 1 27 11 1 27 12 1 27 13 1 27 14 1 27 15 1 27 16 1 27 17 1 27 18 1 27 19 1 27 20 1 27 21 1 27 22 1 27 23 1 27 24 1 27 25 1 27 26 1 27 27 1 27 28 1 27 29 1 27 30 1 27 31 1 27 32 1 27 33 1 27 34 1 27 35 1 27 36 1 27 121 1 27 122 1 27 123 1 27 124 1 27 125 1 27 126 1 27 127 1 27 128 1 27 129 1 27 130 1 27 131 1 27 132 1 27 133 1 27 134 1 27 135 1 27 136 1 27 137 1 27 138 1 27 139 1 27 140 1 27 141 1 27 142 1 27 143 1 27 144 1 27 145 1 27 146 1 27 147 1 27 148 1 27 149 1 27 150 1 27 151 1 27 152 1 27 153 1 27 154 1 27 155 1 27 156 1 27 157 1 27 158 1 27 159 1 27 160 1 27 161 1 27 162 1 27 163 1 27 164 1 27 165 1 27 166 1 27 167 1 27 168 1 27 169 1 27 170 1 27 171 1 27 172 1 27 173 1 27 174 1 27 175 1 27 176 1 27 177 1 27 178 1 27 179 1 27 180 1 27 181 1 27 182 1 27 183 1 27 184 1 27 185 1 27 186 1 27 187 1 27 188 1 27 189 1 27 190 1 27 191 1 27 192 1 27 193 1 27 194 1 27 195 1 27 196 1 27 197 1 27 198 1 27 199 1 27 200 1 27 201 1 27 202 1 27 203 1 27 204 1 27 793 1 27 794 1 27 795 1 27 796 1 27 797 1 27 798 1 27 799 1 27 800 1 27 801 1 27 802 1 27 803 1 27 804 1 27 805 1 27 806 1 27 807 1 27 808 1 27 809 1 27 810 1 27 811 1 27 812 1 27 813 1 27 814 1 27 815 1 27 816 1 27 817 1 27 818 1 27 819 1 27 820 1 27 821 1 27 822 1 27 823 1 27 824 1 27 825 1 27 826 1 27 827 1 27 828 1 27 829 1 27 830 1 27 831 1 27 832 1 27 833 1 27 834 1 27 835 1 27 836 1 27 837 1 27 838 1 27 839 1 27 840 1 27 841 1 27 842 1 27 843 1 27 844 1 27 845 1 27 846 1 27 847 1 27 848 1 27 849 1 27 850 1 27 851 1 27 852 1 27 853 1 27 854 1 27 855 1 27 856 1 27 857 1 27 858 1 27 859 1 27 860 1 27 861 1 27 862 1 27 863 1 27 864 1 27 865 1 27 866 1 27 867 1 27 868 1 27 869 1 27 870 1 27 871 1 27 872 1 27 873 1 27 874 1 27 875 1 27 876 1 27 1003 1 27 1004 1 27 1005 1 27 1006 1 27 1007 1 27 1008 1 27 1009 1 27 1010 1 27 1011 1 27 1012 1 27 1013 1 27 1014 1 27 1015 1 27 1016 1 27 1017 1 27 1018 1 27 1019 1 27 1020 1 27 1021 1 27 1022 1 27 1023 1 27 1024 1 27 1025 1 27 1026 1 27 1027 1 27 1028 1 27 1029 1 27 1030 1 27 1031 1 27 1032 1 27 1033 1 27 1034 1 27 1035 1 27 1036 1 27 1037 1 27 1038 1 27 1039 1 27 1040 1 27 1041 1 27 1042 1 27 1043 1 27 1044 1 27 1045 1 27 1046 1 27 1047 1 27 1048 1 27 1049 1 27 1050 1 27 1051 1 27 1052 1 27 1053 1 27 1054 1 27 1055 1 27 1056 1 27 1057 1 27 1058 1 27 1059 1 27 1060 1 27 1061 1 27 1062 1 27 1063 1 27 1064 1 27 1065 1 27 1066 1 27 1067 1 27 1068 1 27 1069 1 27 1070 1 27 1071 1 27 1072 1 27 1073 1 27 1074 1 27 1075 1 27 1076 1 27 1077 1 27 1078 1 27 1079 1 27 1080 1 27 1081 1 27 1082 1 27 1083 1 27 1084 1 27 1085 1 27 1086 1 27 1087 1 27 1088 1 27 1089 1 27 1090 1 27 1091 1 27 1092 1 27 1093 1 27 1094 1 27 1095 1 27 1096 1 27 1097 1 27 1098 1 27 1099 1 27 1100 1 27 1101 1 27 1102 1 27 1103 1 27 1104 1 27 1105 1 27 1106 1 27 1107 1 27 1108 1 27 1109 1 27 1110 1 27 1111 1 27 1112 1 27 1113 1 27 1114 1 27 1115 1 27 1116 1 27 1117 1 27 1118 1 27 1119 1 27 1120 1 27 1121 1 27 1122 1 27 1123 1 27 1124 1 27 1125 1 27 1126 1 27 1127 1 27 1128 1 27 1717 1 27 1718 1 27 1719 1 27 1720 1 27 1721 1 27 1722 1 27 1723 1 27 1724 1 27 1725 1 27 1726 1 27 1727 1 27 1728 1 27 1729 1 27 1730 1 27 1731 1 27 1732 1 27 1733 1 27 1734 1 27 1735 1 27 1736 1 27 1737 1 27 1738 1 27 1739 1 27 1740 1 27 1741 1 27 1742 1 27 1743 1 27 1744 1 27 1745 1 27 1746 1 27 1747 1 27 1748 1 27 1749 1 27 1750 1 27 1751 1 27 1752 1 27 1753 1 27 1754 1 27 1755 1 27 1756 1 27 1757 1 27 1758 1 27 1759 1 27 1760 1 27 1761 1 27 1762 1 27 1763 1 27 1764 1 27 1765 1 27 1766 1 27 1767 1 27 1768 1 27 1769 1 27 1770 1 27 1771 1 27 1772 1 27 1773 1 27 1774 1 27 1775 1 27 1776 1 27 1777 1 27 1778 1 27 1779 1 27 1780 1 27 1781 1 27 1782 1 27 1783 1 27 1784 1 27 1785 1 27 1786 1 27 1787 1 27 1788 1 27 1789 1 27 1790 1 27 1791 1 27 1792 1 27 1793 1 27 1794 1 27 1795 1 27 1796 1 27 1797 1 27 1798 1 27 1799 1 27 1800 1 27 1927 1 27 1928 1 27 1929 1 27 1930 1 27 1931 1 27 1932 1 27 1933 1 27 1934 1 27 1935 1 27 1936 1 27 1937 1 27 1938 1 27 1939 1 27 1940 1 27 1941 1 27 1942 1 27 1943 1 27 1944 1 27 1945 1 27 1946 1 27 1947 1 27 1948 1 27 1949 1 27 1950 1 27 1951 1 27 1952 1 27 1953 1 27 1954 1 27 1955 1 27 1956 1 27 1957 1 27 1958 1 27 1959 1 27 1960 1 27 1961 1 27 1962 1 27 1963 1 27 1964 1 27 1965 1 27 1966 1 27 1967 1 27 1968 1 27 1969 1 27 1970 1 27 1971 1 27 1972 1 27 1973 1 27 1974 1 27 1975 1 27 1976 1 27 1977 1 27 1978 1 27 1979 1 27 1980 1 27 1981 1 27 1982 1 27 1983 1 27 1984 1 27 1985 1 27 1986 1 27 1987 1 27 1988 1 27 1989 1 27 1990 1 27 1991 1 27 1992 1 27 1993 1 27 1994 1 27 1995 1 27 1996 1 27 1997 1 27 1998 1 27 1999 1 27 2000 1 27 2001 1 27 2002 1 27 2003 1 27 2004 1 27 2005 1 27 2006 1 27 2007 1 27 2008 1 27 2009 1 27 2010 1 27 2011 1 27 2012 1 27 2013 1 27 2014 1 27 2015 1 27 2016 1 27 2017 1 27 2018 1 27 2019 1 27 2020 1 27 2021 1 27 2022 1 27 2023 1 27 2024 1 27 2025 1 27 2026 1 27 2027 1 27 2028 1 27 2029 1 27 2030 1 27 2031 1 27 2032 1 27 2033 1 27 2034 1 27 2035 1 27 2036 1 27 2037 1 27 2038 1 27 2039 1 27 2040 1 27 2041 1 27 2042 1 27 2043 1 27 2044 1 27 2045 1 27 2046 1 27 2047 1 27 2048 1 27 2049 1 27 2050 1 27 2051 1 27 2052 1 27 2641 1 27 2642 1 27 2643 1 27 2644 1 27 2645 1 27 2646 1 27 2647 1 27 2648 1 27 2649 1 27 2650 1 27 2651 1 27 2652 1 27 2653 1 27 2654 1 27 2655 1 27 2656 1 27 2657 1 27 2658 1 27 2659 1 27 2660 1 27 2661 1 27 2662 1 27 2663 1 27 2664 1 27 2665 1 27 2666 1 27 2667 1 27 2668 1 27 2669 1 27 2670 1 27 2671 1 27 2672 1 27 2673 1 27 2674 1 27 2675 1 27 2676 1 27 2677 1 27 2678 1 27 2679 1 27 2680 1 27 2681 1 27 2682 1 27 2683 1 27 2684 1 27 2685 1 27 2686 1 27 2687 1 27 2688 1 27 2689 1 27 2690 1 27 2691 1 27 2692 1 27 2693 1 27 2694 1 27 2695 1 27 2696 1 27 2697 1 27 2698 1 27 2699 1 27 2700 1 27 2701 1 27 2702 1 27 2703 1 27 2704 1 27 2705 1 27 2706 1 27 2707 1 27 2708 1 27 2709 1 27 2710 1 27 2711 1 27 2712 1 27 2713 1 27 2714 1 27 2715 1 27 2716 1 27 2717 1 27 2718 1 27 2719 1 27 2720 1 27 2721 1 27 2722 1 27 2723 1 27 2724 1 27 2725 1 27 2726 1 27 2727 1 27 2728 1 27 2729 1 27 2730 1 27 2731 1 27 2732 1 27 2733 1 27 2734 1 27 2735 1 27 2736 1 27 2737 1 27 2738 1 27 2739 1 27 2740 1 27 2741 1 27 2742 1 27 2743 1 27 2744 1 27 2745 1 27 2746 1 27 2747 1 27 2748 1 27 2749 1 27 2750 1 27 2751 1 27 2752 1 27 2753 1 27 2754 1 27 2755 1 27 2756 1 27 2757 1 27 2758 1 27 2759 1 27 2760 1 27 2761 1 27 2762 1 27 2763 1 27 2764 1 27 2765 1 27 2766 1 27 2893 1 27 2894 1 27 2895 1 27 2896 1 27 2897 1 27 2898 1 27 2899 1 27 2900 1 27 2901 1 27 2902 1 27 2903 1 27 2904 1 27 2905 1 27 2906 1 27 2907 1 27 2908 1 27 2909 1 27 2910 1 27 2911 1 27 2912 1 27 2913 1 27 2914 1 27 2915 1 27 2916 1 27 2917 1 27 2918 1 27 2919 1 27 2920 1 27 2921 1 27 2922 1 27 2923 1 27 2924 1 27 2925 1 27 2926 1 27 2927 1 27 2928 1 27 2929 1 27 2930 1 27 2931 1 27 2932 1 27 2933 1 27 2934 1 27 2935 1 27 2936 1 27 2937 1 27 2938 1 27 2939 1 27 2940 1 27 2941 1 27 2942 1 27 2943 1 27 2944 1 27 2945 1 27 2946 1 27 2947 1 27 2948 1 27 2949 1 27 2950 1 27 2951 1 27 2952 1 27 2953 1 27 2954 1 27 2955 1 27 2956 1 27 2957 1 27 2958 1 27 2959 1 27 2960 1 27 2961 1 27 2962 1 27 2963 1 27 2964 1 27 2965 1 27 2966 1 27 2967 1 27 2968 1 27 2969 1 27 2970 1 27 2971 1 27 2972 1 27 2973 1 27 2974 1 27 2975 1 27 2976 1 27 2977 1 27 2978 1 27 2979 1 27 2980 1 27 2981 1 27 2982 1 27 2983 1 27 2984 1 27 2985 1 27 2986 1 27 2987 1 27 2988 1 27 2989 1 27 2990 1 27 2991 1 27 2992 1 27 2993 1 27 2994 1 27 2995 1 27 2996 1 27 2997 1 27 2998 1 27 2999 1 27 3000 1 27 3001 1 27 3002 1 27 3003 1 27 3004 1 27 3005 1 27 3006 1 27 3007 1 27 3008 1 27 3009 1 27 3010 1 27 3011 1 27 3012 1 27 3013 1 27 3014 1 27 3015 1 27 3016 1 27 3017 1 27 3018 1 28 1 1 28 2 1 28 3 1 28 4 1 28 5 1 28 6 1 28 7 1 28 8 1 28 37 1 28 38 1 28 39 1 28 40 1 28 41 1 28 42 1 28 43 1 28 44 1 28 45 1 28 46 1 28 47 1 28 48 1 28 49 1 28 50 1 28 51 1 28 52 1 28 53 1 28 54 1 28 55 1 28 56 1 28 57 1 28 58 1 28 59 1 28 60 1 28 61 1 28 62 1 28 63 1 28 64 1 28 121 1 28 122 1 28 123 1 28 124 1 28 125 1 28 126 1 28 127 1 28 128 1 28 129 1 28 130 1 28 131 1 28 132 1 28 133 1 28 134 1 28 135 1 28 136 1 28 137 1 28 138 1 28 139 1 28 140 1 28 141 1 28 142 1 28 143 1 28 144 1 28 145 1 28 146 1 28 147 1 28 148 1 28 205 1 28 206 1 28 207 1 28 208 1 28 209 1 28 210 1 28 211 1 28 212 1 28 213 1 28 214 1 28 215 1 28 216 1 28 217 1 28 218 1 28 219 1 28 220 1 28 221 1 28 222 1 28 223 1 28 224 1 28 225 1 28 226 1 28 227 1 28 228 1 28 229 1 28 230 1 28 231 1 28 232 1 28 233 1 28 234 1 28 235 1 28 236 1 28 237 1 28 238 1 28 239 1 28 240 1 28 241 1 28 242 1 28 243 1 28 244 1 28 245 1 28 246 1 28 247 1 28 248 1 28 249 1 28 250 1 28 251 1 28 252 1 28 253 1 28 254 1 28 255 1 28 256 1 28 257 1 28 258 1 28 259 1 28 260 1 28 793 1 28 794 1 28 795 1 28 796 1 28 797 1 28 798 1 28 799 1 28 800 1 28 801 1 28 802 1 28 803 1 28 804 1 28 805 1 28 806 1 28 807 1 28 808 1 28 809 1 28 810 1 28 811 1 28 812 1 28 813 1 28 814 1 28 815 1 28 816 1 28 817 1 28 818 1 28 819 1 28 820 1 28 877 1 28 878 1 28 879 1 28 880 1 28 881 1 28 882 1 28 883 1 28 884 1 28 885 1 28 886 1 28 887 1 28 888 1 28 889 1 28 890 1 28 891 1 28 892 1 28 893 1 28 894 1 28 895 1 28 896 1 28 897 1 28 898 1 28 899 1 28 900 1 28 901 1 28 902 1 28 903 1 28 904 1 28 905 1 28 906 1 28 907 1 28 908 1 28 909 1 28 910 1 28 911 1 28 912 1 28 913 1 28 914 1 28 915 1 28 916 1 28 917 1 28 918 1 28 919 1 28 920 1 28 921 1 28 922 1 28 923 1 28 924 1 28 925 1 28 926 1 28 927 1 28 928 1 28 929 1 28 930 1 28 931 1 28 932 1 28 1003 1 28 1004 1 28 1005 1 28 1006 1 28 1007 1 28 1008 1 28 1009 1 28 1010 1 28 1011 1 28 1012 1 28 1013 1 28 1014 1 28 1015 1 28 1016 1 28 1017 1 28 1018 1 28 1019 1 28 1020 1 28 1021 1 28 1022 1 28 1023 1 28 1024 1 28 1025 1 28 1026 1 28 1027 1 28 1028 1 28 1029 1 28 1030 1 28 1031 1 28 1032 1 28 1033 1 28 1034 1 28 1035 1 28 1036 1 28 1037 1 28 1038 1 28 1039 1 28 1040 1 28 1041 1 28 1042 1 28 1043 1 28 1044 1 28 1045 1 28 1046 1 28 1047 1 28 1048 1 28 1049 1 28 1050 1 28 1051 1 28 1052 1 28 1053 1 28 1054 1 28 1055 1 28 1056 1 28 1057 1 28 1058 1 28 1129 1 28 1130 1 28 1131 1 28 1132 1 28 1133 1 28 1134 1 28 1135 1 28 1136 1 28 1137 1 28 1138 1 28 1139 1 28 1140 1 28 1141 1 28 1142 1 28 1143 1 28 1144 1 28 1145 1 28 1146 1 28 1147 1 28 1148 1 28 1149 1 28 1150 1 28 1151 1 28 1152 1 28 1153 1 28 1154 1 28 1155 1 28 1156 1 28 1157 1 28 1158 1 28 1159 1 28 1160 1 28 1161 1 28 1162 1 28 1163 1 28 1164 1 28 1165 1 28 1166 1 28 1167 1 28 1168 1 28 1169 1 28 1170 1 28 1171 1 28 1172 1 28 1173 1 28 1174 1 28 1175 1 28 1176 1 28 1177 1 28 1178 1 28 1179 1 28 1180 1 28 1181 1 28 1182 1 28 1183 1 28 1184 1 28 1185 1 28 1186 1 28 1187 1 28 1188 1 28 1189 1 28 1190 1 28 1191 1 28 1192 1 28 1193 1 28 1194 1 28 1195 1 28 1196 1 28 1197 1 28 1198 1 28 1717 1 28 1718 1 28 1719 1 28 1720 1 28 1721 1 28 1722 1 28 1723 1 28 1724 1 28 1725 1 28 1726 1 28 1727 1 28 1728 1 28 1729 1 28 1730 1 28 1731 1 28 1732 1 28 1733 1 28 1734 1 28 1735 1 28 1736 1 28 1737 1 28 1738 1 28 1739 1 28 1740 1 28 1741 1 28 1742 1 28 1743 1 28 1744 1 28 1801 1 28 1802 1 28 1803 1 28 1804 1 28 1805 1 28 1806 1 28 1807 1 28 1808 1 28 1809 1 28 1810 1 28 1811 1 28 1812 1 28 1813 1 28 1814 1 28 1815 1 28 1816 1 28 1817 1 28 1818 1 28 1819 1 28 1820 1 28 1821 1 28 1822 1 28 1823 1 28 1824 1 28 1825 1 28 1826 1 28 1827 1 28 1828 1 28 1829 1 28 1830 1 28 1831 1 28 1832 1 28 1833 1 28 1834 1 28 1835 1 28 1836 1 28 1837 1 28 1838 1 28 1839 1 28 1840 1 28 1841 1 28 1842 1 28 1843 1 28 1844 1 28 1845 1 28 1846 1 28 1847 1 28 1848 1 28 1849 1 28 1850 1 28 1851 1 28 1852 1 28 1853 1 28 1854 1 28 1855 1 28 1856 1 28 1927 1 28 1928 1 28 1929 1 28 1930 1 28 1931 1 28 1932 1 28 1933 1 28 1934 1 28 1935 1 28 1936 1 28 1937 1 28 1938 1 28 1939 1 28 1940 1 28 1941 1 28 1942 1 28 1943 1 28 1944 1 28 1945 1 28 1946 1 28 1947 1 28 1948 1 28 1949 1 28 1950 1 28 1951 1 28 1952 1 28 1953 1 28 1954 1 28 1955 1 28 1956 1 28 1957 1 28 1958 1 28 1959 1 28 1960 1 28 1961 1 28 1962 1 28 1963 1 28 1964 1 28 1965 1 28 1966 1 28 1967 1 28 1968 1 28 1969 1 28 1970 1 28 1971 1 28 1972 1 28 1973 1 28 1974 1 28 1975 1 28 1976 1 28 1977 1 28 1978 1 28 1979 1 28 1980 1 28 1981 1 28 1982 1 28 2053 1 28 2054 1 28 2055 1 28 2056 1 28 2057 1 28 2058 1 28 2059 1 28 2060 1 28 2061 1 28 2062 1 28 2063 1 28 2064 1 28 2065 1 28 2066 1 28 2067 1 28 2068 1 28 2069 1 28 2070 1 28 2071 1 28 2072 1 28 2073 1 28 2074 1 28 2075 1 28 2076 1 28 2077 1 28 2078 1 28 2079 1 28 2080 1 28 2081 1 28 2082 1 28 2083 1 28 2084 1 28 2085 1 28 2086 1 28 2087 1 28 2088 1 28 2089 1 28 2090 1 28 2091 1 28 2092 1 28 2093 1 28 2094 1 28 2095 1 28 2096 1 28 2097 1 28 2098 1 28 2099 1 28 2100 1 28 2101 1 28 2102 1 28 2103 1 28 2104 1 28 2105 1 28 2106 1 28 2107 1 28 2108 1 28 2109 1 28 2110 1 28 2111 1 28 2112 1 28 2113 1 28 2114 1 28 2115 1 28 2116 1 28 2117 1 28 2118 1 28 2119 1 28 2120 1 28 2121 1 28 2122 1 28 2641 1 28 2642 1 28 2643 1 28 2644 1 28 2645 1 28 2646 1 28 2647 1 28 2648 1 28 2649 1 28 2650 1 28 2651 1 28 2652 1 28 2653 1 28 2654 1 28 2655 1 28 2656 1 28 2657 1 28 2658 1 28 2659 1 28 2660 1 28 2661 1 28 2662 1 28 2663 1 28 2664 1 28 2665 1 28 2666 1 28 2667 1 28 2668 1 28 2669 1 28 2670 1 28 2671 1 28 2672 1 28 2673 1 28 2674 1 28 2675 1 28 2676 1 28 2677 1 28 2678 1 28 2679 1 28 2680 1 28 2681 1 28 2682 1 28 2683 1 28 2684 1 28 2685 1 28 2686 1 28 2687 1 28 2688 1 28 2689 1 28 2690 1 28 2691 1 28 2692 1 28 2693 1 28 2694 1 28 2695 1 28 2696 1 28 2767 1 28 2768 1 28 2769 1 28 2770 1 28 2771 1 28 2772 1 28 2773 1 28 2774 1 28 2775 1 28 2776 1 28 2777 1 28 2778 1 28 2779 1 28 2780 1 28 2781 1 28 2782 1 28 2783 1 28 2784 1 28 2785 1 28 2786 1 28 2787 1 28 2788 1 28 2789 1 28 2790 1 28 2791 1 28 2792 1 28 2793 1 28 2794 1 28 2795 1 28 2796 1 28 2797 1 28 2798 1 28 2799 1 28 2800 1 28 2801 1 28 2802 1 28 2803 1 28 2804 1 28 2805 1 28 2806 1 28 2807 1 28 2808 1 28 2809 1 28 2810 1 28 2811 1 28 2812 1 28 2813 1 28 2814 1 28 2815 1 28 2816 1 28 2817 1 28 2818 1 28 2819 1 28 2820 1 28 2821 1 28 2822 1 28 2823 1 28 2824 1 28 2825 1 28 2826 1 28 2827 1 28 2828 1 28 2829 1 28 2830 1 28 2831 1 28 2832 1 28 2833 1 28 2834 1 28 2835 1 28 2836 1 28 2893 1 28 2894 1 28 2895 1 28 2896 1 28 2897 1 28 2898 1 28 2899 1 28 2900 1 28 2901 1 28 2902 1 28 2903 1 28 2904 1 28 2905 1 28 2906 1 28 2907 1 28 2908 1 28 2909 1 28 2910 1 28 2911 1 28 2912 1 28 2913 1 28 2914 1 28 2915 1 28 2916 1 28 2917 1 28 2918 1 28 2919 1 28 2920 1 28 2921 1 28 2922 1 28 2923 1 28 2924 1 28 2925 1 28 2926 1 28 2927 1 28 2928 1 28 2929 1 28 2930 1 28 2931 1 28 2932 1 28 2933 1 28 2934 1 28 2935 1 28 2936 1 28 2937 1 28 2938 1 28 2939 1 28 2940 1 28 2941 1 28 2942 1 28 2943 1 28 2944 1 28 2945 1 28 2946 1 28 2947 1 28 2948 1 28 2949 1 28 2950 1 28 2951 1 28 2952 1 28 2953 1 28 2954 1 28 2955 1 28 2956 1 28 2957 1 28 2958 1 28 2959 1 28 2960 1 28 2961 1 28 2962 1 28 3019 1 28 3020 1 28 3021 1 28 3022 1 28 3023 1 28 3024 1 28 3025 1 28 3026 1 28 3027 1 28 3028 1 28 3029 1 28 3030 1 28 3031 1 28 3032 1 28 3033 1 28 3034 1 28 3035 1 28 3036 1 28 3037 1 28 3038 1 28 3039 1 28 3040 1 28 3041 1 28 3042 1 28 3043 1 28 3044 1 28 3045 1 28 3046 1 28 3047 1 28 3048 1 28 3049 1 28 3050 1 28 3051 1 28 3052 1 28 3053 1 28 3054 1 28 3055 1 28 3056 1 28 3057 1 28 3058 1 28 3059 1 28 3060 1 28 3061 1 28 3062 1 28 3063 1 28 3064 1 28 3065 1 28 3066 1 28 3067 1 28 3068 1 28 3069 1 28 3070 1 28 3071 1 28 3072 1 28 3073 1 28 3074 1 29 1 1 29 9 1 29 10 1 29 11 1 29 12 1 29 13 1 29 14 1 29 15 1 29 37 1 29 38 1 29 39 1 29 40 1 29 41 1 29 42 1 29 43 1 29 65 1 29 66 1 29 67 1 29 68 1 29 69 1 29 70 1 29 71 1 29 72 1 29 73 1 29 74 1 29 75 1 29 76 1 29 77 1 29 78 1 29 79 1 29 80 1 29 81 1 29 82 1 29 83 1 29 84 1 29 85 1 29 121 1 29 122 1 29 123 1 29 124 1 29 125 1 29 126 1 29 127 1 29 149 1 29 150 1 29 151 1 29 152 1 29 153 1 29 154 1 29 155 1 29 156 1 29 157 1 29 158 1 29 159 1 29 160 1 29 161 1 29 162 1 29 163 1 29 164 1 29 165 1 29 166 1 29 167 1 29 168 1 29 169 1 29 205 1 29 206 1 29 207 1 29 208 1 29 209 1 29 210 1 29 211 1 29 212 1 29 213 1 29 214 1 29 215 1 29 216 1 29 217 1 29 218 1 29 219 1 29 220 1 29 221 1 29 222 1 29 223 1 29 224 1 29 225 1 29 261 1 29 262 1 29 263 1 29 264 1 29 265 1 29 266 1 29 267 1 29 268 1 29 269 1 29 270 1 29 271 1 29 272 1 29 273 1 29 274 1 29 275 1 29 276 1 29 277 1 29 278 1 29 279 1 29 280 1 29 281 1 29 282 1 29 283 1 29 284 1 29 285 1 29 286 1 29 287 1 29 288 1 29 289 1 29 290 1 29 291 1 29 292 1 29 293 1 29 294 1 29 295 1 29 793 1 29 794 1 29 795 1 29 796 1 29 797 1 29 798 1 29 799 1 29 821 1 29 822 1 29 823 1 29 824 1 29 825 1 29 826 1 29 827 1 29 828 1 29 829 1 29 830 1 29 831 1 29 832 1 29 833 1 29 834 1 29 835 1 29 836 1 29 837 1 29 838 1 29 839 1 29 840 1 29 841 1 29 877 1 29 878 1 29 879 1 29 880 1 29 881 1 29 882 1 29 883 1 29 884 1 29 885 1 29 886 1 29 887 1 29 888 1 29 889 1 29 890 1 29 891 1 29 892 1 29 893 1 29 894 1 29 895 1 29 896 1 29 897 1 29 933 1 29 934 1 29 935 1 29 936 1 29 937 1 29 938 1 29 939 1 29 940 1 29 941 1 29 942 1 29 943 1 29 944 1 29 945 1 29 946 1 29 947 1 29 948 1 29 949 1 29 950 1 29 951 1 29 952 1 29 953 1 29 954 1 29 955 1 29 956 1 29 957 1 29 958 1 29 959 1 29 960 1 29 961 1 29 962 1 29 963 1 29 964 1 29 965 1 29 966 1 29 967 1 29 1003 1 29 1004 1 29 1005 1 29 1006 1 29 1007 1 29 1008 1 29 1009 1 29 1010 1 29 1011 1 29 1012 1 29 1013 1 29 1014 1 29 1015 1 29 1016 1 29 1017 1 29 1018 1 29 1019 1 29 1020 1 29 1021 1 29 1022 1 29 1023 1 29 1059 1 29 1060 1 29 1061 1 29 1062 1 29 1063 1 29 1064 1 29 1065 1 29 1066 1 29 1067 1 29 1068 1 29 1069 1 29 1070 1 29 1071 1 29 1072 1 29 1073 1 29 1074 1 29 1075 1 29 1076 1 29 1077 1 29 1078 1 29 1079 1 29 1080 1 29 1081 1 29 1082 1 29 1083 1 29 1084 1 29 1085 1 29 1086 1 29 1087 1 29 1088 1 29 1089 1 29 1090 1 29 1091 1 29 1092 1 29 1093 1 29 1129 1 29 1130 1 29 1131 1 29 1132 1 29 1133 1 29 1134 1 29 1135 1 29 1136 1 29 1137 1 29 1138 1 29 1139 1 29 1140 1 29 1141 1 29 1142 1 29 1143 1 29 1144 1 29 1145 1 29 1146 1 29 1147 1 29 1148 1 29 1149 1 29 1150 1 29 1151 1 29 1152 1 29 1153 1 29 1154 1 29 1155 1 29 1156 1 29 1157 1 29 1158 1 29 1159 1 29 1160 1 29 1161 1 29 1162 1 29 1163 1 29 1199 1 29 1200 1 29 1201 1 29 1202 1 29 1203 1 29 1204 1 29 1205 1 29 1206 1 29 1207 1 29 1208 1 29 1209 1 29 1210 1 29 1211 1 29 1212 1 29 1213 1 29 1214 1 29 1215 1 29 1216 1 29 1217 1 29 1218 1 29 1219 1 29 1220 1 29 1221 1 29 1222 1 29 1223 1 29 1224 1 29 1225 1 29 1226 1 29 1227 1 29 1228 1 29 1229 1 29 1230 1 29 1231 1 29 1232 1 29 1233 1 29 1717 1 29 1718 1 29 1719 1 29 1720 1 29 1721 1 29 1722 1 29 1723 1 29 1745 1 29 1746 1 29 1747 1 29 1748 1 29 1749 1 29 1750 1 29 1751 1 29 1752 1 29 1753 1 29 1754 1 29 1755 1 29 1756 1 29 1757 1 29 1758 1 29 1759 1 29 1760 1 29 1761 1 29 1762 1 29 1763 1 29 1764 1 29 1765 1 29 1801 1 29 1802 1 29 1803 1 29 1804 1 29 1805 1 29 1806 1 29 1807 1 29 1808 1 29 1809 1 29 1810 1 29 1811 1 29 1812 1 29 1813 1 29 1814 1 29 1815 1 29 1816 1 29 1817 1 29 1818 1 29 1819 1 29 1820 1 29 1821 1 29 1857 1 29 1858 1 29 1859 1 29 1860 1 29 1861 1 29 1862 1 29 1863 1 29 1864 1 29 1865 1 29 1866 1 29 1867 1 29 1868 1 29 1869 1 29 1870 1 29 1871 1 29 1872 1 29 1873 1 29 1874 1 29 1875 1 29 1876 1 29 1877 1 29 1878 1 29 1879 1 29 1880 1 29 1881 1 29 1882 1 29 1883 1 29 1884 1 29 1885 1 29 1886 1 29 1887 1 29 1888 1 29 1889 1 29 1890 1 29 1891 1 29 1927 1 29 1928 1 29 1929 1 29 1930 1 29 1931 1 29 1932 1 29 1933 1 29 1934 1 29 1935 1 29 1936 1 29 1937 1 29 1938 1 29 1939 1 29 1940 1 29 1941 1 29 1942 1 29 1943 1 29 1944 1 29 1945 1 29 1946 1 29 1947 1 29 1983 1 29 1984 1 29 1985 1 29 1986 1 29 1987 1 29 1988 1 29 1989 1 29 1990 1 29 1991 1 29 1992 1 29 1993 1 29 1994 1 29 1995 1 29 1996 1 29 1997 1 29 1998 1 29 1999 1 29 2000 1 29 2001 1 29 2002 1 29 2003 1 29 2004 1 29 2005 1 29 2006 1 29 2007 1 29 2008 1 29 2009 1 29 2010 1 29 2011 1 29 2012 1 29 2013 1 29 2014 1 29 2015 1 29 2016 1 29 2017 1 29 2053 1 29 2054 1 29 2055 1 29 2056 1 29 2057 1 29 2058 1 29 2059 1 29 2060 1 29 2061 1 29 2062 1 29 2063 1 29 2064 1 29 2065 1 29 2066 1 29 2067 1 29 2068 1 29 2069 1 29 2070 1 29 2071 1 29 2072 1 29 2073 1 29 2074 1 29 2075 1 29 2076 1 29 2077 1 29 2078 1 29 2079 1 29 2080 1 29 2081 1 29 2082 1 29 2083 1 29 2084 1 29 2085 1 29 2086 1 29 2087 1 29 2123 1 29 2124 1 29 2125 1 29 2126 1 29 2127 1 29 2128 1 29 2129 1 29 2130 1 29 2131 1 29 2132 1 29 2133 1 29 2134 1 29 2135 1 29 2136 1 29 2137 1 29 2138 1 29 2139 1 29 2140 1 29 2141 1 29 2142 1 29 2143 1 29 2144 1 29 2145 1 29 2146 1 29 2147 1 29 2148 1 29 2149 1 29 2150 1 29 2151 1 29 2152 1 29 2153 1 29 2154 1 29 2155 1 29 2156 1 29 2157 1 29 2641 1 29 2642 1 29 2643 1 29 2644 1 29 2645 1 29 2646 1 29 2647 1 29 2648 1 29 2649 1 29 2650 1 29 2651 1 29 2652 1 29 2653 1 29 2654 1 29 2655 1 29 2656 1 29 2657 1 29 2658 1 29 2659 1 29 2660 1 29 2661 1 29 2697 1 29 2698 1 29 2699 1 29 2700 1 29 2701 1 29 2702 1 29 2703 1 29 2704 1 29 2705 1 29 2706 1 29 2707 1 29 2708 1 29 2709 1 29 2710 1 29 2711 1 29 2712 1 29 2713 1 29 2714 1 29 2715 1 29 2716 1 29 2717 1 29 2718 1 29 2719 1 29 2720 1 29 2721 1 29 2722 1 29 2723 1 29 2724 1 29 2725 1 29 2726 1 29 2727 1 29 2728 1 29 2729 1 29 2730 1 29 2731 1 29 2767 1 29 2768 1 29 2769 1 29 2770 1 29 2771 1 29 2772 1 29 2773 1 29 2774 1 29 2775 1 29 2776 1 29 2777 1 29 2778 1 29 2779 1 29 2780 1 29 2781 1 29 2782 1 29 2783 1 29 2784 1 29 2785 1 29 2786 1 29 2787 1 29 2788 1 29 2789 1 29 2790 1 29 2791 1 29 2792 1 29 2793 1 29 2794 1 29 2795 1 29 2796 1 29 2797 1 29 2798 1 29 2799 1 29 2800 1 29 2801 1 29 2837 1 29 2838 1 29 2839 1 29 2840 1 29 2841 1 29 2842 1 29 2843 1 29 2844 1 29 2845 1 29 2846 1 29 2847 1 29 2848 1 29 2849 1 29 2850 1 29 2851 1 29 2852 1 29 2853 1 29 2854 1 29 2855 1 29 2856 1 29 2857 1 29 2858 1 29 2859 1 29 2860 1 29 2861 1 29 2862 1 29 2863 1 29 2864 1 29 2865 1 29 2866 1 29 2867 1 29 2868 1 29 2869 1 29 2870 1 29 2871 1 29 2893 1 29 2894 1 29 2895 1 29 2896 1 29 2897 1 29 2898 1 29 2899 1 29 2900 1 29 2901 1 29 2902 1 29 2903 1 29 2904 1 29 2905 1 29 2906 1 29 2907 1 29 2908 1 29 2909 1 29 2910 1 29 2911 1 29 2912 1 29 2913 1 29 2914 1 29 2915 1 29 2916 1 29 2917 1 29 2918 1 29 2919 1 29 2920 1 29 2921 1 29 2922 1 29 2923 1 29 2924 1 29 2925 1 29 2926 1 29 2927 1 29 2963 1 29 2964 1 29 2965 1 29 2966 1 29 2967 1 29 2968 1 29 2969 1 29 2970 1 29 2971 1 29 2972 1 29 2973 1 29 2974 1 29 2975 1 29 2976 1 29 2977 1 29 2978 1 29 2979 1 29 2980 1 29 2981 1 29 2982 1 29 2983 1 29 2984 1 29 2985 1 29 2986 1 29 2987 1 29 2988 1 29 2989 1 29 2990 1 29 2991 1 29 2992 1 29 2993 1 29 2994 1 29 2995 1 29 2996 1 29 2997 1 29 3019 1 29 3020 1 29 3021 1 29 3022 1 29 3023 1 29 3024 1 29 3025 1 29 3026 1 29 3027 1 29 3028 1 29 3029 1 29 3030 1 29 3031 1 29 3032 1 29 3033 1 29 3034 1 29 3035 1 29 3036 1 29 3037 1 29 3038 1 29 3039 1 29 3040 1 29 3041 1 29 3042 1 29 3043 1 29 3044 1 29 3045 1 29 3046 1 29 3047 1 29 3048 1 29 3049 1 29 3050 1 29 3051 1 29 3052 1 29 3053 1 29 3075 1 29 3076 1 29 3077 1 29 3078 1 29 3079 1 29 3080 1 29 3081 1 29 3082 1 29 3083 1 29 3084 1 29 3085 1 29 3086 1 29 3087 1 29 3088 1 29 3089 1 29 3090 1 29 3091 1 29 3092 1 29 3093 1 29 3094 1 29 3095 1 30 2 1 30 9 1 30 16 1 30 17 1 30 18 1 30 19 1 30 20 1 30 21 1 30 37 1 30 44 1 30 45 1 30 46 1 30 47 1 30 48 1 30 49 1 30 65 1 30 66 1 30 67 1 30 68 1 30 69 1 30 70 1 30 86 1 30 87 1 30 88 1 30 89 1 30 90 1 30 91 1 30 92 1 30 93 1 30 94 1 30 95 1 30 96 1 30 97 1 30 98 1 30 99 1 30 100 1 30 121 1 30 128 1 30 129 1 30 130 1 30 131 1 30 132 1 30 133 1 30 149 1 30 150 1 30 151 1 30 152 1 30 153 1 30 154 1 30 170 1 30 171 1 30 172 1 30 173 1 30 174 1 30 175 1 30 176 1 30 177 1 30 178 1 30 179 1 30 180 1 30 181 1 30 182 1 30 183 1 30 184 1 30 205 1 30 206 1 30 207 1 30 208 1 30 209 1 30 210 1 30 226 1 30 227 1 30 228 1 30 229 1 30 230 1 30 231 1 30 232 1 30 233 1 30 234 1 30 235 1 30 236 1 30 237 1 30 238 1 30 239 1 30 240 1 30 261 1 30 262 1 30 263 1 30 264 1 30 265 1 30 266 1 30 267 1 30 268 1 30 269 1 30 270 1 30 271 1 30 272 1 30 273 1 30 274 1 30 275 1 30 296 1 30 297 1 30 298 1 30 299 1 30 300 1 30 301 1 30 302 1 30 303 1 30 304 1 30 305 1 30 306 1 30 307 1 30 308 1 30 309 1 30 310 1 30 311 1 30 312 1 30 313 1 30 314 1 30 315 1 30 793 1 30 800 1 30 801 1 30 802 1 30 803 1 30 804 1 30 805 1 30 821 1 30 822 1 30 823 1 30 824 1 30 825 1 30 826 1 30 842 1 30 843 1 30 844 1 30 845 1 30 846 1 30 847 1 30 848 1 30 849 1 30 850 1 30 851 1 30 852 1 30 853 1 30 854 1 30 855 1 30 856 1 30 877 1 30 878 1 30 879 1 30 880 1 30 881 1 30 882 1 30 898 1 30 899 1 30 900 1 30 901 1 30 902 1 30 903 1 30 904 1 30 905 1 30 906 1 30 907 1 30 908 1 30 909 1 30 910 1 30 911 1 30 912 1 30 933 1 30 934 1 30 935 1 30 936 1 30 937 1 30 938 1 30 939 1 30 940 1 30 941 1 30 942 1 30 943 1 30 944 1 30 945 1 30 946 1 30 947 1 30 968 1 30 969 1 30 970 1 30 971 1 30 972 1 30 973 1 30 974 1 30 975 1 30 976 1 30 977 1 30 978 1 30 979 1 30 980 1 30 981 1 30 982 1 30 983 1 30 984 1 30 985 1 30 986 1 30 987 1 30 1003 1 30 1004 1 30 1005 1 30 1006 1 30 1007 1 30 1008 1 30 1024 1 30 1025 1 30 1026 1 30 1027 1 30 1028 1 30 1029 1 30 1030 1 30 1031 1 30 1032 1 30 1033 1 30 1034 1 30 1035 1 30 1036 1 30 1037 1 30 1038 1 30 1059 1 30 1060 1 30 1061 1 30 1062 1 30 1063 1 30 1064 1 30 1065 1 30 1066 1 30 1067 1 30 1068 1 30 1069 1 30 1070 1 30 1071 1 30 1072 1 30 1073 1 30 1094 1 30 1095 1 30 1096 1 30 1097 1 30 1098 1 30 1099 1 30 1100 1 30 1101 1 30 1102 1 30 1103 1 30 1104 1 30 1105 1 30 1106 1 30 1107 1 30 1108 1 30 1109 1 30 1110 1 30 1111 1 30 1112 1 30 1113 1 30 1129 1 30 1130 1 30 1131 1 30 1132 1 30 1133 1 30 1134 1 30 1135 1 30 1136 1 30 1137 1 30 1138 1 30 1139 1 30 1140 1 30 1141 1 30 1142 1 30 1143 1 30 1164 1 30 1165 1 30 1166 1 30 1167 1 30 1168 1 30 1169 1 30 1170 1 30 1171 1 30 1172 1 30 1173 1 30 1174 1 30 1175 1 30 1176 1 30 1177 1 30 1178 1 30 1179 1 30 1180 1 30 1181 1 30 1182 1 30 1183 1 30 1199 1 30 1200 1 30 1201 1 30 1202 1 30 1203 1 30 1204 1 30 1205 1 30 1206 1 30 1207 1 30 1208 1 30 1209 1 30 1210 1 30 1211 1 30 1212 1 30 1213 1 30 1214 1 30 1215 1 30 1216 1 30 1217 1 30 1218 1 30 1234 1 30 1235 1 30 1236 1 30 1237 1 30 1238 1 30 1239 1 30 1240 1 30 1241 1 30 1242 1 30 1243 1 30 1244 1 30 1245 1 30 1246 1 30 1247 1 30 1248 1 30 1717 1 30 1724 1 30 1725 1 30 1726 1 30 1727 1 30 1728 1 30 1729 1 30 1745 1 30 1746 1 30 1747 1 30 1748 1 30 1749 1 30 1750 1 30 1766 1 30 1767 1 30 1768 1 30 1769 1 30 1770 1 30 1771 1 30 1772 1 30 1773 1 30 1774 1 30 1775 1 30 1776 1 30 1777 1 30 1778 1 30 1779 1 30 1780 1 30 1801 1 30 1802 1 30 1803 1 30 1804 1 30 1805 1 30 1806 1 30 1822 1 30 1823 1 30 1824 1 30 1825 1 30 1826 1 30 1827 1 30 1828 1 30 1829 1 30 1830 1 30 1831 1 30 1832 1 30 1833 1 30 1834 1 30 1835 1 30 1836 1 30 1857 1 30 1858 1 30 1859 1 30 1860 1 30 1861 1 30 1862 1 30 1863 1 30 1864 1 30 1865 1 30 1866 1 30 1867 1 30 1868 1 30 1869 1 30 1870 1 30 1871 1 30 1892 1 30 1893 1 30 1894 1 30 1895 1 30 1896 1 30 1897 1 30 1898 1 30 1899 1 30 1900 1 30 1901 1 30 1902 1 30 1903 1 30 1904 1 30 1905 1 30 1906 1 30 1907 1 30 1908 1 30 1909 1 30 1910 1 30 1911 1 30 1927 1 30 1928 1 30 1929 1 30 1930 1 30 1931 1 30 1932 1 30 1948 1 30 1949 1 30 1950 1 30 1951 1 30 1952 1 30 1953 1 30 1954 1 30 1955 1 30 1956 1 30 1957 1 30 1958 1 30 1959 1 30 1960 1 30 1961 1 30 1962 1 30 1983 1 30 1984 1 30 1985 1 30 1986 1 30 1987 1 30 1988 1 30 1989 1 30 1990 1 30 1991 1 30 1992 1 30 1993 1 30 1994 1 30 1995 1 30 1996 1 30 1997 1 30 2018 1 30 2019 1 30 2020 1 30 2021 1 30 2022 1 30 2023 1 30 2024 1 30 2025 1 30 2026 1 30 2027 1 30 2028 1 30 2029 1 30 2030 1 30 2031 1 30 2032 1 30 2033 1 30 2034 1 30 2035 1 30 2036 1 30 2037 1 30 2053 1 30 2054 1 30 2055 1 30 2056 1 30 2057 1 30 2058 1 30 2059 1 30 2060 1 30 2061 1 30 2062 1 30 2063 1 30 2064 1 30 2065 1 30 2066 1 30 2067 1 30 2088 1 30 2089 1 30 2090 1 30 2091 1 30 2092 1 30 2093 1 30 2094 1 30 2095 1 30 2096 1 30 2097 1 30 2098 1 30 2099 1 30 2100 1 30 2101 1 30 2102 1 30 2103 1 30 2104 1 30 2105 1 30 2106 1 30 2107 1 30 2123 1 30 2124 1 30 2125 1 30 2126 1 30 2127 1 30 2128 1 30 2129 1 30 2130 1 30 2131 1 30 2132 1 30 2133 1 30 2134 1 30 2135 1 30 2136 1 30 2137 1 30 2138 1 30 2139 1 30 2140 1 30 2141 1 30 2142 1 30 2158 1 30 2159 1 30 2160 1 30 2161 1 30 2162 1 30 2163 1 30 2164 1 30 2165 1 30 2166 1 30 2167 1 30 2168 1 30 2169 1 30 2170 1 30 2171 1 30 2172 1 30 2641 1 30 2642 1 30 2643 1 30 2644 1 30 2645 1 30 2646 1 30 2662 1 30 2663 1 30 2664 1 30 2665 1 30 2666 1 30 2667 1 30 2668 1 30 2669 1 30 2670 1 30 2671 1 30 2672 1 30 2673 1 30 2674 1 30 2675 1 30 2676 1 30 2697 1 30 2698 1 30 2699 1 30 2700 1 30 2701 1 30 2702 1 30 2703 1 30 2704 1 30 2705 1 30 2706 1 30 2707 1 30 2708 1 30 2709 1 30 2710 1 30 2711 1 30 2732 1 30 2733 1 30 2734 1 30 2735 1 30 2736 1 30 2737 1 30 2738 1 30 2739 1 30 2740 1 30 2741 1 30 2742 1 30 2743 1 30 2744 1 30 2745 1 30 2746 1 30 2747 1 30 2748 1 30 2749 1 30 2750 1 30 2751 1 30 2767 1 30 2768 1 30 2769 1 30 2770 1 30 2771 1 30 2772 1 30 2773 1 30 2774 1 30 2775 1 30 2776 1 30 2777 1 30 2778 1 30 2779 1 30 2780 1 30 2781 1 30 2802 1 30 2803 1 30 2804 1 30 2805 1 30 2806 1 30 2807 1 30 2808 1 30 2809 1 30 2810 1 30 2811 1 30 2812 1 30 2813 1 30 2814 1 30 2815 1 30 2816 1 30 2817 1 30 2818 1 30 2819 1 30 2820 1 30 2821 1 30 2837 1 30 2838 1 30 2839 1 30 2840 1 30 2841 1 30 2842 1 30 2843 1 30 2844 1 30 2845 1 30 2846 1 30 2847 1 30 2848 1 30 2849 1 30 2850 1 30 2851 1 30 2852 1 30 2853 1 30 2854 1 30 2855 1 30 2856 1 30 2872 1 30 2873 1 30 2874 1 30 2875 1 30 2876 1 30 2877 1 30 2878 1 30 2879 1 30 2880 1 30 2881 1 30 2882 1 30 2883 1 30 2884 1 30 2885 1 30 2886 1 30 2893 1 30 2894 1 30 2895 1 30 2896 1 30 2897 1 30 2898 1 30 2899 1 30 2900 1 30 2901 1 30 2902 1 30 2903 1 30 2904 1 30 2905 1 30 2906 1 30 2907 1 30 2928 1 30 2929 1 30 2930 1 30 2931 1 30 2932 1 30 2933 1 30 2934 1 30 2935 1 30 2936 1 30 2937 1 30 2938 1 30 2939 1 30 2940 1 30 2941 1 30 2942 1 30 2943 1 30 2944 1 30 2945 1 30 2946 1 30 2947 1 30 2963 1 30 2964 1 30 2965 1 30 2966 1 30 2967 1 30 2968 1 30 2969 1 30 2970 1 30 2971 1 30 2972 1 30 2973 1 30 2974 1 30 2975 1 30 2976 1 30 2977 1 30 2978 1 30 2979 1 30 2980 1 30 2981 1 30 2982 1 30 2998 1 30 2999 1 30 3000 1 30 3001 1 30 3002 1 30 3003 1 30 3004 1 30 3005 1 30 3006 1 30 3007 1 30 3008 1 30 3009 1 30 3010 1 30 3011 1 30 3012 1 30 3019 1 30 3020 1 30 3021 1 30 3022 1 30 3023 1 30 3024 1 30 3025 1 30 3026 1 30 3027 1 30 3028 1 30 3029 1 30 3030 1 30 3031 1 30 3032 1 30 3033 1 30 3034 1 30 3035 1 30 3036 1 30 3037 1 30 3038 1 30 3054 1 30 3055 1 30 3056 1 30 3057 1 30 3058 1 30 3059 1 30 3060 1 30 3061 1 30 3062 1 30 3063 1 30 3064 1 30 3065 1 30 3066 1 30 3067 1 30 3068 1 30 3075 1 30 3076 1 30 3077 1 30 3078 1 30 3079 1 30 3080 1 30 3081 1 30 3082 1 30 3083 1 30 3084 1 30 3085 1 30 3086 1 30 3087 1 30 3088 1 30 3089 1 30 3096 1 30 3097 1 30 3098 1 30 3099 1 30 3100 1 30 3101 1 31 3 1 31 10 1 31 16 1 31 22 1 31 23 1 31 24 1 31 25 1 31 26 1 31 38 1 31 44 1 31 50 1 31 51 1 31 52 1 31 53 1 31 54 1 31 65 1 31 71 1 31 72 1 31 73 1 31 74 1 31 75 1 31 86 1 31 87 1 31 88 1 31 89 1 31 90 1 31 101 1 31 102 1 31 103 1 31 104 1 31 105 1 31 106 1 31 107 1 31 108 1 31 109 1 31 110 1 31 122 1 31 128 1 31 134 1 31 135 1 31 136 1 31 137 1 31 138 1 31 149 1 31 155 1 31 156 1 31 157 1 31 158 1 31 159 1 31 170 1 31 171 1 31 172 1 31 173 1 31 174 1 31 185 1 31 186 1 31 187 1 31 188 1 31 189 1 31 190 1 31 191 1 31 192 1 31 193 1 31 194 1 31 205 1 31 211 1 31 212 1 31 213 1 31 214 1 31 215 1 31 226 1 31 227 1 31 228 1 31 229 1 31 230 1 31 241 1 31 242 1 31 243 1 31 244 1 31 245 1 31 246 1 31 247 1 31 248 1 31 249 1 31 250 1 31 261 1 31 262 1 31 263 1 31 264 1 31 265 1 31 276 1 31 277 1 31 278 1 31 279 1 31 280 1 31 281 1 31 282 1 31 283 1 31 284 1 31 285 1 31 296 1 31 297 1 31 298 1 31 299 1 31 300 1 31 301 1 31 302 1 31 303 1 31 304 1 31 305 1 31 316 1 31 317 1 31 318 1 31 319 1 31 320 1 31 321 1 31 322 1 31 323 1 31 324 1 31 325 1 31 794 1 31 800 1 31 806 1 31 807 1 31 808 1 31 809 1 31 810 1 31 821 1 31 827 1 31 828 1 31 829 1 31 830 1 31 831 1 31 842 1 31 843 1 31 844 1 31 845 1 31 846 1 31 857 1 31 858 1 31 859 1 31 860 1 31 861 1 31 862 1 31 863 1 31 864 1 31 865 1 31 866 1 31 877 1 31 883 1 31 884 1 31 885 1 31 886 1 31 887 1 31 898 1 31 899 1 31 900 1 31 901 1 31 902 1 31 913 1 31 914 1 31 915 1 31 916 1 31 917 1 31 918 1 31 919 1 31 920 1 31 921 1 31 922 1 31 933 1 31 934 1 31 935 1 31 936 1 31 937 1 31 948 1 31 949 1 31 950 1 31 951 1 31 952 1 31 953 1 31 954 1 31 955 1 31 956 1 31 957 1 31 968 1 31 969 1 31 970 1 31 971 1 31 972 1 31 973 1 31 974 1 31 975 1 31 976 1 31 977 1 31 988 1 31 989 1 31 990 1 31 991 1 31 992 1 31 993 1 31 994 1 31 995 1 31 996 1 31 997 1 31 1003 1 31 1009 1 31 1010 1 31 1011 1 31 1012 1 31 1013 1 31 1024 1 31 1025 1 31 1026 1 31 1027 1 31 1028 1 31 1039 1 31 1040 1 31 1041 1 31 1042 1 31 1043 1 31 1044 1 31 1045 1 31 1046 1 31 1047 1 31 1048 1 31 1059 1 31 1060 1 31 1061 1 31 1062 1 31 1063 1 31 1074 1 31 1075 1 31 1076 1 31 1077 1 31 1078 1 31 1079 1 31 1080 1 31 1081 1 31 1082 1 31 1083 1 31 1094 1 31 1095 1 31 1096 1 31 1097 1 31 1098 1 31 1099 1 31 1100 1 31 1101 1 31 1102 1 31 1103 1 31 1114 1 31 1115 1 31 1116 1 31 1117 1 31 1118 1 31 1119 1 31 1120 1 31 1121 1 31 1122 1 31 1123 1 31 1129 1 31 1130 1 31 1131 1 31 1132 1 31 1133 1 31 1144 1 31 1145 1 31 1146 1 31 1147 1 31 1148 1 31 1149 1 31 1150 1 31 1151 1 31 1152 1 31 1153 1 31 1164 1 31 1165 1 31 1166 1 31 1167 1 31 1168 1 31 1169 1 31 1170 1 31 1171 1 31 1172 1 31 1173 1 31 1184 1 31 1185 1 31 1186 1 31 1187 1 31 1188 1 31 1189 1 31 1190 1 31 1191 1 31 1192 1 31 1193 1 31 1199 1 31 1200 1 31 1201 1 31 1202 1 31 1203 1 31 1204 1 31 1205 1 31 1206 1 31 1207 1 31 1208 1 31 1219 1 31 1220 1 31 1221 1 31 1222 1 31 1223 1 31 1224 1 31 1225 1 31 1226 1 31 1227 1 31 1228 1 31 1234 1 31 1235 1 31 1236 1 31 1237 1 31 1238 1 31 1239 1 31 1240 1 31 1241 1 31 1242 1 31 1243 1 31 1249 1 31 1250 1 31 1251 1 31 1252 1 31 1253 1 31 1718 1 31 1724 1 31 1730 1 31 1731 1 31 1732 1 31 1733 1 31 1734 1 31 1745 1 31 1751 1 31 1752 1 31 1753 1 31 1754 1 31 1755 1 31 1766 1 31 1767 1 31 1768 1 31 1769 1 31 1770 1 31 1781 1 31 1782 1 31 1783 1 31 1784 1 31 1785 1 31 1786 1 31 1787 1 31 1788 1 31 1789 1 31 1790 1 31 1801 1 31 1807 1 31 1808 1 31 1809 1 31 1810 1 31 1811 1 31 1822 1 31 1823 1 31 1824 1 31 1825 1 31 1826 1 31 1837 1 31 1838 1 31 1839 1 31 1840 1 31 1841 1 31 1842 1 31 1843 1 31 1844 1 31 1845 1 31 1846 1 31 1857 1 31 1858 1 31 1859 1 31 1860 1 31 1861 1 31 1872 1 31 1873 1 31 1874 1 31 1875 1 31 1876 1 31 1877 1 31 1878 1 31 1879 1 31 1880 1 31 1881 1 31 1892 1 31 1893 1 31 1894 1 31 1895 1 31 1896 1 31 1897 1 31 1898 1 31 1899 1 31 1900 1 31 1901 1 31 1912 1 31 1913 1 31 1914 1 31 1915 1 31 1916 1 31 1917 1 31 1918 1 31 1919 1 31 1920 1 31 1921 1 31 1927 1 31 1933 1 31 1934 1 31 1935 1 31 1936 1 31 1937 1 31 1948 1 31 1949 1 31 1950 1 31 1951 1 31 1952 1 31 1963 1 31 1964 1 31 1965 1 31 1966 1 31 1967 1 31 1968 1 31 1969 1 31 1970 1 31 1971 1 31 1972 1 31 1983 1 31 1984 1 31 1985 1 31 1986 1 31 1987 1 31 1998 1 31 1999 1 31 2000 1 31 2001 1 31 2002 1 31 2003 1 31 2004 1 31 2005 1 31 2006 1 31 2007 1 31 2018 1 31 2019 1 31 2020 1 31 2021 1 31 2022 1 31 2023 1 31 2024 1 31 2025 1 31 2026 1 31 2027 1 31 2038 1 31 2039 1 31 2040 1 31 2041 1 31 2042 1 31 2043 1 31 2044 1 31 2045 1 31 2046 1 31 2047 1 31 2053 1 31 2054 1 31 2055 1 31 2056 1 31 2057 1 31 2068 1 31 2069 1 31 2070 1 31 2071 1 31 2072 1 31 2073 1 31 2074 1 31 2075 1 31 2076 1 31 2077 1 31 2088 1 31 2089 1 31 2090 1 31 2091 1 31 2092 1 31 2093 1 31 2094 1 31 2095 1 31 2096 1 31 2097 1 31 2108 1 31 2109 1 31 2110 1 31 2111 1 31 2112 1 31 2113 1 31 2114 1 31 2115 1 31 2116 1 31 2117 1 31 2123 1 31 2124 1 31 2125 1 31 2126 1 31 2127 1 31 2128 1 31 2129 1 31 2130 1 31 2131 1 31 2132 1 31 2143 1 31 2144 1 31 2145 1 31 2146 1 31 2147 1 31 2148 1 31 2149 1 31 2150 1 31 2151 1 31 2152 1 31 2158 1 31 2159 1 31 2160 1 31 2161 1 31 2162 1 31 2163 1 31 2164 1 31 2165 1 31 2166 1 31 2167 1 31 2173 1 31 2174 1 31 2175 1 31 2176 1 31 2177 1 31 2641 1 31 2647 1 31 2648 1 31 2649 1 31 2650 1 31 2651 1 31 2662 1 31 2663 1 31 2664 1 31 2665 1 31 2666 1 31 2677 1 31 2678 1 31 2679 1 31 2680 1 31 2681 1 31 2682 1 31 2683 1 31 2684 1 31 2685 1 31 2686 1 31 2697 1 31 2698 1 31 2699 1 31 2700 1 31 2701 1 31 2712 1 31 2713 1 31 2714 1 31 2715 1 31 2716 1 31 2717 1 31 2718 1 31 2719 1 31 2720 1 31 2721 1 31 2732 1 31 2733 1 31 2734 1 31 2735 1 31 2736 1 31 2737 1 31 2738 1 31 2739 1 31 2740 1 31 2741 1 31 2752 1 31 2753 1 31 2754 1 31 2755 1 31 2756 1 31 2757 1 31 2758 1 31 2759 1 31 2760 1 31 2761 1 31 2767 1 31 2768 1 31 2769 1 31 2770 1 31 2771 1 31 2782 1 31 2783 1 31 2784 1 31 2785 1 31 2786 1 31 2787 1 31 2788 1 31 2789 1 31 2790 1 31 2791 1 31 2802 1 31 2803 1 31 2804 1 31 2805 1 31 2806 1 31 2807 1 31 2808 1 31 2809 1 31 2810 1 31 2811 1 31 2822 1 31 2823 1 31 2824 1 31 2825 1 31 2826 1 31 2827 1 31 2828 1 31 2829 1 31 2830 1 31 2831 1 31 2837 1 31 2838 1 31 2839 1 31 2840 1 31 2841 1 31 2842 1 31 2843 1 31 2844 1 31 2845 1 31 2846 1 31 2857 1 31 2858 1 31 2859 1 31 2860 1 31 2861 1 31 2862 1 31 2863 1 31 2864 1 31 2865 1 31 2866 1 31 2872 1 31 2873 1 31 2874 1 31 2875 1 31 2876 1 31 2877 1 31 2878 1 31 2879 1 31 2880 1 31 2881 1 31 2887 1 31 2888 1 31 2889 1 31 2890 1 31 2891 1 31 2893 1 31 2894 1 31 2895 1 31 2896 1 31 2897 1 31 2908 1 31 2909 1 31 2910 1 31 2911 1 31 2912 1 31 2913 1 31 2914 1 31 2915 1 31 2916 1 31 2917 1 31 2928 1 31 2929 1 31 2930 1 31 2931 1 31 2932 1 31 2933 1 31 2934 1 31 2935 1 31 2936 1 31 2937 1 31 2948 1 31 2949 1 31 2950 1 31 2951 1 31 2952 1 31 2953 1 31 2954 1 31 2955 1 31 2956 1 31 2957 1 31 2963 1 31 2964 1 31 2965 1 31 2966 1 31 2967 1 31 2968 1 31 2969 1 31 2970 1 31 2971 1 31 2972 1 31 2983 1 31 2984 1 31 2985 1 31 2986 1 31 2987 1 31 2988 1 31 2989 1 31 2990 1 31 2991 1 31 2992 1 31 2998 1 31 2999 1 31 3000 1 31 3001 1 31 3002 1 31 3003 1 31 3004 1 31 3005 1 31 3006 1 31 3007 1 31 3013 1 31 3014 1 31 3015 1 31 3016 1 31 3017 1 31 3019 1 31 3020 1 31 3021 1 31 3022 1 31 3023 1 31 3024 1 31 3025 1 31 3026 1 31 3027 1 31 3028 1 31 3039 1 31 3040 1 31 3041 1 31 3042 1 31 3043 1 31 3044 1 31 3045 1 31 3046 1 31 3047 1 31 3048 1 31 3054 1 31 3055 1 31 3056 1 31 3057 1 31 3058 1 31 3059 1 31 3060 1 31 3061 1 31 3062 1 31 3063 1 31 3069 1 31 3070 1 31 3071 1 31 3072 1 31 3073 1 31 3075 1 31 3076 1 31 3077 1 31 3078 1 31 3079 1 31 3080 1 31 3081 1 31 3082 1 31 3083 1 31 3084 1 31 3090 1 31 3091 1 31 3092 1 31 3093 1 31 3094 1 31 3096 1 31 3097 1 31 3098 1 31 3099 1 31 3100 1 31 3102 1 32 4 1 32 11 1 32 17 1 32 22 1 32 27 1 32 28 1 32 29 1 32 30 1 32 39 1 32 45 1 32 50 1 32 55 1 32 56 1 32 57 1 32 58 1 32 66 1 32 71 1 32 76 1 32 77 1 32 78 1 32 79 1 32 86 1 32 91 1 32 92 1 32 93 1 32 94 1 32 101 1 32 102 1 32 103 1 32 104 1 32 111 1 32 112 1 32 113 1 32 114 1 32 115 1 32 116 1 32 123 1 32 129 1 32 134 1 32 139 1 32 140 1 32 141 1 32 142 1 32 150 1 32 155 1 32 160 1 32 161 1 32 162 1 32 163 1 32 170 1 32 175 1 32 176 1 32 177 1 32 178 1 32 185 1 32 186 1 32 187 1 32 188 1 32 195 1 32 196 1 32 197 1 32 198 1 32 199 1 32 200 1 32 206 1 32 211 1 32 216 1 32 217 1 32 218 1 32 219 1 32 226 1 32 231 1 32 232 1 32 233 1 32 234 1 32 241 1 32 242 1 32 243 1 32 244 1 32 251 1 32 252 1 32 253 1 32 254 1 32 255 1 32 256 1 32 261 1 32 266 1 32 267 1 32 268 1 32 269 1 32 276 1 32 277 1 32 278 1 32 279 1 32 286 1 32 287 1 32 288 1 32 289 1 32 290 1 32 291 1 32 296 1 32 297 1 32 298 1 32 299 1 32 306 1 32 307 1 32 308 1 32 309 1 32 310 1 32 311 1 32 316 1 32 317 1 32 318 1 32 319 1 32 320 1 32 321 1 32 326 1 32 327 1 32 328 1 32 329 1 32 795 1 32 801 1 32 806 1 32 811 1 32 812 1 32 813 1 32 814 1 32 822 1 32 827 1 32 832 1 32 833 1 32 834 1 32 835 1 32 842 1 32 847 1 32 848 1 32 849 1 32 850 1 32 857 1 32 858 1 32 859 1 32 860 1 32 867 1 32 868 1 32 869 1 32 870 1 32 871 1 32 872 1 32 878 1 32 883 1 32 888 1 32 889 1 32 890 1 32 891 1 32 898 1 32 903 1 32 904 1 32 905 1 32 906 1 32 913 1 32 914 1 32 915 1 32 916 1 32 923 1 32 924 1 32 925 1 32 926 1 32 927 1 32 928 1 32 933 1 32 938 1 32 939 1 32 940 1 32 941 1 32 948 1 32 949 1 32 950 1 32 951 1 32 958 1 32 959 1 32 960 1 32 961 1 32 962 1 32 963 1 32 968 1 32 969 1 32 970 1 32 971 1 32 978 1 32 979 1 32 980 1 32 981 1 32 982 1 32 983 1 32 988 1 32 989 1 32 990 1 32 991 1 32 992 1 32 993 1 32 998 1 32 999 1 32 1000 1 32 1001 1 32 1004 1 32 1009 1 32 1014 1 32 1015 1 32 1016 1 32 1017 1 32 1024 1 32 1029 1 32 1030 1 32 1031 1 32 1032 1 32 1039 1 32 1040 1 32 1041 1 32 1042 1 32 1049 1 32 1050 1 32 1051 1 32 1052 1 32 1053 1 32 1054 1 32 1059 1 32 1064 1 32 1065 1 32 1066 1 32 1067 1 32 1074 1 32 1075 1 32 1076 1 32 1077 1 32 1084 1 32 1085 1 32 1086 1 32 1087 1 32 1088 1 32 1089 1 32 1094 1 32 1095 1 32 1096 1 32 1097 1 32 1104 1 32 1105 1 32 1106 1 32 1107 1 32 1108 1 32 1109 1 32 1114 1 32 1115 1 32 1116 1 32 1117 1 32 1118 1 32 1119 1 32 1124 1 32 1125 1 32 1126 1 32 1127 1 32 1129 1 32 1134 1 32 1135 1 32 1136 1 32 1137 1 32 1144 1 32 1145 1 32 1146 1 32 1147 1 32 1154 1 32 1155 1 32 1156 1 32 1157 1 32 1158 1 32 1159 1 32 1164 1 32 1165 1 32 1166 1 32 1167 1 32 1174 1 32 1175 1 32 1176 1 32 1177 1 32 1178 1 32 1179 1 32 1184 1 32 1185 1 32 1186 1 32 1187 1 32 1188 1 32 1189 1 32 1194 1 32 1195 1 32 1196 1 32 1197 1 32 1199 1 32 1200 1 32 1201 1 32 1202 1 32 1209 1 32 1210 1 32 1211 1 32 1212 1 32 1213 1 32 1214 1 32 1219 1 32 1220 1 32 1221 1 32 1222 1 32 1223 1 32 1224 1 32 1229 1 32 1230 1 32 1231 1 32 1232 1 32 1234 1 32 1235 1 32 1236 1 32 1237 1 32 1238 1 32 1239 1 32 1244 1 32 1245 1 32 1246 1 32 1247 1 32 1249 1 32 1250 1 32 1251 1 32 1252 1 32 1254 1 32 1719 1 32 1725 1 32 1730 1 32 1735 1 32 1736 1 32 1737 1 32 1738 1 32 1746 1 32 1751 1 32 1756 1 32 1757 1 32 1758 1 32 1759 1 32 1766 1 32 1771 1 32 1772 1 32 1773 1 32 1774 1 32 1781 1 32 1782 1 32 1783 1 32 1784 1 32 1791 1 32 1792 1 32 1793 1 32 1794 1 32 1795 1 32 1796 1 32 1802 1 32 1807 1 32 1812 1 32 1813 1 32 1814 1 32 1815 1 32 1822 1 32 1827 1 32 1828 1 32 1829 1 32 1830 1 32 1837 1 32 1838 1 32 1839 1 32 1840 1 32 1847 1 32 1848 1 32 1849 1 32 1850 1 32 1851 1 32 1852 1 32 1857 1 32 1862 1 32 1863 1 32 1864 1 32 1865 1 32 1872 1 32 1873 1 32 1874 1 32 1875 1 32 1882 1 32 1883 1 32 1884 1 32 1885 1 32 1886 1 32 1887 1 32 1892 1 32 1893 1 32 1894 1 32 1895 1 32 1902 1 32 1903 1 32 1904 1 32 1905 1 32 1906 1 32 1907 1 32 1912 1 32 1913 1 32 1914 1 32 1915 1 32 1916 1 32 1917 1 32 1922 1 32 1923 1 32 1924 1 32 1925 1 32 1928 1 32 1933 1 32 1938 1 32 1939 1 32 1940 1 32 1941 1 32 1948 1 32 1953 1 32 1954 1 32 1955 1 32 1956 1 32 1963 1 32 1964 1 32 1965 1 32 1966 1 32 1973 1 32 1974 1 32 1975 1 32 1976 1 32 1977 1 32 1978 1 32 1983 1 32 1988 1 32 1989 1 32 1990 1 32 1991 1 32 1998 1 32 1999 1 32 2000 1 32 2001 1 32 2008 1 32 2009 1 32 2010 1 32 2011 1 32 2012 1 32 2013 1 32 2018 1 32 2019 1 32 2020 1 32 2021 1 32 2028 1 32 2029 1 32 2030 1 32 2031 1 32 2032 1 32 2033 1 32 2038 1 32 2039 1 32 2040 1 32 2041 1 32 2042 1 32 2043 1 32 2048 1 32 2049 1 32 2050 1 32 2051 1 32 2053 1 32 2058 1 32 2059 1 32 2060 1 32 2061 1 32 2068 1 32 2069 1 32 2070 1 32 2071 1 32 2078 1 32 2079 1 32 2080 1 32 2081 1 32 2082 1 32 2083 1 32 2088 1 32 2089 1 32 2090 1 32 2091 1 32 2098 1 32 2099 1 32 2100 1 32 2101 1 32 2102 1 32 2103 1 32 2108 1 32 2109 1 32 2110 1 32 2111 1 32 2112 1 32 2113 1 32 2118 1 32 2119 1 32 2120 1 32 2121 1 32 2123 1 32 2124 1 32 2125 1 32 2126 1 32 2133 1 32 2134 1 32 2135 1 32 2136 1 32 2137 1 32 2138 1 32 2143 1 32 2144 1 32 2145 1 32 2146 1 32 2147 1 32 2148 1 32 2153 1 32 2154 1 32 2155 1 32 2156 1 32 2158 1 32 2159 1 32 2160 1 32 2161 1 32 2162 1 32 2163 1 32 2168 1 32 2169 1 32 2170 1 32 2171 1 32 2173 1 32 2174 1 32 2175 1 32 2176 1 32 2178 1 32 2642 1 32 2647 1 32 2652 1 32 2653 1 32 2654 1 32 2655 1 32 2662 1 32 2667 1 32 2668 1 32 2669 1 32 2670 1 32 2677 1 32 2678 1 32 2679 1 32 2680 1 32 2687 1 32 2688 1 32 2689 1 32 2690 1 32 2691 1 32 2692 1 32 2697 1 32 2702 1 32 2703 1 32 2704 1 32 2705 1 32 2712 1 32 2713 1 32 2714 1 32 2715 1 32 2722 1 32 2723 1 32 2724 1 32 2725 1 32 2726 1 32 2727 1 32 2732 1 32 2733 1 32 2734 1 32 2735 1 32 2742 1 32 2743 1 32 2744 1 32 2745 1 32 2746 1 32 2747 1 32 2752 1 32 2753 1 32 2754 1 32 2755 1 32 2756 1 32 2757 1 32 2762 1 32 2763 1 32 2764 1 32 2765 1 32 2767 1 32 2772 1 32 2773 1 32 2774 1 32 2775 1 32 2782 1 32 2783 1 32 2784 1 32 2785 1 32 2792 1 32 2793 1 32 2794 1 32 2795 1 32 2796 1 32 2797 1 32 2802 1 32 2803 1 32 2804 1 32 2805 1 32 2812 1 32 2813 1 32 2814 1 32 2815 1 32 2816 1 32 2817 1 32 2822 1 32 2823 1 32 2824 1 32 2825 1 32 2826 1 32 2827 1 32 2832 1 32 2833 1 32 2834 1 32 2835 1 32 2837 1 32 2838 1 32 2839 1 32 2840 1 32 2847 1 32 2848 1 32 2849 1 32 2850 1 32 2851 1 32 2852 1 32 2857 1 32 2858 1 32 2859 1 32 2860 1 32 2861 1 32 2862 1 32 2867 1 32 2868 1 32 2869 1 32 2870 1 32 2872 1 32 2873 1 32 2874 1 32 2875 1 32 2876 1 32 2877 1 32 2882 1 32 2883 1 32 2884 1 32 2885 1 32 2887 1 32 2888 1 32 2889 1 32 2890 1 32 2892 1 32 2893 1 32 2898 1 32 2899 1 32 2900 1 32 2901 1 32 2908 1 32 2909 1 32 2910 1 32 2911 1 32 2918 1 32 2919 1 32 2920 1 32 2921 1 32 2922 1 32 2923 1 32 2928 1 32 2929 1 32 2930 1 32 2931 1 32 2938 1 32 2939 1 32 2940 1 32 2941 1 32 2942 1 32 2943 1 32 2948 1 32 2949 1 32 2950 1 32 2951 1 32 2952 1 32 2953 1 32 2958 1 32 2959 1 32 2960 1 32 2961 1 32 2963 1 32 2964 1 32 2965 1 32 2966 1 32 2973 1 32 2974 1 32 2975 1 32 2976 1 32 2977 1 32 2978 1 32 2983 1 32 2984 1 32 2985 1 32 2986 1 32 2987 1 32 2988 1 32 2993 1 32 2994 1 32 2995 1 32 2996 1 32 2998 1 32 2999 1 32 3000 1 32 3001 1 32 3002 1 32 3003 1 32 3008 1 32 3009 1 32 3010 1 32 3011 1 32 3013 1 32 3014 1 32 3015 1 32 3016 1 32 3018 1 32 3019 1 32 3020 1 32 3021 1 32 3022 1 32 3029 1 32 3030 1 32 3031 1 32 3032 1 32 3033 1 32 3034 1 32 3039 1 32 3040 1 32 3041 1 32 3042 1 32 3043 1 32 3044 1 32 3049 1 32 3050 1 32 3051 1 32 3052 1 32 3054 1 32 3055 1 32 3056 1 32 3057 1 32 3058 1 32 3059 1 32 3064 1 32 3065 1 32 3066 1 32 3067 1 32 3069 1 32 3070 1 32 3071 1 32 3072 1 32 3074 1 32 3075 1 32 3076 1 32 3077 1 32 3078 1 32 3079 1 32 3080 1 32 3085 1 32 3086 1 32 3087 1 32 3088 1 32 3090 1 32 3091 1 32 3092 1 32 3093 1 32 3095 1 32 3096 1 32 3097 1 32 3098 1 32 3099 1 32 3101 1 32 3102 1 33 5 1 33 12 1 33 18 1 33 23 1 33 27 1 33 31 1 33 32 1 33 33 1 33 40 1 33 46 1 33 51 1 33 55 1 33 59 1 33 60 1 33 61 1 33 67 1 33 72 1 33 76 1 33 80 1 33 81 1 33 82 1 33 87 1 33 91 1 33 95 1 33 96 1 33 97 1 33 101 1 33 105 1 33 106 1 33 107 1 33 111 1 33 112 1 33 113 1 33 117 1 33 118 1 33 119 1 33 124 1 33 130 1 33 135 1 33 139 1 33 143 1 33 144 1 33 145 1 33 151 1 33 156 1 33 160 1 33 164 1 33 165 1 33 166 1 33 171 1 33 175 1 33 179 1 33 180 1 33 181 1 33 185 1 33 189 1 33 190 1 33 191 1 33 195 1 33 196 1 33 197 1 33 201 1 33 202 1 33 203 1 33 207 1 33 212 1 33 216 1 33 220 1 33 221 1 33 222 1 33 227 1 33 231 1 33 235 1 33 236 1 33 237 1 33 241 1 33 245 1 33 246 1 33 247 1 33 251 1 33 252 1 33 253 1 33 257 1 33 258 1 33 259 1 33 262 1 33 266 1 33 270 1 33 271 1 33 272 1 33 276 1 33 280 1 33 281 1 33 282 1 33 286 1 33 287 1 33 288 1 33 292 1 33 293 1 33 294 1 33 296 1 33 300 1 33 301 1 33 302 1 33 306 1 33 307 1 33 308 1 33 312 1 33 313 1 33 314 1 33 316 1 33 317 1 33 318 1 33 322 1 33 323 1 33 324 1 33 326 1 33 327 1 33 328 1 33 330 1 33 796 1 33 802 1 33 807 1 33 811 1 33 815 1 33 816 1 33 817 1 33 823 1 33 828 1 33 832 1 33 836 1 33 837 1 33 838 1 33 843 1 33 847 1 33 851 1 33 852 1 33 853 1 33 857 1 33 861 1 33 862 1 33 863 1 33 867 1 33 868 1 33 869 1 33 873 1 33 874 1 33 875 1 33 879 1 33 884 1 33 888 1 33 892 1 33 893 1 33 894 1 33 899 1 33 903 1 33 907 1 33 908 1 33 909 1 33 913 1 33 917 1 33 918 1 33 919 1 33 923 1 33 924 1 33 925 1 33 929 1 33 930 1 33 931 1 33 934 1 33 938 1 33 942 1 33 943 1 33 944 1 33 948 1 33 952 1 33 953 1 33 954 1 33 958 1 33 959 1 33 960 1 33 964 1 33 965 1 33 966 1 33 968 1 33 972 1 33 973 1 33 974 1 33 978 1 33 979 1 33 980 1 33 984 1 33 985 1 33 986 1 33 988 1 33 989 1 33 990 1 33 994 1 33 995 1 33 996 1 33 998 1 33 999 1 33 1000 1 33 1002 1 33 1005 1 33 1010 1 33 1014 1 33 1018 1 33 1019 1 33 1020 1 33 1025 1 33 1029 1 33 1033 1 33 1034 1 33 1035 1 33 1039 1 33 1043 1 33 1044 1 33 1045 1 33 1049 1 33 1050 1 33 1051 1 33 1055 1 33 1056 1 33 1057 1 33 1060 1 33 1064 1 33 1068 1 33 1069 1 33 1070 1 33 1074 1 33 1078 1 33 1079 1 33 1080 1 33 1084 1 33 1085 1 33 1086 1 33 1090 1 33 1091 1 33 1092 1 33 1094 1 33 1098 1 33 1099 1 33 1100 1 33 1104 1 33 1105 1 33 1106 1 33 1110 1 33 1111 1 33 1112 1 33 1114 1 33 1115 1 33 1116 1 33 1120 1 33 1121 1 33 1122 1 33 1124 1 33 1125 1 33 1126 1 33 1128 1 33 1130 1 33 1134 1 33 1138 1 33 1139 1 33 1140 1 33 1144 1 33 1148 1 33 1149 1 33 1150 1 33 1154 1 33 1155 1 33 1156 1 33 1160 1 33 1161 1 33 1162 1 33 1164 1 33 1168 1 33 1169 1 33 1170 1 33 1174 1 33 1175 1 33 1176 1 33 1180 1 33 1181 1 33 1182 1 33 1184 1 33 1185 1 33 1186 1 33 1190 1 33 1191 1 33 1192 1 33 1194 1 33 1195 1 33 1196 1 33 1198 1 33 1199 1 33 1203 1 33 1204 1 33 1205 1 33 1209 1 33 1210 1 33 1211 1 33 1215 1 33 1216 1 33 1217 1 33 1219 1 33 1220 1 33 1221 1 33 1225 1 33 1226 1 33 1227 1 33 1229 1 33 1230 1 33 1231 1 33 1233 1 33 1234 1 33 1235 1 33 1236 1 33 1240 1 33 1241 1 33 1242 1 33 1244 1 33 1245 1 33 1246 1 33 1248 1 33 1249 1 33 1250 1 33 1251 1 33 1253 1 33 1254 1 33 1720 1 33 1726 1 33 1731 1 33 1735 1 33 1739 1 33 1740 1 33 1741 1 33 1747 1 33 1752 1 33 1756 1 33 1760 1 33 1761 1 33 1762 1 33 1767 1 33 1771 1 33 1775 1 33 1776 1 33 1777 1 33 1781 1 33 1785 1 33 1786 1 33 1787 1 33 1791 1 33 1792 1 33 1793 1 33 1797 1 33 1798 1 33 1799 1 33 1803 1 33 1808 1 33 1812 1 33 1816 1 33 1817 1 33 1818 1 33 1823 1 33 1827 1 33 1831 1 33 1832 1 33 1833 1 33 1837 1 33 1841 1 33 1842 1 33 1843 1 33 1847 1 33 1848 1 33 1849 1 33 1853 1 33 1854 1 33 1855 1 33 1858 1 33 1862 1 33 1866 1 33 1867 1 33 1868 1 33 1872 1 33 1876 1 33 1877 1 33 1878 1 33 1882 1 33 1883 1 33 1884 1 33 1888 1 33 1889 1 33 1890 1 33 1892 1 33 1896 1 33 1897 1 33 1898 1 33 1902 1 33 1903 1 33 1904 1 33 1908 1 33 1909 1 33 1910 1 33 1912 1 33 1913 1 33 1914 1 33 1918 1 33 1919 1 33 1920 1 33 1922 1 33 1923 1 33 1924 1 33 1926 1 33 1929 1 33 1934 1 33 1938 1 33 1942 1 33 1943 1 33 1944 1 33 1949 1 33 1953 1 33 1957 1 33 1958 1 33 1959 1 33 1963 1 33 1967 1 33 1968 1 33 1969 1 33 1973 1 33 1974 1 33 1975 1 33 1979 1 33 1980 1 33 1981 1 33 1984 1 33 1988 1 33 1992 1 33 1993 1 33 1994 1 33 1998 1 33 2002 1 33 2003 1 33 2004 1 33 2008 1 33 2009 1 33 2010 1 33 2014 1 33 2015 1 33 2016 1 33 2018 1 33 2022 1 33 2023 1 33 2024 1 33 2028 1 33 2029 1 33 2030 1 33 2034 1 33 2035 1 33 2036 1 33 2038 1 33 2039 1 33 2040 1 33 2044 1 33 2045 1 33 2046 1 33 2048 1 33 2049 1 33 2050 1 33 2052 1 33 2054 1 33 2058 1 33 2062 1 33 2063 1 33 2064 1 33 2068 1 33 2072 1 33 2073 1 33 2074 1 33 2078 1 33 2079 1 33 2080 1 33 2084 1 33 2085 1 33 2086 1 33 2088 1 33 2092 1 33 2093 1 33 2094 1 33 2098 1 33 2099 1 33 2100 1 33 2104 1 33 2105 1 33 2106 1 33 2108 1 33 2109 1 33 2110 1 33 2114 1 33 2115 1 33 2116 1 33 2118 1 33 2119 1 33 2120 1 33 2122 1 33 2123 1 33 2127 1 33 2128 1 33 2129 1 33 2133 1 33 2134 1 33 2135 1 33 2139 1 33 2140 1 33 2141 1 33 2143 1 33 2144 1 33 2145 1 33 2149 1 33 2150 1 33 2151 1 33 2153 1 33 2154 1 33 2155 1 33 2157 1 33 2158 1 33 2159 1 33 2160 1 33 2164 1 33 2165 1 33 2166 1 33 2168 1 33 2169 1 33 2170 1 33 2172 1 33 2173 1 33 2174 1 33 2175 1 33 2177 1 33 2178 1 33 2643 1 33 2648 1 33 2652 1 33 2656 1 33 2657 1 33 2658 1 33 2663 1 33 2667 1 33 2671 1 33 2672 1 33 2673 1 33 2677 1 33 2681 1 33 2682 1 33 2683 1 33 2687 1 33 2688 1 33 2689 1 33 2693 1 33 2694 1 33 2695 1 33 2698 1 33 2702 1 33 2706 1 33 2707 1 33 2708 1 33 2712 1 33 2716 1 33 2717 1 33 2718 1 33 2722 1 33 2723 1 33 2724 1 33 2728 1 33 2729 1 33 2730 1 33 2732 1 33 2736 1 33 2737 1 33 2738 1 33 2742 1 33 2743 1 33 2744 1 33 2748 1 33 2749 1 33 2750 1 33 2752 1 33 2753 1 33 2754 1 33 2758 1 33 2759 1 33 2760 1 33 2762 1 33 2763 1 33 2764 1 33 2766 1 33 2768 1 33 2772 1 33 2776 1 33 2777 1 33 2778 1 33 2782 1 33 2786 1 33 2787 1 33 2788 1 33 2792 1 33 2793 1 33 2794 1 33 2798 1 33 2799 1 33 2800 1 33 2802 1 33 2806 1 33 2807 1 33 2808 1 33 2812 1 33 2813 1 33 2814 1 33 2818 1 33 2819 1 33 2820 1 33 2822 1 33 2823 1 33 2824 1 33 2828 1 33 2829 1 33 2830 1 33 2832 1 33 2833 1 33 2834 1 33 2836 1 33 2837 1 33 2841 1 33 2842 1 33 2843 1 33 2847 1 33 2848 1 33 2849 1 33 2853 1 33 2854 1 33 2855 1 33 2857 1 33 2858 1 33 2859 1 33 2863 1 33 2864 1 33 2865 1 33 2867 1 33 2868 1 33 2869 1 33 2871 1 33 2872 1 33 2873 1 33 2874 1 33 2878 1 33 2879 1 33 2880 1 33 2882 1 33 2883 1 33 2884 1 33 2886 1 33 2887 1 33 2888 1 33 2889 1 33 2891 1 33 2892 1 33 2894 1 33 2898 1 33 2902 1 33 2903 1 33 2904 1 33 2908 1 33 2912 1 33 2913 1 33 2914 1 33 2918 1 33 2919 1 33 2920 1 33 2924 1 33 2925 1 33 2926 1 33 2928 1 33 2932 1 33 2933 1 33 2934 1 33 2938 1 33 2939 1 33 2940 1 33 2944 1 33 2945 1 33 2946 1 33 2948 1 33 2949 1 33 2950 1 33 2954 1 33 2955 1 33 2956 1 33 2958 1 33 2959 1 33 2960 1 33 2962 1 33 2963 1 33 2967 1 33 2968 1 33 2969 1 33 2973 1 33 2974 1 33 2975 1 33 2979 1 33 2980 1 33 2981 1 33 2983 1 33 2984 1 33 2985 1 33 2989 1 33 2990 1 33 2991 1 33 2993 1 33 2994 1 33 2995 1 33 2997 1 33 2998 1 33 2999 1 33 3000 1 33 3004 1 33 3005 1 33 3006 1 33 3008 1 33 3009 1 33 3010 1 33 3012 1 33 3013 1 33 3014 1 33 3015 1 33 3017 1 33 3018 1 33 3019 1 33 3023 1 33 3024 1 33 3025 1 33 3029 1 33 3030 1 33 3031 1 33 3035 1 33 3036 1 33 3037 1 33 3039 1 33 3040 1 33 3041 1 33 3045 1 33 3046 1 33 3047 1 33 3049 1 33 3050 1 33 3051 1 33 3053 1 33 3054 1 33 3055 1 33 3056 1 33 3060 1 33 3061 1 33 3062 1 33 3064 1 33 3065 1 33 3066 1 33 3068 1 33 3069 1 33 3070 1 33 3071 1 33 3073 1 33 3074 1 33 3075 1 33 3076 1 33 3077 1 33 3081 1 33 3082 1 33 3083 1 33 3085 1 33 3086 1 33 3087 1 33 3089 1 33 3090 1 33 3091 1 33 3092 1 33 3094 1 33 3095 1 33 3096 1 33 3097 1 33 3098 1 33 3100 1 33 3101 1 33 3102 1 34 6 1 34 13 1 34 19 1 34 24 1 34 28 1 34 31 1 34 34 1 34 35 1 34 41 1 34 47 1 34 52 1 34 56 1 34 59 1 34 62 1 34 63 1 34 68 1 34 73 1 34 77 1 34 80 1 34 83 1 34 84 1 34 88 1 34 92 1 34 95 1 34 98 1 34 99 1 34 102 1 34 105 1 34 108 1 34 109 1 34 111 1 34 114 1 34 115 1 34 117 1 34 118 1 34 120 1 34 125 1 34 131 1 34 136 1 34 140 1 34 143 1 34 146 1 34 147 1 34 152 1 34 157 1 34 161 1 34 164 1 34 167 1 34 168 1 34 172 1 34 176 1 34 179 1 34 182 1 34 183 1 34 186 1 34 189 1 34 192 1 34 193 1 34 195 1 34 198 1 34 199 1 34 201 1 34 202 1 34 204 1 34 208 1 34 213 1 34 217 1 34 220 1 34 223 1 34 224 1 34 228 1 34 232 1 34 235 1 34 238 1 34 239 1 34 242 1 34 245 1 34 248 1 34 249 1 34 251 1 34 254 1 34 255 1 34 257 1 34 258 1 34 260 1 34 263 1 34 267 1 34 270 1 34 273 1 34 274 1 34 277 1 34 280 1 34 283 1 34 284 1 34 286 1 34 289 1 34 290 1 34 292 1 34 293 1 34 295 1 34 297 1 34 300 1 34 303 1 34 304 1 34 306 1 34 309 1 34 310 1 34 312 1 34 313 1 34 315 1 34 316 1 34 319 1 34 320 1 34 322 1 34 323 1 34 325 1 34 326 1 34 327 1 34 329 1 34 330 1 34 797 1 34 803 1 34 808 1 34 812 1 34 815 1 34 818 1 34 819 1 34 824 1 34 829 1 34 833 1 34 836 1 34 839 1 34 840 1 34 844 1 34 848 1 34 851 1 34 854 1 34 855 1 34 858 1 34 861 1 34 864 1 34 865 1 34 867 1 34 870 1 34 871 1 34 873 1 34 874 1 34 876 1 34 880 1 34 885 1 34 889 1 34 892 1 34 895 1 34 896 1 34 900 1 34 904 1 34 907 1 34 910 1 34 911 1 34 914 1 34 917 1 34 920 1 34 921 1 34 923 1 34 926 1 34 927 1 34 929 1 34 930 1 34 932 1 34 935 1 34 939 1 34 942 1 34 945 1 34 946 1 34 949 1 34 952 1 34 955 1 34 956 1 34 958 1 34 961 1 34 962 1 34 964 1 34 965 1 34 967 1 34 969 1 34 972 1 34 975 1 34 976 1 34 978 1 34 981 1 34 982 1 34 984 1 34 985 1 34 987 1 34 988 1 34 991 1 34 992 1 34 994 1 34 995 1 34 997 1 34 998 1 34 999 1 34 1001 1 34 1002 1 34 1006 1 34 1011 1 34 1015 1 34 1018 1 34 1021 1 34 1022 1 34 1026 1 34 1030 1 34 1033 1 34 1036 1 34 1037 1 34 1040 1 34 1043 1 34 1046 1 34 1047 1 34 1049 1 34 1052 1 34 1053 1 34 1055 1 34 1056 1 34 1058 1 34 1061 1 34 1065 1 34 1068 1 34 1071 1 34 1072 1 34 1075 1 34 1078 1 34 1081 1 34 1082 1 34 1084 1 34 1087 1 34 1088 1 34 1090 1 34 1091 1 34 1093 1 34 1095 1 34 1098 1 34 1101 1 34 1102 1 34 1104 1 34 1107 1 34 1108 1 34 1110 1 34 1111 1 34 1113 1 34 1114 1 34 1117 1 34 1118 1 34 1120 1 34 1121 1 34 1123 1 34 1124 1 34 1125 1 34 1127 1 34 1128 1 34 1131 1 34 1135 1 34 1138 1 34 1141 1 34 1142 1 34 1145 1 34 1148 1 34 1151 1 34 1152 1 34 1154 1 34 1157 1 34 1158 1 34 1160 1 34 1161 1 34 1163 1 34 1165 1 34 1168 1 34 1171 1 34 1172 1 34 1174 1 34 1177 1 34 1178 1 34 1180 1 34 1181 1 34 1183 1 34 1184 1 34 1187 1 34 1188 1 34 1190 1 34 1191 1 34 1193 1 34 1194 1 34 1195 1 34 1197 1 34 1198 1 34 1200 1 34 1203 1 34 1206 1 34 1207 1 34 1209 1 34 1212 1 34 1213 1 34 1215 1 34 1216 1 34 1218 1 34 1219 1 34 1222 1 34 1223 1 34 1225 1 34 1226 1 34 1228 1 34 1229 1 34 1230 1 34 1232 1 34 1233 1 34 1234 1 34 1237 1 34 1238 1 34 1240 1 34 1241 1 34 1243 1 34 1244 1 34 1245 1 34 1247 1 34 1248 1 34 1249 1 34 1250 1 34 1252 1 34 1253 1 34 1254 1 34 1721 1 34 1727 1 34 1732 1 34 1736 1 34 1739 1 34 1742 1 34 1743 1 34 1748 1 34 1753 1 34 1757 1 34 1760 1 34 1763 1 34 1764 1 34 1768 1 34 1772 1 34 1775 1 34 1778 1 34 1779 1 34 1782 1 34 1785 1 34 1788 1 34 1789 1 34 1791 1 34 1794 1 34 1795 1 34 1797 1 34 1798 1 34 1800 1 34 1804 1 34 1809 1 34 1813 1 34 1816 1 34 1819 1 34 1820 1 34 1824 1 34 1828 1 34 1831 1 34 1834 1 34 1835 1 34 1838 1 34 1841 1 34 1844 1 34 1845 1 34 1847 1 34 1850 1 34 1851 1 34 1853 1 34 1854 1 34 1856 1 34 1859 1 34 1863 1 34 1866 1 34 1869 1 34 1870 1 34 1873 1 34 1876 1 34 1879 1 34 1880 1 34 1882 1 34 1885 1 34 1886 1 34 1888 1 34 1889 1 34 1891 1 34 1893 1 34 1896 1 34 1899 1 34 1900 1 34 1902 1 34 1905 1 34 1906 1 34 1908 1 34 1909 1 34 1911 1 34 1912 1 34 1915 1 34 1916 1 34 1918 1 34 1919 1 34 1921 1 34 1922 1 34 1923 1 34 1925 1 34 1926 1 34 1930 1 34 1935 1 34 1939 1 34 1942 1 34 1945 1 34 1946 1 34 1950 1 34 1954 1 34 1957 1 34 1960 1 34 1961 1 34 1964 1 34 1967 1 34 1970 1 34 1971 1 34 1973 1 34 1976 1 34 1977 1 34 1979 1 34 1980 1 34 1982 1 34 1985 1 34 1989 1 34 1992 1 34 1995 1 34 1996 1 34 1999 1 34 2002 1 34 2005 1 34 2006 1 34 2008 1 34 2011 1 34 2012 1 34 2014 1 34 2015 1 34 2017 1 34 2019 1 34 2022 1 34 2025 1 34 2026 1 34 2028 1 34 2031 1 34 2032 1 34 2034 1 34 2035 1 34 2037 1 34 2038 1 34 2041 1 34 2042 1 34 2044 1 34 2045 1 34 2047 1 34 2048 1 34 2049 1 34 2051 1 34 2052 1 34 2055 1 34 2059 1 34 2062 1 34 2065 1 34 2066 1 34 2069 1 34 2072 1 34 2075 1 34 2076 1 34 2078 1 34 2081 1 34 2082 1 34 2084 1 34 2085 1 34 2087 1 34 2089 1 34 2092 1 34 2095 1 34 2096 1 34 2098 1 34 2101 1 34 2102 1 34 2104 1 34 2105 1 34 2107 1 34 2108 1 34 2111 1 34 2112 1 34 2114 1 34 2115 1 34 2117 1 34 2118 1 34 2119 1 34 2121 1 34 2122 1 34 2124 1 34 2127 1 34 2130 1 34 2131 1 34 2133 1 34 2136 1 34 2137 1 34 2139 1 34 2140 1 34 2142 1 34 2143 1 34 2146 1 34 2147 1 34 2149 1 34 2150 1 34 2152 1 34 2153 1 34 2154 1 34 2156 1 34 2157 1 34 2158 1 34 2161 1 34 2162 1 34 2164 1 34 2165 1 34 2167 1 34 2168 1 34 2169 1 34 2171 1 34 2172 1 34 2173 1 34 2174 1 34 2176 1 34 2177 1 34 2178 1 34 2644 1 34 2649 1 34 2653 1 34 2656 1 34 2659 1 34 2660 1 34 2664 1 34 2668 1 34 2671 1 34 2674 1 34 2675 1 34 2678 1 34 2681 1 34 2684 1 34 2685 1 34 2687 1 34 2690 1 34 2691 1 34 2693 1 34 2694 1 34 2696 1 34 2699 1 34 2703 1 34 2706 1 34 2709 1 34 2710 1 34 2713 1 34 2716 1 34 2719 1 34 2720 1 34 2722 1 34 2725 1 34 2726 1 34 2728 1 34 2729 1 34 2731 1 34 2733 1 34 2736 1 34 2739 1 34 2740 1 34 2742 1 34 2745 1 34 2746 1 34 2748 1 34 2749 1 34 2751 1 34 2752 1 34 2755 1 34 2756 1 34 2758 1 34 2759 1 34 2761 1 34 2762 1 34 2763 1 34 2765 1 34 2766 1 34 2769 1 34 2773 1 34 2776 1 34 2779 1 34 2780 1 34 2783 1 34 2786 1 34 2789 1 34 2790 1 34 2792 1 34 2795 1 34 2796 1 34 2798 1 34 2799 1 34 2801 1 34 2803 1 34 2806 1 34 2809 1 34 2810 1 34 2812 1 34 2815 1 34 2816 1 34 2818 1 34 2819 1 34 2821 1 34 2822 1 34 2825 1 34 2826 1 34 2828 1 34 2829 1 34 2831 1 34 2832 1 34 2833 1 34 2835 1 34 2836 1 34 2838 1 34 2841 1 34 2844 1 34 2845 1 34 2847 1 34 2850 1 34 2851 1 34 2853 1 34 2854 1 34 2856 1 34 2857 1 34 2860 1 34 2861 1 34 2863 1 34 2864 1 34 2866 1 34 2867 1 34 2868 1 34 2870 1 34 2871 1 34 2872 1 34 2875 1 34 2876 1 34 2878 1 34 2879 1 34 2881 1 34 2882 1 34 2883 1 34 2885 1 34 2886 1 34 2887 1 34 2888 1 34 2890 1 34 2891 1 34 2892 1 34 2895 1 34 2899 1 34 2902 1 34 2905 1 34 2906 1 34 2909 1 34 2912 1 34 2915 1 34 2916 1 34 2918 1 34 2921 1 34 2922 1 34 2924 1 34 2925 1 34 2927 1 34 2929 1 34 2932 1 34 2935 1 34 2936 1 34 2938 1 34 2941 1 34 2942 1 34 2944 1 34 2945 1 34 2947 1 34 2948 1 34 2951 1 34 2952 1 34 2954 1 34 2955 1 34 2957 1 34 2958 1 34 2959 1 34 2961 1 34 2962 1 34 2964 1 34 2967 1 34 2970 1 34 2971 1 34 2973 1 34 2976 1 34 2977 1 34 2979 1 34 2980 1 34 2982 1 34 2983 1 34 2986 1 34 2987 1 34 2989 1 34 2990 1 34 2992 1 34 2993 1 34 2994 1 34 2996 1 34 2997 1 34 2998 1 34 3001 1 34 3002 1 34 3004 1 34 3005 1 34 3007 1 34 3008 1 34 3009 1 34 3011 1 34 3012 1 34 3013 1 34 3014 1 34 3016 1 34 3017 1 34 3018 1 34 3020 1 34 3023 1 34 3026 1 34 3027 1 34 3029 1 34 3032 1 34 3033 1 34 3035 1 34 3036 1 34 3038 1 34 3039 1 34 3042 1 34 3043 1 34 3045 1 34 3046 1 34 3048 1 34 3049 1 34 3050 1 34 3052 1 34 3053 1 34 3054 1 34 3057 1 34 3058 1 34 3060 1 34 3061 1 34 3063 1 34 3064 1 34 3065 1 34 3067 1 34 3068 1 34 3069 1 34 3070 1 34 3072 1 34 3073 1 34 3074 1 34 3075 1 34 3078 1 34 3079 1 34 3081 1 34 3082 1 34 3084 1 34 3085 1 34 3086 1 34 3088 1 34 3089 1 34 3090 1 34 3091 1 34 3093 1 34 3094 1 34 3095 1 34 3096 1 34 3097 1 34 3099 1 34 3100 1 34 3101 1 34 3102 1 35 7 1 35 14 1 35 20 1 35 25 1 35 29 1 35 32 1 35 34 1 35 36 1 35 42 1 35 48 1 35 53 1 35 57 1 35 60 1 35 62 1 35 64 1 35 69 1 35 74 1 35 78 1 35 81 1 35 83 1 35 85 1 35 89 1 35 93 1 35 96 1 35 98 1 35 100 1 35 103 1 35 106 1 35 108 1 35 110 1 35 112 1 35 114 1 35 116 1 35 117 1 35 119 1 35 120 1 35 126 1 35 132 1 35 137 1 35 141 1 35 144 1 35 146 1 35 148 1 35 153 1 35 158 1 35 162 1 35 165 1 35 167 1 35 169 1 35 173 1 35 177 1 35 180 1 35 182 1 35 184 1 35 187 1 35 190 1 35 192 1 35 194 1 35 196 1 35 198 1 35 200 1 35 201 1 35 203 1 35 204 1 35 209 1 35 214 1 35 218 1 35 221 1 35 223 1 35 225 1 35 229 1 35 233 1 35 236 1 35 238 1 35 240 1 35 243 1 35 246 1 35 248 1 35 250 1 35 252 1 35 254 1 35 256 1 35 257 1 35 259 1 35 260 1 35 264 1 35 268 1 35 271 1 35 273 1 35 275 1 35 278 1 35 281 1 35 283 1 35 285 1 35 287 1 35 289 1 35 291 1 35 292 1 35 294 1 35 295 1 35 298 1 35 301 1 35 303 1 35 305 1 35 307 1 35 309 1 35 311 1 35 312 1 35 314 1 35 315 1 35 317 1 35 319 1 35 321 1 35 322 1 35 324 1 35 325 1 35 326 1 35 328 1 35 329 1 35 330 1 35 798 1 35 804 1 35 809 1 35 813 1 35 816 1 35 818 1 35 820 1 35 825 1 35 830 1 35 834 1 35 837 1 35 839 1 35 841 1 35 845 1 35 849 1 35 852 1 35 854 1 35 856 1 35 859 1 35 862 1 35 864 1 35 866 1 35 868 1 35 870 1 35 872 1 35 873 1 35 875 1 35 876 1 35 881 1 35 886 1 35 890 1 35 893 1 35 895 1 35 897 1 35 901 1 35 905 1 35 908 1 35 910 1 35 912 1 35 915 1 35 918 1 35 920 1 35 922 1 35 924 1 35 926 1 35 928 1 35 929 1 35 931 1 35 932 1 35 936 1 35 940 1 35 943 1 35 945 1 35 947 1 35 950 1 35 953 1 35 955 1 35 957 1 35 959 1 35 961 1 35 963 1 35 964 1 35 966 1 35 967 1 35 970 1 35 973 1 35 975 1 35 977 1 35 979 1 35 981 1 35 983 1 35 984 1 35 986 1 35 987 1 35 989 1 35 991 1 35 993 1 35 994 1 35 996 1 35 997 1 35 998 1 35 1000 1 35 1001 1 35 1002 1 35 1007 1 35 1012 1 35 1016 1 35 1019 1 35 1021 1 35 1023 1 35 1027 1 35 1031 1 35 1034 1 35 1036 1 35 1038 1 35 1041 1 35 1044 1 35 1046 1 35 1048 1 35 1050 1 35 1052 1 35 1054 1 35 1055 1 35 1057 1 35 1058 1 35 1062 1 35 1066 1 35 1069 1 35 1071 1 35 1073 1 35 1076 1 35 1079 1 35 1081 1 35 1083 1 35 1085 1 35 1087 1 35 1089 1 35 1090 1 35 1092 1 35 1093 1 35 1096 1 35 1099 1 35 1101 1 35 1103 1 35 1105 1 35 1107 1 35 1109 1 35 1110 1 35 1112 1 35 1113 1 35 1115 1 35 1117 1 35 1119 1 35 1120 1 35 1122 1 35 1123 1 35 1124 1 35 1126 1 35 1127 1 35 1128 1 35 1132 1 35 1136 1 35 1139 1 35 1141 1 35 1143 1 35 1146 1 35 1149 1 35 1151 1 35 1153 1 35 1155 1 35 1157 1 35 1159 1 35 1160 1 35 1162 1 35 1163 1 35 1166 1 35 1169 1 35 1171 1 35 1173 1 35 1175 1 35 1177 1 35 1179 1 35 1180 1 35 1182 1 35 1183 1 35 1185 1 35 1187 1 35 1189 1 35 1190 1 35 1192 1 35 1193 1 35 1194 1 35 1196 1 35 1197 1 35 1198 1 35 1201 1 35 1204 1 35 1206 1 35 1208 1 35 1210 1 35 1212 1 35 1214 1 35 1215 1 35 1217 1 35 1218 1 35 1220 1 35 1222 1 35 1224 1 35 1225 1 35 1227 1 35 1228 1 35 1229 1 35 1231 1 35 1232 1 35 1233 1 35 1235 1 35 1237 1 35 1239 1 35 1240 1 35 1242 1 35 1243 1 35 1244 1 35 1246 1 35 1247 1 35 1248 1 35 1249 1 35 1251 1 35 1252 1 35 1253 1 35 1254 1 35 1722 1 35 1728 1 35 1733 1 35 1737 1 35 1740 1 35 1742 1 35 1744 1 35 1749 1 35 1754 1 35 1758 1 35 1761 1 35 1763 1 35 1765 1 35 1769 1 35 1773 1 35 1776 1 35 1778 1 35 1780 1 35 1783 1 35 1786 1 35 1788 1 35 1790 1 35 1792 1 35 1794 1 35 1796 1 35 1797 1 35 1799 1 35 1800 1 35 1805 1 35 1810 1 35 1814 1 35 1817 1 35 1819 1 35 1821 1 35 1825 1 35 1829 1 35 1832 1 35 1834 1 35 1836 1 35 1839 1 35 1842 1 35 1844 1 35 1846 1 35 1848 1 35 1850 1 35 1852 1 35 1853 1 35 1855 1 35 1856 1 35 1860 1 35 1864 1 35 1867 1 35 1869 1 35 1871 1 35 1874 1 35 1877 1 35 1879 1 35 1881 1 35 1883 1 35 1885 1 35 1887 1 35 1888 1 35 1890 1 35 1891 1 35 1894 1 35 1897 1 35 1899 1 35 1901 1 35 1903 1 35 1905 1 35 1907 1 35 1908 1 35 1910 1 35 1911 1 35 1913 1 35 1915 1 35 1917 1 35 1918 1 35 1920 1 35 1921 1 35 1922 1 35 1924 1 35 1925 1 35 1926 1 35 1931 1 35 1936 1 35 1940 1 35 1943 1 35 1945 1 35 1947 1 35 1951 1 35 1955 1 35 1958 1 35 1960 1 35 1962 1 35 1965 1 35 1968 1 35 1970 1 35 1972 1 35 1974 1 35 1976 1 35 1978 1 35 1979 1 35 1981 1 35 1982 1 35 1986 1 35 1990 1 35 1993 1 35 1995 1 35 1997 1 35 2000 1 35 2003 1 35 2005 1 35 2007 1 35 2009 1 35 2011 1 35 2013 1 35 2014 1 35 2016 1 35 2017 1 35 2020 1 35 2023 1 35 2025 1 35 2027 1 35 2029 1 35 2031 1 35 2033 1 35 2034 1 35 2036 1 35 2037 1 35 2039 1 35 2041 1 35 2043 1 35 2044 1 35 2046 1 35 2047 1 35 2048 1 35 2050 1 35 2051 1 35 2052 1 35 2056 1 35 2060 1 35 2063 1 35 2065 1 35 2067 1 35 2070 1 35 2073 1 35 2075 1 35 2077 1 35 2079 1 35 2081 1 35 2083 1 35 2084 1 35 2086 1 35 2087 1 35 2090 1 35 2093 1 35 2095 1 35 2097 1 35 2099 1 35 2101 1 35 2103 1 35 2104 1 35 2106 1 35 2107 1 35 2109 1 35 2111 1 35 2113 1 35 2114 1 35 2116 1 35 2117 1 35 2118 1 35 2120 1 35 2121 1 35 2122 1 35 2125 1 35 2128 1 35 2130 1 35 2132 1 35 2134 1 35 2136 1 35 2138 1 35 2139 1 35 2141 1 35 2142 1 35 2144 1 35 2146 1 35 2148 1 35 2149 1 35 2151 1 35 2152 1 35 2153 1 35 2155 1 35 2156 1 35 2157 1 35 2159 1 35 2161 1 35 2163 1 35 2164 1 35 2166 1 35 2167 1 35 2168 1 35 2170 1 35 2171 1 35 2172 1 35 2173 1 35 2175 1 35 2176 1 35 2177 1 35 2178 1 35 2645 1 35 2650 1 35 2654 1 35 2657 1 35 2659 1 35 2661 1 35 2665 1 35 2669 1 35 2672 1 35 2674 1 35 2676 1 35 2679 1 35 2682 1 35 2684 1 35 2686 1 35 2688 1 35 2690 1 35 2692 1 35 2693 1 35 2695 1 35 2696 1 35 2700 1 35 2704 1 35 2707 1 35 2709 1 35 2711 1 35 2714 1 35 2717 1 35 2719 1 35 2721 1 35 2723 1 35 2725 1 35 2727 1 35 2728 1 35 2730 1 35 2731 1 35 2734 1 35 2737 1 35 2739 1 35 2741 1 35 2743 1 35 2745 1 35 2747 1 35 2748 1 35 2750 1 35 2751 1 35 2753 1 35 2755 1 35 2757 1 35 2758 1 35 2760 1 35 2761 1 35 2762 1 35 2764 1 35 2765 1 35 2766 1 35 2770 1 35 2774 1 35 2777 1 35 2779 1 35 2781 1 35 2784 1 35 2787 1 35 2789 1 35 2791 1 35 2793 1 35 2795 1 35 2797 1 35 2798 1 35 2800 1 35 2801 1 35 2804 1 35 2807 1 35 2809 1 35 2811 1 35 2813 1 35 2815 1 35 2817 1 35 2818 1 35 2820 1 35 2821 1 35 2823 1 35 2825 1 35 2827 1 35 2828 1 35 2830 1 35 2831 1 35 2832 1 35 2834 1 35 2835 1 35 2836 1 35 2839 1 35 2842 1 35 2844 1 35 2846 1 35 2848 1 35 2850 1 35 2852 1 35 2853 1 35 2855 1 35 2856 1 35 2858 1 35 2860 1 35 2862 1 35 2863 1 35 2865 1 35 2866 1 35 2867 1 35 2869 1 35 2870 1 35 2871 1 35 2873 1 35 2875 1 35 2877 1 35 2878 1 35 2880 1 35 2881 1 35 2882 1 35 2884 1 35 2885 1 35 2886 1 35 2887 1 35 2889 1 35 2890 1 35 2891 1 35 2892 1 35 2896 1 35 2900 1 35 2903 1 35 2905 1 35 2907 1 35 2910 1 35 2913 1 35 2915 1 35 2917 1 35 2919 1 35 2921 1 35 2923 1 35 2924 1 35 2926 1 35 2927 1 35 2930 1 35 2933 1 35 2935 1 35 2937 1 35 2939 1 35 2941 1 35 2943 1 35 2944 1 35 2946 1 35 2947 1 35 2949 1 35 2951 1 35 2953 1 35 2954 1 35 2956 1 35 2957 1 35 2958 1 35 2960 1 35 2961 1 35 2962 1 35 2965 1 35 2968 1 35 2970 1 35 2972 1 35 2974 1 35 2976 1 35 2978 1 35 2979 1 35 2981 1 35 2982 1 35 2984 1 35 2986 1 35 2988 1 35 2989 1 35 2991 1 35 2992 1 35 2993 1 35 2995 1 35 2996 1 35 2997 1 35 2999 1 35 3001 1 35 3003 1 35 3004 1 35 3006 1 35 3007 1 35 3008 1 35 3010 1 35 3011 1 35 3012 1 35 3013 1 35 3015 1 35 3016 1 35 3017 1 35 3018 1 35 3021 1 35 3024 1 35 3026 1 35 3028 1 35 3030 1 35 3032 1 35 3034 1 35 3035 1 35 3037 1 35 3038 1 35 3040 1 35 3042 1 35 3044 1 35 3045 1 35 3047 1 35 3048 1 35 3049 1 35 3051 1 35 3052 1 35 3053 1 35 3055 1 35 3057 1 35 3059 1 35 3060 1 35 3062 1 35 3063 1 35 3064 1 35 3066 1 35 3067 1 35 3068 1 35 3069 1 35 3071 1 35 3072 1 35 3073 1 35 3074 1 35 3076 1 35 3078 1 35 3080 1 35 3081 1 35 3083 1 35 3084 1 35 3085 1 35 3087 1 35 3088 1 35 3089 1 35 3090 1 35 3092 1 35 3093 1 35 3094 1 35 3095 1 35 3096 1 35 3098 1 35 3099 1 35 3100 1 35 3101 1 35 3102 1 36 8 1 36 15 1 36 21 1 36 26 1 36 30 1 36 33 1 36 35 1 36 36 1 36 43 1 36 49 1 36 54 1 36 58 1 36 61 1 36 63 1 36 64 1 36 70 1 36 75 1 36 79 1 36 82 1 36 84 1 36 85 1 36 90 1 36 94 1 36 97 1 36 99 1 36 100 1 36 104 1 36 107 1 36 109 1 36 110 1 36 113 1 36 115 1 36 116 1 36 118 1 36 119 1 36 120 1 36 127 1 36 133 1 36 138 1 36 142 1 36 145 1 36 147 1 36 148 1 36 154 1 36 159 1 36 163 1 36 166 1 36 168 1 36 169 1 36 174 1 36 178 1 36 181 1 36 183 1 36 184 1 36 188 1 36 191 1 36 193 1 36 194 1 36 197 1 36 199 1 36 200 1 36 202 1 36 203 1 36 204 1 36 210 1 36 215 1 36 219 1 36 222 1 36 224 1 36 225 1 36 230 1 36 234 1 36 237 1 36 239 1 36 240 1 36 244 1 36 247 1 36 249 1 36 250 1 36 253 1 36 255 1 36 256 1 36 258 1 36 259 1 36 260 1 36 265 1 36 269 1 36 272 1 36 274 1 36 275 1 36 279 1 36 282 1 36 284 1 36 285 1 36 288 1 36 290 1 36 291 1 36 293 1 36 294 1 36 295 1 36 299 1 36 302 1 36 304 1 36 305 1 36 308 1 36 310 1 36 311 1 36 313 1 36 314 1 36 315 1 36 318 1 36 320 1 36 321 1 36 323 1 36 324 1 36 325 1 36 327 1 36 328 1 36 329 1 36 330 1 36 799 1 36 805 1 36 810 1 36 814 1 36 817 1 36 819 1 36 820 1 36 826 1 36 831 1 36 835 1 36 838 1 36 840 1 36 841 1 36 846 1 36 850 1 36 853 1 36 855 1 36 856 1 36 860 1 36 863 1 36 865 1 36 866 1 36 869 1 36 871 1 36 872 1 36 874 1 36 875 1 36 876 1 36 882 1 36 887 1 36 891 1 36 894 1 36 896 1 36 897 1 36 902 1 36 906 1 36 909 1 36 911 1 36 912 1 36 916 1 36 919 1 36 921 1 36 922 1 36 925 1 36 927 1 36 928 1 36 930 1 36 931 1 36 932 1 36 937 1 36 941 1 36 944 1 36 946 1 36 947 1 36 951 1 36 954 1 36 956 1 36 957 1 36 960 1 36 962 1 36 963 1 36 965 1 36 966 1 36 967 1 36 971 1 36 974 1 36 976 1 36 977 1 36 980 1 36 982 1 36 983 1 36 985 1 36 986 1 36 987 1 36 990 1 36 992 1 36 993 1 36 995 1 36 996 1 36 997 1 36 999 1 36 1000 1 36 1001 1 36 1002 1 36 1008 1 36 1013 1 36 1017 1 36 1020 1 36 1022 1 36 1023 1 36 1028 1 36 1032 1 36 1035 1 36 1037 1 36 1038 1 36 1042 1 36 1045 1 36 1047 1 36 1048 1 36 1051 1 36 1053 1 36 1054 1 36 1056 1 36 1057 1 36 1058 1 36 1063 1 36 1067 1 36 1070 1 36 1072 1 36 1073 1 36 1077 1 36 1080 1 36 1082 1 36 1083 1 36 1086 1 36 1088 1 36 1089 1 36 1091 1 36 1092 1 36 1093 1 36 1097 1 36 1100 1 36 1102 1 36 1103 1 36 1106 1 36 1108 1 36 1109 1 36 1111 1 36 1112 1 36 1113 1 36 1116 1 36 1118 1 36 1119 1 36 1121 1 36 1122 1 36 1123 1 36 1125 1 36 1126 1 36 1127 1 36 1128 1 36 1133 1 36 1137 1 36 1140 1 36 1142 1 36 1143 1 36 1147 1 36 1150 1 36 1152 1 36 1153 1 36 1156 1 36 1158 1 36 1159 1 36 1161 1 36 1162 1 36 1163 1 36 1167 1 36 1170 1 36 1172 1 36 1173 1 36 1176 1 36 1178 1 36 1179 1 36 1181 1 36 1182 1 36 1183 1 36 1186 1 36 1188 1 36 1189 1 36 1191 1 36 1192 1 36 1193 1 36 1195 1 36 1196 1 36 1197 1 36 1198 1 36 1202 1 36 1205 1 36 1207 1 36 1208 1 36 1211 1 36 1213 1 36 1214 1 36 1216 1 36 1217 1 36 1218 1 36 1221 1 36 1223 1 36 1224 1 36 1226 1 36 1227 1 36 1228 1 36 1230 1 36 1231 1 36 1232 1 36 1233 1 36 1236 1 36 1238 1 36 1239 1 36 1241 1 36 1242 1 36 1243 1 36 1245 1 36 1246 1 36 1247 1 36 1248 1 36 1250 1 36 1251 1 36 1252 1 36 1253 1 36 1254 1 36 1723 1 36 1729 1 36 1734 1 36 1738 1 36 1741 1 36 1743 1 36 1744 1 36 1750 1 36 1755 1 36 1759 1 36 1762 1 36 1764 1 36 1765 1 36 1770 1 36 1774 1 36 1777 1 36 1779 1 36 1780 1 36 1784 1 36 1787 1 36 1789 1 36 1790 1 36 1793 1 36 1795 1 36 1796 1 36 1798 1 36 1799 1 36 1800 1 36 1806 1 36 1811 1 36 1815 1 36 1818 1 36 1820 1 36 1821 1 36 1826 1 36 1830 1 36 1833 1 36 1835 1 36 1836 1 36 1840 1 36 1843 1 36 1845 1 36 1846 1 36 1849 1 36 1851 1 36 1852 1 36 1854 1 36 1855 1 36 1856 1 36 1861 1 36 1865 1 36 1868 1 36 1870 1 36 1871 1 36 1875 1 36 1878 1 36 1880 1 36 1881 1 36 1884 1 36 1886 1 36 1887 1 36 1889 1 36 1890 1 36 1891 1 36 1895 1 36 1898 1 36 1900 1 36 1901 1 36 1904 1 36 1906 1 36 1907 1 36 1909 1 36 1910 1 36 1911 1 36 1914 1 36 1916 1 36 1917 1 36 1919 1 36 1920 1 36 1921 1 36 1923 1 36 1924 1 36 1925 1 36 1926 1 36 1932 1 36 1937 1 36 1941 1 36 1944 1 36 1946 1 36 1947 1 36 1952 1 36 1956 1 36 1959 1 36 1961 1 36 1962 1 36 1966 1 36 1969 1 36 1971 1 36 1972 1 36 1975 1 36 1977 1 36 1978 1 36 1980 1 36 1981 1 36 1982 1 36 1987 1 36 1991 1 36 1994 1 36 1996 1 36 1997 1 36 2001 1 36 2004 1 36 2006 1 36 2007 1 36 2010 1 36 2012 1 36 2013 1 36 2015 1 36 2016 1 36 2017 1 36 2021 1 36 2024 1 36 2026 1 36 2027 1 36 2030 1 36 2032 1 36 2033 1 36 2035 1 36 2036 1 36 2037 1 36 2040 1 36 2042 1 36 2043 1 36 2045 1 36 2046 1 36 2047 1 36 2049 1 36 2050 1 36 2051 1 36 2052 1 36 2057 1 36 2061 1 36 2064 1 36 2066 1 36 2067 1 36 2071 1 36 2074 1 36 2076 1 36 2077 1 36 2080 1 36 2082 1 36 2083 1 36 2085 1 36 2086 1 36 2087 1 36 2091 1 36 2094 1 36 2096 1 36 2097 1 36 2100 1 36 2102 1 36 2103 1 36 2105 1 36 2106 1 36 2107 1 36 2110 1 36 2112 1 36 2113 1 36 2115 1 36 2116 1 36 2117 1 36 2119 1 36 2120 1 36 2121 1 36 2122 1 36 2126 1 36 2129 1 36 2131 1 36 2132 1 36 2135 1 36 2137 1 36 2138 1 36 2140 1 36 2141 1 36 2142 1 36 2145 1 36 2147 1 36 2148 1 36 2150 1 36 2151 1 36 2152 1 36 2154 1 36 2155 1 36 2156 1 36 2157 1 36 2160 1 36 2162 1 36 2163 1 36 2165 1 36 2166 1 36 2167 1 36 2169 1 36 2170 1 36 2171 1 36 2172 1 36 2174 1 36 2175 1 36 2176 1 36 2177 1 36 2178 1 36 2646 1 36 2651 1 36 2655 1 36 2658 1 36 2660 1 36 2661 1 36 2666 1 36 2670 1 36 2673 1 36 2675 1 36 2676 1 36 2680 1 36 2683 1 36 2685 1 36 2686 1 36 2689 1 36 2691 1 36 2692 1 36 2694 1 36 2695 1 36 2696 1 36 2701 1 36 2705 1 36 2708 1 36 2710 1 36 2711 1 36 2715 1 36 2718 1 36 2720 1 36 2721 1 36 2724 1 36 2726 1 36 2727 1 36 2729 1 36 2730 1 36 2731 1 36 2735 1 36 2738 1 36 2740 1 36 2741 1 36 2744 1 36 2746 1 36 2747 1 36 2749 1 36 2750 1 36 2751 1 36 2754 1 36 2756 1 36 2757 1 36 2759 1 36 2760 1 36 2761 1 36 2763 1 36 2764 1 36 2765 1 36 2766 1 36 2771 1 36 2775 1 36 2778 1 36 2780 1 36 2781 1 36 2785 1 36 2788 1 36 2790 1 36 2791 1 36 2794 1 36 2796 1 36 2797 1 36 2799 1 36 2800 1 36 2801 1 36 2805 1 36 2808 1 36 2810 1 36 2811 1 36 2814 1 36 2816 1 36 2817 1 36 2819 1 36 2820 1 36 2821 1 36 2824 1 36 2826 1 36 2827 1 36 2829 1 36 2830 1 36 2831 1 36 2833 1 36 2834 1 36 2835 1 36 2836 1 36 2840 1 36 2843 1 36 2845 1 36 2846 1 36 2849 1 36 2851 1 36 2852 1 36 2854 1 36 2855 1 36 2856 1 36 2859 1 36 2861 1 36 2862 1 36 2864 1 36 2865 1 36 2866 1 36 2868 1 36 2869 1 36 2870 1 36 2871 1 36 2874 1 36 2876 1 36 2877 1 36 2879 1 36 2880 1 36 2881 1 36 2883 1 36 2884 1 36 2885 1 36 2886 1 36 2888 1 36 2889 1 36 2890 1 36 2891 1 36 2892 1 36 2897 1 36 2901 1 36 2904 1 36 2906 1 36 2907 1 36 2911 1 36 2914 1 36 2916 1 36 2917 1 36 2920 1 36 2922 1 36 2923 1 36 2925 1 36 2926 1 36 2927 1 36 2931 1 36 2934 1 36 2936 1 36 2937 1 36 2940 1 36 2942 1 36 2943 1 36 2945 1 36 2946 1 36 2947 1 36 2950 1 36 2952 1 36 2953 1 36 2955 1 36 2956 1 36 2957 1 36 2959 1 36 2960 1 36 2961 1 36 2962 1 36 2966 1 36 2969 1 36 2971 1 36 2972 1 36 2975 1 36 2977 1 36 2978 1 36 2980 1 36 2981 1 36 2982 1 36 2985 1 36 2987 1 36 2988 1 36 2990 1 36 2991 1 36 2992 1 36 2994 1 36 2995 1 36 2996 1 36 2997 1 36 3000 1 36 3002 1 36 3003 1 36 3005 1 36 3006 1 36 3007 1 36 3009 1 36 3010 1 36 3011 1 36 3012 1 36 3014 1 36 3015 1 36 3016 1 36 3017 1 36 3018 1 36 3022 1 36 3025 1 36 3027 1 36 3028 1 36 3031 1 36 3033 1 36 3034 1 36 3036 1 36 3037 1 36 3038 1 36 3041 1 36 3043 1 36 3044 1 36 3046 1 36 3047 1 36 3048 1 36 3050 1 36 3051 1 36 3052 1 36 3053 1 36 3056 1 36 3058 1 36 3059 1 36 3061 1 36 3062 1 36 3063 1 36 3065 1 36 3066 1 36 3067 1 36 3068 1 36 3070 1 36 3071 1 36 3072 1 36 3073 1 36 3074 1 36 3077 1 36 3079 1 36 3080 1 36 3082 1 36 3083 1 36 3084 1 36 3086 1 36 3087 1 36 3088 1 36 3089 1 36 3091 1 36 3092 1 36 3093 1 36 3094 1 36 3095 1 36 3097 1 36 3098 1 36 3099 1 36 3100 1 36 3101 1 36 3102 1 37 1 1 37 2 1 37 3 1 37 4 1 37 5 1 37 6 1 37 7 1 37 8 1 37 9 1 37 10 1 37 11 1 37 12 1 37 13 1 37 14 1 37 15 1 37 16 1 37 17 1 37 18 1 37 19 1 37 20 1 37 21 1 37 22 1 37 23 1 37 24 1 37 25 1 37 26 1 37 27 1 37 28 1 37 29 1 37 30 1 37 31 1 37 32 1 37 33 1 37 34 1 37 35 1 37 36 1 37 331 1 37 332 1 37 333 1 37 334 1 37 335 1 37 336 1 37 337 1 37 338 1 37 339 1 37 340 1 37 341 1 37 342 1 37 343 1 37 344 1 37 345 1 37 346 1 37 347 1 37 348 1 37 349 1 37 350 1 37 351 1 37 352 1 37 353 1 37 354 1 37 355 1 37 356 1 37 357 1 37 358 1 37 359 1 37 360 1 37 361 1 37 362 1 37 363 1 37 364 1 37 365 1 37 366 1 37 367 1 37 368 1 37 369 1 37 370 1 37 371 1 37 372 1 37 373 1 37 374 1 37 375 1 37 376 1 37 377 1 37 378 1 37 379 1 37 380 1 37 381 1 37 382 1 37 383 1 37 384 1 37 385 1 37 386 1 37 387 1 37 388 1 37 389 1 37 390 1 37 391 1 37 392 1 37 393 1 37 394 1 37 395 1 37 396 1 37 397 1 37 398 1 37 399 1 37 400 1 37 401 1 37 402 1 37 403 1 37 404 1 37 405 1 37 406 1 37 407 1 37 408 1 37 409 1 37 410 1 37 411 1 37 412 1 37 413 1 37 414 1 37 793 1 37 794 1 37 795 1 37 796 1 37 797 1 37 798 1 37 799 1 37 800 1 37 801 1 37 802 1 37 803 1 37 804 1 37 805 1 37 806 1 37 807 1 37 808 1 37 809 1 37 810 1 37 811 1 37 812 1 37 813 1 37 814 1 37 815 1 37 816 1 37 817 1 37 818 1 37 819 1 37 820 1 37 821 1 37 822 1 37 823 1 37 824 1 37 825 1 37 826 1 37 827 1 37 828 1 37 829 1 37 830 1 37 831 1 37 832 1 37 833 1 37 834 1 37 835 1 37 836 1 37 837 1 37 838 1 37 839 1 37 840 1 37 841 1 37 842 1 37 843 1 37 844 1 37 845 1 37 846 1 37 847 1 37 848 1 37 849 1 37 850 1 37 851 1 37 852 1 37 853 1 37 854 1 37 855 1 37 856 1 37 857 1 37 858 1 37 859 1 37 860 1 37 861 1 37 862 1 37 863 1 37 864 1 37 865 1 37 866 1 37 867 1 37 868 1 37 869 1 37 870 1 37 871 1 37 872 1 37 873 1 37 874 1 37 875 1 37 876 1 37 1255 1 37 1256 1 37 1257 1 37 1258 1 37 1259 1 37 1260 1 37 1261 1 37 1262 1 37 1263 1 37 1264 1 37 1265 1 37 1266 1 37 1267 1 37 1268 1 37 1269 1 37 1270 1 37 1271 1 37 1272 1 37 1273 1 37 1274 1 37 1275 1 37 1276 1 37 1277 1 37 1278 1 37 1279 1 37 1280 1 37 1281 1 37 1282 1 37 1283 1 37 1284 1 37 1285 1 37 1286 1 37 1287 1 37 1288 1 37 1289 1 37 1290 1 37 1291 1 37 1292 1 37 1293 1 37 1294 1 37 1295 1 37 1296 1 37 1297 1 37 1298 1 37 1299 1 37 1300 1 37 1301 1 37 1302 1 37 1303 1 37 1304 1 37 1305 1 37 1306 1 37 1307 1 37 1308 1 37 1309 1 37 1310 1 37 1311 1 37 1312 1 37 1313 1 37 1314 1 37 1315 1 37 1316 1 37 1317 1 37 1318 1 37 1319 1 37 1320 1 37 1321 1 37 1322 1 37 1323 1 37 1324 1 37 1325 1 37 1326 1 37 1327 1 37 1328 1 37 1329 1 37 1330 1 37 1331 1 37 1332 1 37 1333 1 37 1334 1 37 1335 1 37 1336 1 37 1337 1 37 1338 1 37 1339 1 37 1340 1 37 1341 1 37 1342 1 37 1343 1 37 1344 1 37 1345 1 37 1346 1 37 1347 1 37 1348 1 37 1349 1 37 1350 1 37 1351 1 37 1352 1 37 1353 1 37 1354 1 37 1355 1 37 1356 1 37 1357 1 37 1358 1 37 1359 1 37 1360 1 37 1361 1 37 1362 1 37 1363 1 37 1364 1 37 1365 1 37 1366 1 37 1367 1 37 1368 1 37 1369 1 37 1370 1 37 1371 1 37 1372 1 37 1373 1 37 1374 1 37 1375 1 37 1376 1 37 1377 1 37 1378 1 37 1379 1 37 1380 1 37 1717 1 37 1718 1 37 1719 1 37 1720 1 37 1721 1 37 1722 1 37 1723 1 37 1724 1 37 1725 1 37 1726 1 37 1727 1 37 1728 1 37 1729 1 37 1730 1 37 1731 1 37 1732 1 37 1733 1 37 1734 1 37 1735 1 37 1736 1 37 1737 1 37 1738 1 37 1739 1 37 1740 1 37 1741 1 37 1742 1 37 1743 1 37 1744 1 37 1745 1 37 1746 1 37 1747 1 37 1748 1 37 1749 1 37 1750 1 37 1751 1 37 1752 1 37 1753 1 37 1754 1 37 1755 1 37 1756 1 37 1757 1 37 1758 1 37 1759 1 37 1760 1 37 1761 1 37 1762 1 37 1763 1 37 1764 1 37 1765 1 37 1766 1 37 1767 1 37 1768 1 37 1769 1 37 1770 1 37 1771 1 37 1772 1 37 1773 1 37 1774 1 37 1775 1 37 1776 1 37 1777 1 37 1778 1 37 1779 1 37 1780 1 37 1781 1 37 1782 1 37 1783 1 37 1784 1 37 1785 1 37 1786 1 37 1787 1 37 1788 1 37 1789 1 37 1790 1 37 1791 1 37 1792 1 37 1793 1 37 1794 1 37 1795 1 37 1796 1 37 1797 1 37 1798 1 37 1799 1 37 1800 1 37 2179 1 37 2180 1 37 2181 1 37 2182 1 37 2183 1 37 2184 1 37 2185 1 37 2186 1 37 2187 1 37 2188 1 37 2189 1 37 2190 1 37 2191 1 37 2192 1 37 2193 1 37 2194 1 37 2195 1 37 2196 1 37 2197 1 37 2198 1 37 2199 1 37 2200 1 37 2201 1 37 2202 1 37 2203 1 37 2204 1 37 2205 1 37 2206 1 37 2207 1 37 2208 1 37 2209 1 37 2210 1 37 2211 1 37 2212 1 37 2213 1 37 2214 1 37 2215 1 37 2216 1 37 2217 1 37 2218 1 37 2219 1 37 2220 1 37 2221 1 37 2222 1 37 2223 1 37 2224 1 37 2225 1 37 2226 1 37 2227 1 37 2228 1 37 2229 1 37 2230 1 37 2231 1 37 2232 1 37 2233 1 37 2234 1 37 2235 1 37 2236 1 37 2237 1 37 2238 1 37 2239 1 37 2240 1 37 2241 1 37 2242 1 37 2243 1 37 2244 1 37 2245 1 37 2246 1 37 2247 1 37 2248 1 37 2249 1 37 2250 1 37 2251 1 37 2252 1 37 2253 1 37 2254 1 37 2255 1 37 2256 1 37 2257 1 37 2258 1 37 2259 1 37 2260 1 37 2261 1 37 2262 1 37 2263 1 37 2264 1 37 2265 1 37 2266 1 37 2267 1 37 2268 1 37 2269 1 37 2270 1 37 2271 1 37 2272 1 37 2273 1 37 2274 1 37 2275 1 37 2276 1 37 2277 1 37 2278 1 37 2279 1 37 2280 1 37 2281 1 37 2282 1 37 2283 1 37 2284 1 37 2285 1 37 2286 1 37 2287 1 37 2288 1 37 2289 1 37 2290 1 37 2291 1 37 2292 1 37 2293 1 37 2294 1 37 2295 1 37 2296 1 37 2297 1 37 2298 1 37 2299 1 37 2300 1 37 2301 1 37 2302 1 37 2303 1 37 2304 1 37 2641 1 37 2642 1 37 2643 1 37 2644 1 37 2645 1 37 2646 1 37 2647 1 37 2648 1 37 2649 1 37 2650 1 37 2651 1 37 2652 1 37 2653 1 37 2654 1 37 2655 1 37 2656 1 37 2657 1 37 2658 1 37 2659 1 37 2660 1 37 2661 1 37 2662 1 37 2663 1 37 2664 1 37 2665 1 37 2666 1 37 2667 1 37 2668 1 37 2669 1 37 2670 1 37 2671 1 37 2672 1 37 2673 1 37 2674 1 37 2675 1 37 2676 1 37 2677 1 37 2678 1 37 2679 1 37 2680 1 37 2681 1 37 2682 1 37 2683 1 37 2684 1 37 2685 1 37 2686 1 37 2687 1 37 2688 1 37 2689 1 37 2690 1 37 2691 1 37 2692 1 37 2693 1 37 2694 1 37 2695 1 37 2696 1 37 2697 1 37 2698 1 37 2699 1 37 2700 1 37 2701 1 37 2702 1 37 2703 1 37 2704 1 37 2705 1 37 2706 1 37 2707 1 37 2708 1 37 2709 1 37 2710 1 37 2711 1 37 2712 1 37 2713 1 37 2714 1 37 2715 1 37 2716 1 37 2717 1 37 2718 1 37 2719 1 37 2720 1 37 2721 1 37 2722 1 37 2723 1 37 2724 1 37 2725 1 37 2726 1 37 2727 1 37 2728 1 37 2729 1 37 2730 1 37 2731 1 37 2732 1 37 2733 1 37 2734 1 37 2735 1 37 2736 1 37 2737 1 37 2738 1 37 2739 1 37 2740 1 37 2741 1 37 2742 1 37 2743 1 37 2744 1 37 2745 1 37 2746 1 37 2747 1 37 2748 1 37 2749 1 37 2750 1 37 2751 1 37 2752 1 37 2753 1 37 2754 1 37 2755 1 37 2756 1 37 2757 1 37 2758 1 37 2759 1 37 2760 1 37 2761 1 37 2762 1 37 2763 1 37 2764 1 37 2765 1 37 2766 1 37 3103 1 37 3104 1 37 3105 1 37 3106 1 37 3107 1 37 3108 1 37 3109 1 37 3110 1 37 3111 1 37 3112 1 37 3113 1 37 3114 1 37 3115 1 37 3116 1 37 3117 1 37 3118 1 37 3119 1 37 3120 1 37 3121 1 37 3122 1 37 3123 1 37 3124 1 37 3125 1 37 3126 1 37 3127 1 37 3128 1 37 3129 1 37 3130 1 37 3131 1 37 3132 1 37 3133 1 37 3134 1 37 3135 1 37 3136 1 37 3137 1 37 3138 1 37 3139 1 37 3140 1 37 3141 1 37 3142 1 37 3143 1 37 3144 1 37 3145 1 37 3146 1 37 3147 1 37 3148 1 37 3149 1 37 3150 1 37 3151 1 37 3152 1 37 3153 1 37 3154 1 37 3155 1 37 3156 1 37 3157 1 37 3158 1 37 3159 1 37 3160 1 37 3161 1 37 3162 1 37 3163 1 37 3164 1 37 3165 1 37 3166 1 37 3167 1 37 3168 1 37 3169 1 37 3170 1 37 3171 1 37 3172 1 37 3173 1 37 3174 1 37 3175 1 37 3176 1 37 3177 1 37 3178 1 37 3179 1 37 3180 1 37 3181 1 37 3182 1 37 3183 1 37 3184 1 37 3185 1 37 3186 1 37 3187 1 37 3188 1 37 3189 1 37 3190 1 37 3191 1 37 3192 1 37 3193 1 37 3194 1 37 3195 1 37 3196 1 37 3197 1 37 3198 1 37 3199 1 37 3200 1 37 3201 1 37 3202 1 37 3203 1 37 3204 1 37 3205 1 37 3206 1 37 3207 1 37 3208 1 37 3209 1 37 3210 1 37 3211 1 37 3212 1 37 3213 1 37 3214 1 37 3215 1 37 3216 1 37 3217 1 37 3218 1 37 3219 1 37 3220 1 37 3221 1 37 3222 1 37 3223 1 37 3224 1 37 3225 1 37 3226 1 37 3227 1 37 3228 1 38 1 1 38 2 1 38 3 1 38 4 1 38 5 1 38 6 1 38 7 1 38 8 1 38 37 1 38 38 1 38 39 1 38 40 1 38 41 1 38 42 1 38 43 1 38 44 1 38 45 1 38 46 1 38 47 1 38 48 1 38 49 1 38 50 1 38 51 1 38 52 1 38 53 1 38 54 1 38 55 1 38 56 1 38 57 1 38 58 1 38 59 1 38 60 1 38 61 1 38 62 1 38 63 1 38 64 1 38 331 1 38 332 1 38 333 1 38 334 1 38 335 1 38 336 1 38 337 1 38 338 1 38 339 1 38 340 1 38 341 1 38 342 1 38 343 1 38 344 1 38 345 1 38 346 1 38 347 1 38 348 1 38 349 1 38 350 1 38 351 1 38 352 1 38 353 1 38 354 1 38 355 1 38 356 1 38 357 1 38 358 1 38 415 1 38 416 1 38 417 1 38 418 1 38 419 1 38 420 1 38 421 1 38 422 1 38 423 1 38 424 1 38 425 1 38 426 1 38 427 1 38 428 1 38 429 1 38 430 1 38 431 1 38 432 1 38 433 1 38 434 1 38 435 1 38 436 1 38 437 1 38 438 1 38 439 1 38 440 1 38 441 1 38 442 1 38 443 1 38 444 1 38 445 1 38 446 1 38 447 1 38 448 1 38 449 1 38 450 1 38 451 1 38 452 1 38 453 1 38 454 1 38 455 1 38 456 1 38 457 1 38 458 1 38 459 1 38 460 1 38 461 1 38 462 1 38 463 1 38 464 1 38 465 1 38 466 1 38 467 1 38 468 1 38 469 1 38 470 1 38 793 1 38 794 1 38 795 1 38 796 1 38 797 1 38 798 1 38 799 1 38 800 1 38 801 1 38 802 1 38 803 1 38 804 1 38 805 1 38 806 1 38 807 1 38 808 1 38 809 1 38 810 1 38 811 1 38 812 1 38 813 1 38 814 1 38 815 1 38 816 1 38 817 1 38 818 1 38 819 1 38 820 1 38 877 1 38 878 1 38 879 1 38 880 1 38 881 1 38 882 1 38 883 1 38 884 1 38 885 1 38 886 1 38 887 1 38 888 1 38 889 1 38 890 1 38 891 1 38 892 1 38 893 1 38 894 1 38 895 1 38 896 1 38 897 1 38 898 1 38 899 1 38 900 1 38 901 1 38 902 1 38 903 1 38 904 1 38 905 1 38 906 1 38 907 1 38 908 1 38 909 1 38 910 1 38 911 1 38 912 1 38 913 1 38 914 1 38 915 1 38 916 1 38 917 1 38 918 1 38 919 1 38 920 1 38 921 1 38 922 1 38 923 1 38 924 1 38 925 1 38 926 1 38 927 1 38 928 1 38 929 1 38 930 1 38 931 1 38 932 1 38 1255 1 38 1256 1 38 1257 1 38 1258 1 38 1259 1 38 1260 1 38 1261 1 38 1262 1 38 1263 1 38 1264 1 38 1265 1 38 1266 1 38 1267 1 38 1268 1 38 1269 1 38 1270 1 38 1271 1 38 1272 1 38 1273 1 38 1274 1 38 1275 1 38 1276 1 38 1277 1 38 1278 1 38 1279 1 38 1280 1 38 1281 1 38 1282 1 38 1283 1 38 1284 1 38 1285 1 38 1286 1 38 1287 1 38 1288 1 38 1289 1 38 1290 1 38 1291 1 38 1292 1 38 1293 1 38 1294 1 38 1295 1 38 1296 1 38 1297 1 38 1298 1 38 1299 1 38 1300 1 38 1301 1 38 1302 1 38 1303 1 38 1304 1 38 1305 1 38 1306 1 38 1307 1 38 1308 1 38 1309 1 38 1310 1 38 1381 1 38 1382 1 38 1383 1 38 1384 1 38 1385 1 38 1386 1 38 1387 1 38 1388 1 38 1389 1 38 1390 1 38 1391 1 38 1392 1 38 1393 1 38 1394 1 38 1395 1 38 1396 1 38 1397 1 38 1398 1 38 1399 1 38 1400 1 38 1401 1 38 1402 1 38 1403 1 38 1404 1 38 1405 1 38 1406 1 38 1407 1 38 1408 1 38 1409 1 38 1410 1 38 1411 1 38 1412 1 38 1413 1 38 1414 1 38 1415 1 38 1416 1 38 1417 1 38 1418 1 38 1419 1 38 1420 1 38 1421 1 38 1422 1 38 1423 1 38 1424 1 38 1425 1 38 1426 1 38 1427 1 38 1428 1 38 1429 1 38 1430 1 38 1431 1 38 1432 1 38 1433 1 38 1434 1 38 1435 1 38 1436 1 38 1437 1 38 1438 1 38 1439 1 38 1440 1 38 1441 1 38 1442 1 38 1443 1 38 1444 1 38 1445 1 38 1446 1 38 1447 1 38 1448 1 38 1449 1 38 1450 1 38 1717 1 38 1718 1 38 1719 1 38 1720 1 38 1721 1 38 1722 1 38 1723 1 38 1724 1 38 1725 1 38 1726 1 38 1727 1 38 1728 1 38 1729 1 38 1730 1 38 1731 1 38 1732 1 38 1733 1 38 1734 1 38 1735 1 38 1736 1 38 1737 1 38 1738 1 38 1739 1 38 1740 1 38 1741 1 38 1742 1 38 1743 1 38 1744 1 38 1801 1 38 1802 1 38 1803 1 38 1804 1 38 1805 1 38 1806 1 38 1807 1 38 1808 1 38 1809 1 38 1810 1 38 1811 1 38 1812 1 38 1813 1 38 1814 1 38 1815 1 38 1816 1 38 1817 1 38 1818 1 38 1819 1 38 1820 1 38 1821 1 38 1822 1 38 1823 1 38 1824 1 38 1825 1 38 1826 1 38 1827 1 38 1828 1 38 1829 1 38 1830 1 38 1831 1 38 1832 1 38 1833 1 38 1834 1 38 1835 1 38 1836 1 38 1837 1 38 1838 1 38 1839 1 38 1840 1 38 1841 1 38 1842 1 38 1843 1 38 1844 1 38 1845 1 38 1846 1 38 1847 1 38 1848 1 38 1849 1 38 1850 1 38 1851 1 38 1852 1 38 1853 1 38 1854 1 38 1855 1 38 1856 1 38 2179 1 38 2180 1 38 2181 1 38 2182 1 38 2183 1 38 2184 1 38 2185 1 38 2186 1 38 2187 1 38 2188 1 38 2189 1 38 2190 1 38 2191 1 38 2192 1 38 2193 1 38 2194 1 38 2195 1 38 2196 1 38 2197 1 38 2198 1 38 2199 1 38 2200 1 38 2201 1 38 2202 1 38 2203 1 38 2204 1 38 2205 1 38 2206 1 38 2207 1 38 2208 1 38 2209 1 38 2210 1 38 2211 1 38 2212 1 38 2213 1 38 2214 1 38 2215 1 38 2216 1 38 2217 1 38 2218 1 38 2219 1 38 2220 1 38 2221 1 38 2222 1 38 2223 1 38 2224 1 38 2225 1 38 2226 1 38 2227 1 38 2228 1 38 2229 1 38 2230 1 38 2231 1 38 2232 1 38 2233 1 38 2234 1 38 2305 1 38 2306 1 38 2307 1 38 2308 1 38 2309 1 38 2310 1 38 2311 1 38 2312 1 38 2313 1 38 2314 1 38 2315 1 38 2316 1 38 2317 1 38 2318 1 38 2319 1 38 2320 1 38 2321 1 38 2322 1 38 2323 1 38 2324 1 38 2325 1 38 2326 1 38 2327 1 38 2328 1 38 2329 1 38 2330 1 38 2331 1 38 2332 1 38 2333 1 38 2334 1 38 2335 1 38 2336 1 38 2337 1 38 2338 1 38 2339 1 38 2340 1 38 2341 1 38 2342 1 38 2343 1 38 2344 1 38 2345 1 38 2346 1 38 2347 1 38 2348 1 38 2349 1 38 2350 1 38 2351 1 38 2352 1 38 2353 1 38 2354 1 38 2355 1 38 2356 1 38 2357 1 38 2358 1 38 2359 1 38 2360 1 38 2361 1 38 2362 1 38 2363 1 38 2364 1 38 2365 1 38 2366 1 38 2367 1 38 2368 1 38 2369 1 38 2370 1 38 2371 1 38 2372 1 38 2373 1 38 2374 1 38 2641 1 38 2642 1 38 2643 1 38 2644 1 38 2645 1 38 2646 1 38 2647 1 38 2648 1 38 2649 1 38 2650 1 38 2651 1 38 2652 1 38 2653 1 38 2654 1 38 2655 1 38 2656 1 38 2657 1 38 2658 1 38 2659 1 38 2660 1 38 2661 1 38 2662 1 38 2663 1 38 2664 1 38 2665 1 38 2666 1 38 2667 1 38 2668 1 38 2669 1 38 2670 1 38 2671 1 38 2672 1 38 2673 1 38 2674 1 38 2675 1 38 2676 1 38 2677 1 38 2678 1 38 2679 1 38 2680 1 38 2681 1 38 2682 1 38 2683 1 38 2684 1 38 2685 1 38 2686 1 38 2687 1 38 2688 1 38 2689 1 38 2690 1 38 2691 1 38 2692 1 38 2693 1 38 2694 1 38 2695 1 38 2696 1 38 2767 1 38 2768 1 38 2769 1 38 2770 1 38 2771 1 38 2772 1 38 2773 1 38 2774 1 38 2775 1 38 2776 1 38 2777 1 38 2778 1 38 2779 1 38 2780 1 38 2781 1 38 2782 1 38 2783 1 38 2784 1 38 2785 1 38 2786 1 38 2787 1 38 2788 1 38 2789 1 38 2790 1 38 2791 1 38 2792 1 38 2793 1 38 2794 1 38 2795 1 38 2796 1 38 2797 1 38 2798 1 38 2799 1 38 2800 1 38 2801 1 38 2802 1 38 2803 1 38 2804 1 38 2805 1 38 2806 1 38 2807 1 38 2808 1 38 2809 1 38 2810 1 38 2811 1 38 2812 1 38 2813 1 38 2814 1 38 2815 1 38 2816 1 38 2817 1 38 2818 1 38 2819 1 38 2820 1 38 2821 1 38 2822 1 38 2823 1 38 2824 1 38 2825 1 38 2826 1 38 2827 1 38 2828 1 38 2829 1 38 2830 1 38 2831 1 38 2832 1 38 2833 1 38 2834 1 38 2835 1 38 2836 1 38 3103 1 38 3104 1 38 3105 1 38 3106 1 38 3107 1 38 3108 1 38 3109 1 38 3110 1 38 3111 1 38 3112 1 38 3113 1 38 3114 1 38 3115 1 38 3116 1 38 3117 1 38 3118 1 38 3119 1 38 3120 1 38 3121 1 38 3122 1 38 3123 1 38 3124 1 38 3125 1 38 3126 1 38 3127 1 38 3128 1 38 3129 1 38 3130 1 38 3131 1 38 3132 1 38 3133 1 38 3134 1 38 3135 1 38 3136 1 38 3137 1 38 3138 1 38 3139 1 38 3140 1 38 3141 1 38 3142 1 38 3143 1 38 3144 1 38 3145 1 38 3146 1 38 3147 1 38 3148 1 38 3149 1 38 3150 1 38 3151 1 38 3152 1 38 3153 1 38 3154 1 38 3155 1 38 3156 1 38 3157 1 38 3158 1 38 3159 1 38 3160 1 38 3161 1 38 3162 1 38 3163 1 38 3164 1 38 3165 1 38 3166 1 38 3167 1 38 3168 1 38 3169 1 38 3170 1 38 3171 1 38 3172 1 38 3229 1 38 3230 1 38 3231 1 38 3232 1 38 3233 1 38 3234 1 38 3235 1 38 3236 1 38 3237 1 38 3238 1 38 3239 1 38 3240 1 38 3241 1 38 3242 1 38 3243 1 38 3244 1 38 3245 1 38 3246 1 38 3247 1 38 3248 1 38 3249 1 38 3250 1 38 3251 1 38 3252 1 38 3253 1 38 3254 1 38 3255 1 38 3256 1 38 3257 1 38 3258 1 38 3259 1 38 3260 1 38 3261 1 38 3262 1 38 3263 1 38 3264 1 38 3265 1 38 3266 1 38 3267 1 38 3268 1 38 3269 1 38 3270 1 38 3271 1 38 3272 1 38 3273 1 38 3274 1 38 3275 1 38 3276 1 38 3277 1 38 3278 1 38 3279 1 38 3280 1 38 3281 1 38 3282 1 38 3283 1 38 3284 1 39 1 1 39 9 1 39 10 1 39 11 1 39 12 1 39 13 1 39 14 1 39 15 1 39 37 1 39 38 1 39 39 1 39 40 1 39 41 1 39 42 1 39 43 1 39 65 1 39 66 1 39 67 1 39 68 1 39 69 1 39 70 1 39 71 1 39 72 1 39 73 1 39 74 1 39 75 1 39 76 1 39 77 1 39 78 1 39 79 1 39 80 1 39 81 1 39 82 1 39 83 1 39 84 1 39 85 1 39 331 1 39 332 1 39 333 1 39 334 1 39 335 1 39 336 1 39 337 1 39 359 1 39 360 1 39 361 1 39 362 1 39 363 1 39 364 1 39 365 1 39 366 1 39 367 1 39 368 1 39 369 1 39 370 1 39 371 1 39 372 1 39 373 1 39 374 1 39 375 1 39 376 1 39 377 1 39 378 1 39 379 1 39 415 1 39 416 1 39 417 1 39 418 1 39 419 1 39 420 1 39 421 1 39 422 1 39 423 1 39 424 1 39 425 1 39 426 1 39 427 1 39 428 1 39 429 1 39 430 1 39 431 1 39 432 1 39 433 1 39 434 1 39 435 1 39 471 1 39 472 1 39 473 1 39 474 1 39 475 1 39 476 1 39 477 1 39 478 1 39 479 1 39 480 1 39 481 1 39 482 1 39 483 1 39 484 1 39 485 1 39 486 1 39 487 1 39 488 1 39 489 1 39 490 1 39 491 1 39 492 1 39 493 1 39 494 1 39 495 1 39 496 1 39 497 1 39 498 1 39 499 1 39 500 1 39 501 1 39 502 1 39 503 1 39 504 1 39 505 1 39 793 1 39 794 1 39 795 1 39 796 1 39 797 1 39 798 1 39 799 1 39 821 1 39 822 1 39 823 1 39 824 1 39 825 1 39 826 1 39 827 1 39 828 1 39 829 1 39 830 1 39 831 1 39 832 1 39 833 1 39 834 1 39 835 1 39 836 1 39 837 1 39 838 1 39 839 1 39 840 1 39 841 1 39 877 1 39 878 1 39 879 1 39 880 1 39 881 1 39 882 1 39 883 1 39 884 1 39 885 1 39 886 1 39 887 1 39 888 1 39 889 1 39 890 1 39 891 1 39 892 1 39 893 1 39 894 1 39 895 1 39 896 1 39 897 1 39 933 1 39 934 1 39 935 1 39 936 1 39 937 1 39 938 1 39 939 1 39 940 1 39 941 1 39 942 1 39 943 1 39 944 1 39 945 1 39 946 1 39 947 1 39 948 1 39 949 1 39 950 1 39 951 1 39 952 1 39 953 1 39 954 1 39 955 1 39 956 1 39 957 1 39 958 1 39 959 1 39 960 1 39 961 1 39 962 1 39 963 1 39 964 1 39 965 1 39 966 1 39 967 1 39 1255 1 39 1256 1 39 1257 1 39 1258 1 39 1259 1 39 1260 1 39 1261 1 39 1262 1 39 1263 1 39 1264 1 39 1265 1 39 1266 1 39 1267 1 39 1268 1 39 1269 1 39 1270 1 39 1271 1 39 1272 1 39 1273 1 39 1274 1 39 1275 1 39 1311 1 39 1312 1 39 1313 1 39 1314 1 39 1315 1 39 1316 1 39 1317 1 39 1318 1 39 1319 1 39 1320 1 39 1321 1 39 1322 1 39 1323 1 39 1324 1 39 1325 1 39 1326 1 39 1327 1 39 1328 1 39 1329 1 39 1330 1 39 1331 1 39 1332 1 39 1333 1 39 1334 1 39 1335 1 39 1336 1 39 1337 1 39 1338 1 39 1339 1 39 1340 1 39 1341 1 39 1342 1 39 1343 1 39 1344 1 39 1345 1 39 1381 1 39 1382 1 39 1383 1 39 1384 1 39 1385 1 39 1386 1 39 1387 1 39 1388 1 39 1389 1 39 1390 1 39 1391 1 39 1392 1 39 1393 1 39 1394 1 39 1395 1 39 1396 1 39 1397 1 39 1398 1 39 1399 1 39 1400 1 39 1401 1 39 1402 1 39 1403 1 39 1404 1 39 1405 1 39 1406 1 39 1407 1 39 1408 1 39 1409 1 39 1410 1 39 1411 1 39 1412 1 39 1413 1 39 1414 1 39 1415 1 39 1451 1 39 1452 1 39 1453 1 39 1454 1 39 1455 1 39 1456 1 39 1457 1 39 1458 1 39 1459 1 39 1460 1 39 1461 1 39 1462 1 39 1463 1 39 1464 1 39 1465 1 39 1466 1 39 1467 1 39 1468 1 39 1469 1 39 1470 1 39 1471 1 39 1472 1 39 1473 1 39 1474 1 39 1475 1 39 1476 1 39 1477 1 39 1478 1 39 1479 1 39 1480 1 39 1481 1 39 1482 1 39 1483 1 39 1484 1 39 1485 1 39 1717 1 39 1718 1 39 1719 1 39 1720 1 39 1721 1 39 1722 1 39 1723 1 39 1745 1 39 1746 1 39 1747 1 39 1748 1 39 1749 1 39 1750 1 39 1751 1 39 1752 1 39 1753 1 39 1754 1 39 1755 1 39 1756 1 39 1757 1 39 1758 1 39 1759 1 39 1760 1 39 1761 1 39 1762 1 39 1763 1 39 1764 1 39 1765 1 39 1801 1 39 1802 1 39 1803 1 39 1804 1 39 1805 1 39 1806 1 39 1807 1 39 1808 1 39 1809 1 39 1810 1 39 1811 1 39 1812 1 39 1813 1 39 1814 1 39 1815 1 39 1816 1 39 1817 1 39 1818 1 39 1819 1 39 1820 1 39 1821 1 39 1857 1 39 1858 1 39 1859 1 39 1860 1 39 1861 1 39 1862 1 39 1863 1 39 1864 1 39 1865 1 39 1866 1 39 1867 1 39 1868 1 39 1869 1 39 1870 1 39 1871 1 39 1872 1 39 1873 1 39 1874 1 39 1875 1 39 1876 1 39 1877 1 39 1878 1 39 1879 1 39 1880 1 39 1881 1 39 1882 1 39 1883 1 39 1884 1 39 1885 1 39 1886 1 39 1887 1 39 1888 1 39 1889 1 39 1890 1 39 1891 1 39 2179 1 39 2180 1 39 2181 1 39 2182 1 39 2183 1 39 2184 1 39 2185 1 39 2186 1 39 2187 1 39 2188 1 39 2189 1 39 2190 1 39 2191 1 39 2192 1 39 2193 1 39 2194 1 39 2195 1 39 2196 1 39 2197 1 39 2198 1 39 2199 1 39 2235 1 39 2236 1 39 2237 1 39 2238 1 39 2239 1 39 2240 1 39 2241 1 39 2242 1 39 2243 1 39 2244 1 39 2245 1 39 2246 1 39 2247 1 39 2248 1 39 2249 1 39 2250 1 39 2251 1 39 2252 1 39 2253 1 39 2254 1 39 2255 1 39 2256 1 39 2257 1 39 2258 1 39 2259 1 39 2260 1 39 2261 1 39 2262 1 39 2263 1 39 2264 1 39 2265 1 39 2266 1 39 2267 1 39 2268 1 39 2269 1 39 2305 1 39 2306 1 39 2307 1 39 2308 1 39 2309 1 39 2310 1 39 2311 1 39 2312 1 39 2313 1 39 2314 1 39 2315 1 39 2316 1 39 2317 1 39 2318 1 39 2319 1 39 2320 1 39 2321 1 39 2322 1 39 2323 1 39 2324 1 39 2325 1 39 2326 1 39 2327 1 39 2328 1 39 2329 1 39 2330 1 39 2331 1 39 2332 1 39 2333 1 39 2334 1 39 2335 1 39 2336 1 39 2337 1 39 2338 1 39 2339 1 39 2375 1 39 2376 1 39 2377 1 39 2378 1 39 2379 1 39 2380 1 39 2381 1 39 2382 1 39 2383 1 39 2384 1 39 2385 1 39 2386 1 39 2387 1 39 2388 1 39 2389 1 39 2390 1 39 2391 1 39 2392 1 39 2393 1 39 2394 1 39 2395 1 39 2396 1 39 2397 1 39 2398 1 39 2399 1 39 2400 1 39 2401 1 39 2402 1 39 2403 1 39 2404 1 39 2405 1 39 2406 1 39 2407 1 39 2408 1 39 2409 1 39 2641 1 39 2642 1 39 2643 1 39 2644 1 39 2645 1 39 2646 1 39 2647 1 39 2648 1 39 2649 1 39 2650 1 39 2651 1 39 2652 1 39 2653 1 39 2654 1 39 2655 1 39 2656 1 39 2657 1 39 2658 1 39 2659 1 39 2660 1 39 2661 1 39 2697 1 39 2698 1 39 2699 1 39 2700 1 39 2701 1 39 2702 1 39 2703 1 39 2704 1 39 2705 1 39 2706 1 39 2707 1 39 2708 1 39 2709 1 39 2710 1 39 2711 1 39 2712 1 39 2713 1 39 2714 1 39 2715 1 39 2716 1 39 2717 1 39 2718 1 39 2719 1 39 2720 1 39 2721 1 39 2722 1 39 2723 1 39 2724 1 39 2725 1 39 2726 1 39 2727 1 39 2728 1 39 2729 1 39 2730 1 39 2731 1 39 2767 1 39 2768 1 39 2769 1 39 2770 1 39 2771 1 39 2772 1 39 2773 1 39 2774 1 39 2775 1 39 2776 1 39 2777 1 39 2778 1 39 2779 1 39 2780 1 39 2781 1 39 2782 1 39 2783 1 39 2784 1 39 2785 1 39 2786 1 39 2787 1 39 2788 1 39 2789 1 39 2790 1 39 2791 1 39 2792 1 39 2793 1 39 2794 1 39 2795 1 39 2796 1 39 2797 1 39 2798 1 39 2799 1 39 2800 1 39 2801 1 39 2837 1 39 2838 1 39 2839 1 39 2840 1 39 2841 1 39 2842 1 39 2843 1 39 2844 1 39 2845 1 39 2846 1 39 2847 1 39 2848 1 39 2849 1 39 2850 1 39 2851 1 39 2852 1 39 2853 1 39 2854 1 39 2855 1 39 2856 1 39 2857 1 39 2858 1 39 2859 1 39 2860 1 39 2861 1 39 2862 1 39 2863 1 39 2864 1 39 2865 1 39 2866 1 39 2867 1 39 2868 1 39 2869 1 39 2870 1 39 2871 1 39 3103 1 39 3104 1 39 3105 1 39 3106 1 39 3107 1 39 3108 1 39 3109 1 39 3110 1 39 3111 1 39 3112 1 39 3113 1 39 3114 1 39 3115 1 39 3116 1 39 3117 1 39 3118 1 39 3119 1 39 3120 1 39 3121 1 39 3122 1 39 3123 1 39 3124 1 39 3125 1 39 3126 1 39 3127 1 39 3128 1 39 3129 1 39 3130 1 39 3131 1 39 3132 1 39 3133 1 39 3134 1 39 3135 1 39 3136 1 39 3137 1 39 3173 1 39 3174 1 39 3175 1 39 3176 1 39 3177 1 39 3178 1 39 3179 1 39 3180 1 39 3181 1 39 3182 1 39 3183 1 39 3184 1 39 3185 1 39 3186 1 39 3187 1 39 3188 1 39 3189 1 39 3190 1 39 3191 1 39 3192 1 39 3193 1 39 3194 1 39 3195 1 39 3196 1 39 3197 1 39 3198 1 39 3199 1 39 3200 1 39 3201 1 39 3202 1 39 3203 1 39 3204 1 39 3205 1 39 3206 1 39 3207 1 39 3229 1 39 3230 1 39 3231 1 39 3232 1 39 3233 1 39 3234 1 39 3235 1 39 3236 1 39 3237 1 39 3238 1 39 3239 1 39 3240 1 39 3241 1 39 3242 1 39 3243 1 39 3244 1 39 3245 1 39 3246 1 39 3247 1 39 3248 1 39 3249 1 39 3250 1 39 3251 1 39 3252 1 39 3253 1 39 3254 1 39 3255 1 39 3256 1 39 3257 1 39 3258 1 39 3259 1 39 3260 1 39 3261 1 39 3262 1 39 3263 1 39 3285 1 39 3286 1 39 3287 1 39 3288 1 39 3289 1 39 3290 1 39 3291 1 39 3292 1 39 3293 1 39 3294 1 39 3295 1 39 3296 1 39 3297 1 39 3298 1 39 3299 1 39 3300 1 39 3301 1 39 3302 1 39 3303 1 39 3304 1 39 3305 1 40 2 1 40 9 1 40 16 1 40 17 1 40 18 1 40 19 1 40 20 1 40 21 1 40 37 1 40 44 1 40 45 1 40 46 1 40 47 1 40 48 1 40 49 1 40 65 1 40 66 1 40 67 1 40 68 1 40 69 1 40 70 1 40 86 1 40 87 1 40 88 1 40 89 1 40 90 1 40 91 1 40 92 1 40 93 1 40 94 1 40 95 1 40 96 1 40 97 1 40 98 1 40 99 1 40 100 1 40 331 1 40 338 1 40 339 1 40 340 1 40 341 1 40 342 1 40 343 1 40 359 1 40 360 1 40 361 1 40 362 1 40 363 1 40 364 1 40 380 1 40 381 1 40 382 1 40 383 1 40 384 1 40 385 1 40 386 1 40 387 1 40 388 1 40 389 1 40 390 1 40 391 1 40 392 1 40 393 1 40 394 1 40 415 1 40 416 1 40 417 1 40 418 1 40 419 1 40 420 1 40 436 1 40 437 1 40 438 1 40 439 1 40 440 1 40 441 1 40 442 1 40 443 1 40 444 1 40 445 1 40 446 1 40 447 1 40 448 1 40 449 1 40 450 1 40 471 1 40 472 1 40 473 1 40 474 1 40 475 1 40 476 1 40 477 1 40 478 1 40 479 1 40 480 1 40 481 1 40 482 1 40 483 1 40 484 1 40 485 1 40 506 1 40 507 1 40 508 1 40 509 1 40 510 1 40 511 1 40 512 1 40 513 1 40 514 1 40 515 1 40 516 1 40 517 1 40 518 1 40 519 1 40 520 1 40 521 1 40 522 1 40 523 1 40 524 1 40 525 1 40 793 1 40 800 1 40 801 1 40 802 1 40 803 1 40 804 1 40 805 1 40 821 1 40 822 1 40 823 1 40 824 1 40 825 1 40 826 1 40 842 1 40 843 1 40 844 1 40 845 1 40 846 1 40 847 1 40 848 1 40 849 1 40 850 1 40 851 1 40 852 1 40 853 1 40 854 1 40 855 1 40 856 1 40 877 1 40 878 1 40 879 1 40 880 1 40 881 1 40 882 1 40 898 1 40 899 1 40 900 1 40 901 1 40 902 1 40 903 1 40 904 1 40 905 1 40 906 1 40 907 1 40 908 1 40 909 1 40 910 1 40 911 1 40 912 1 40 933 1 40 934 1 40 935 1 40 936 1 40 937 1 40 938 1 40 939 1 40 940 1 40 941 1 40 942 1 40 943 1 40 944 1 40 945 1 40 946 1 40 947 1 40 968 1 40 969 1 40 970 1 40 971 1 40 972 1 40 973 1 40 974 1 40 975 1 40 976 1 40 977 1 40 978 1 40 979 1 40 980 1 40 981 1 40 982 1 40 983 1 40 984 1 40 985 1 40 986 1 40 987 1 40 1255 1 40 1256 1 40 1257 1 40 1258 1 40 1259 1 40 1260 1 40 1276 1 40 1277 1 40 1278 1 40 1279 1 40 1280 1 40 1281 1 40 1282 1 40 1283 1 40 1284 1 40 1285 1 40 1286 1 40 1287 1 40 1288 1 40 1289 1 40 1290 1 40 1311 1 40 1312 1 40 1313 1 40 1314 1 40 1315 1 40 1316 1 40 1317 1 40 1318 1 40 1319 1 40 1320 1 40 1321 1 40 1322 1 40 1323 1 40 1324 1 40 1325 1 40 1346 1 40 1347 1 40 1348 1 40 1349 1 40 1350 1 40 1351 1 40 1352 1 40 1353 1 40 1354 1 40 1355 1 40 1356 1 40 1357 1 40 1358 1 40 1359 1 40 1360 1 40 1361 1 40 1362 1 40 1363 1 40 1364 1 40 1365 1 40 1381 1 40 1382 1 40 1383 1 40 1384 1 40 1385 1 40 1386 1 40 1387 1 40 1388 1 40 1389 1 40 1390 1 40 1391 1 40 1392 1 40 1393 1 40 1394 1 40 1395 1 40 1416 1 40 1417 1 40 1418 1 40 1419 1 40 1420 1 40 1421 1 40 1422 1 40 1423 1 40 1424 1 40 1425 1 40 1426 1 40 1427 1 40 1428 1 40 1429 1 40 1430 1 40 1431 1 40 1432 1 40 1433 1 40 1434 1 40 1435 1 40 1451 1 40 1452 1 40 1453 1 40 1454 1 40 1455 1 40 1456 1 40 1457 1 40 1458 1 40 1459 1 40 1460 1 40 1461 1 40 1462 1 40 1463 1 40 1464 1 40 1465 1 40 1466 1 40 1467 1 40 1468 1 40 1469 1 40 1470 1 40 1486 1 40 1487 1 40 1488 1 40 1489 1 40 1490 1 40 1491 1 40 1492 1 40 1493 1 40 1494 1 40 1495 1 40 1496 1 40 1497 1 40 1498 1 40 1499 1 40 1500 1 40 1717 1 40 1724 1 40 1725 1 40 1726 1 40 1727 1 40 1728 1 40 1729 1 40 1745 1 40 1746 1 40 1747 1 40 1748 1 40 1749 1 40 1750 1 40 1766 1 40 1767 1 40 1768 1 40 1769 1 40 1770 1 40 1771 1 40 1772 1 40 1773 1 40 1774 1 40 1775 1 40 1776 1 40 1777 1 40 1778 1 40 1779 1 40 1780 1 40 1801 1 40 1802 1 40 1803 1 40 1804 1 40 1805 1 40 1806 1 40 1822 1 40 1823 1 40 1824 1 40 1825 1 40 1826 1 40 1827 1 40 1828 1 40 1829 1 40 1830 1 40 1831 1 40 1832 1 40 1833 1 40 1834 1 40 1835 1 40 1836 1 40 1857 1 40 1858 1 40 1859 1 40 1860 1 40 1861 1 40 1862 1 40 1863 1 40 1864 1 40 1865 1 40 1866 1 40 1867 1 40 1868 1 40 1869 1 40 1870 1 40 1871 1 40 1892 1 40 1893 1 40 1894 1 40 1895 1 40 1896 1 40 1897 1 40 1898 1 40 1899 1 40 1900 1 40 1901 1 40 1902 1 40 1903 1 40 1904 1 40 1905 1 40 1906 1 40 1907 1 40 1908 1 40 1909 1 40 1910 1 40 1911 1 40 2179 1 40 2180 1 40 2181 1 40 2182 1 40 2183 1 40 2184 1 40 2200 1 40 2201 1 40 2202 1 40 2203 1 40 2204 1 40 2205 1 40 2206 1 40 2207 1 40 2208 1 40 2209 1 40 2210 1 40 2211 1 40 2212 1 40 2213 1 40 2214 1 40 2235 1 40 2236 1 40 2237 1 40 2238 1 40 2239 1 40 2240 1 40 2241 1 40 2242 1 40 2243 1 40 2244 1 40 2245 1 40 2246 1 40 2247 1 40 2248 1 40 2249 1 40 2270 1 40 2271 1 40 2272 1 40 2273 1 40 2274 1 40 2275 1 40 2276 1 40 2277 1 40 2278 1 40 2279 1 40 2280 1 40 2281 1 40 2282 1 40 2283 1 40 2284 1 40 2285 1 40 2286 1 40 2287 1 40 2288 1 40 2289 1 40 2305 1 40 2306 1 40 2307 1 40 2308 1 40 2309 1 40 2310 1 40 2311 1 40 2312 1 40 2313 1 40 2314 1 40 2315 1 40 2316 1 40 2317 1 40 2318 1 40 2319 1 40 2340 1 40 2341 1 40 2342 1 40 2343 1 40 2344 1 40 2345 1 40 2346 1 40 2347 1 40 2348 1 40 2349 1 40 2350 1 40 2351 1 40 2352 1 40 2353 1 40 2354 1 40 2355 1 40 2356 1 40 2357 1 40 2358 1 40 2359 1 40 2375 1 40 2376 1 40 2377 1 40 2378 1 40 2379 1 40 2380 1 40 2381 1 40 2382 1 40 2383 1 40 2384 1 40 2385 1 40 2386 1 40 2387 1 40 2388 1 40 2389 1 40 2390 1 40 2391 1 40 2392 1 40 2393 1 40 2394 1 40 2410 1 40 2411 1 40 2412 1 40 2413 1 40 2414 1 40 2415 1 40 2416 1 40 2417 1 40 2418 1 40 2419 1 40 2420 1 40 2421 1 40 2422 1 40 2423 1 40 2424 1 40 2641 1 40 2642 1 40 2643 1 40 2644 1 40 2645 1 40 2646 1 40 2662 1 40 2663 1 40 2664 1 40 2665 1 40 2666 1 40 2667 1 40 2668 1 40 2669 1 40 2670 1 40 2671 1 40 2672 1 40 2673 1 40 2674 1 40 2675 1 40 2676 1 40 2697 1 40 2698 1 40 2699 1 40 2700 1 40 2701 1 40 2702 1 40 2703 1 40 2704 1 40 2705 1 40 2706 1 40 2707 1 40 2708 1 40 2709 1 40 2710 1 40 2711 1 40 2732 1 40 2733 1 40 2734 1 40 2735 1 40 2736 1 40 2737 1 40 2738 1 40 2739 1 40 2740 1 40 2741 1 40 2742 1 40 2743 1 40 2744 1 40 2745 1 40 2746 1 40 2747 1 40 2748 1 40 2749 1 40 2750 1 40 2751 1 40 2767 1 40 2768 1 40 2769 1 40 2770 1 40 2771 1 40 2772 1 40 2773 1 40 2774 1 40 2775 1 40 2776 1 40 2777 1 40 2778 1 40 2779 1 40 2780 1 40 2781 1 40 2802 1 40 2803 1 40 2804 1 40 2805 1 40 2806 1 40 2807 1 40 2808 1 40 2809 1 40 2810 1 40 2811 1 40 2812 1 40 2813 1 40 2814 1 40 2815 1 40 2816 1 40 2817 1 40 2818 1 40 2819 1 40 2820 1 40 2821 1 40 2837 1 40 2838 1 40 2839 1 40 2840 1 40 2841 1 40 2842 1 40 2843 1 40 2844 1 40 2845 1 40 2846 1 40 2847 1 40 2848 1 40 2849 1 40 2850 1 40 2851 1 40 2852 1 40 2853 1 40 2854 1 40 2855 1 40 2856 1 40 2872 1 40 2873 1 40 2874 1 40 2875 1 40 2876 1 40 2877 1 40 2878 1 40 2879 1 40 2880 1 40 2881 1 40 2882 1 40 2883 1 40 2884 1 40 2885 1 40 2886 1 40 3103 1 40 3104 1 40 3105 1 40 3106 1 40 3107 1 40 3108 1 40 3109 1 40 3110 1 40 3111 1 40 3112 1 40 3113 1 40 3114 1 40 3115 1 40 3116 1 40 3117 1 40 3138 1 40 3139 1 40 3140 1 40 3141 1 40 3142 1 40 3143 1 40 3144 1 40 3145 1 40 3146 1 40 3147 1 40 3148 1 40 3149 1 40 3150 1 40 3151 1 40 3152 1 40 3153 1 40 3154 1 40 3155 1 40 3156 1 40 3157 1 40 3173 1 40 3174 1 40 3175 1 40 3176 1 40 3177 1 40 3178 1 40 3179 1 40 3180 1 40 3181 1 40 3182 1 40 3183 1 40 3184 1 40 3185 1 40 3186 1 40 3187 1 40 3188 1 40 3189 1 40 3190 1 40 3191 1 40 3192 1 40 3208 1 40 3209 1 40 3210 1 40 3211 1 40 3212 1 40 3213 1 40 3214 1 40 3215 1 40 3216 1 40 3217 1 40 3218 1 40 3219 1 40 3220 1 40 3221 1 40 3222 1 40 3229 1 40 3230 1 40 3231 1 40 3232 1 40 3233 1 40 3234 1 40 3235 1 40 3236 1 40 3237 1 40 3238 1 40 3239 1 40 3240 1 40 3241 1 40 3242 1 40 3243 1 40 3244 1 40 3245 1 40 3246 1 40 3247 1 40 3248 1 40 3264 1 40 3265 1 40 3266 1 40 3267 1 40 3268 1 40 3269 1 40 3270 1 40 3271 1 40 3272 1 40 3273 1 40 3274 1 40 3275 1 40 3276 1 40 3277 1 40 3278 1 40 3285 1 40 3286 1 40 3287 1 40 3288 1 40 3289 1 40 3290 1 40 3291 1 40 3292 1 40 3293 1 40 3294 1 40 3295 1 40 3296 1 40 3297 1 40 3298 1 40 3299 1 40 3306 1 40 3307 1 40 3308 1 40 3309 1 40 3310 1 40 3311 1 41 3 1 41 10 1 41 16 1 41 22 1 41 23 1 41 24 1 41 25 1 41 26 1 41 38 1 41 44 1 41 50 1 41 51 1 41 52 1 41 53 1 41 54 1 41 65 1 41 71 1 41 72 1 41 73 1 41 74 1 41 75 1 41 86 1 41 87 1 41 88 1 41 89 1 41 90 1 41 101 1 41 102 1 41 103 1 41 104 1 41 105 1 41 106 1 41 107 1 41 108 1 41 109 1 41 110 1 41 332 1 41 338 1 41 344 1 41 345 1 41 346 1 41 347 1 41 348 1 41 359 1 41 365 1 41 366 1 41 367 1 41 368 1 41 369 1 41 380 1 41 381 1 41 382 1 41 383 1 41 384 1 41 395 1 41 396 1 41 397 1 41 398 1 41 399 1 41 400 1 41 401 1 41 402 1 41 403 1 41 404 1 41 415 1 41 421 1 41 422 1 41 423 1 41 424 1 41 425 1 41 436 1 41 437 1 41 438 1 41 439 1 41 440 1 41 451 1 41 452 1 41 453 1 41 454 1 41 455 1 41 456 1 41 457 1 41 458 1 41 459 1 41 460 1 41 471 1 41 472 1 41 473 1 41 474 1 41 475 1 41 486 1 41 487 1 41 488 1 41 489 1 41 490 1 41 491 1 41 492 1 41 493 1 41 494 1 41 495 1 41 506 1 41 507 1 41 508 1 41 509 1 41 510 1 41 511 1 41 512 1 41 513 1 41 514 1 41 515 1 41 526 1 41 527 1 41 528 1 41 529 1 41 530 1 41 531 1 41 532 1 41 533 1 41 534 1 41 535 1 41 794 1 41 800 1 41 806 1 41 807 1 41 808 1 41 809 1 41 810 1 41 821 1 41 827 1 41 828 1 41 829 1 41 830 1 41 831 1 41 842 1 41 843 1 41 844 1 41 845 1 41 846 1 41 857 1 41 858 1 41 859 1 41 860 1 41 861 1 41 862 1 41 863 1 41 864 1 41 865 1 41 866 1 41 877 1 41 883 1 41 884 1 41 885 1 41 886 1 41 887 1 41 898 1 41 899 1 41 900 1 41 901 1 41 902 1 41 913 1 41 914 1 41 915 1 41 916 1 41 917 1 41 918 1 41 919 1 41 920 1 41 921 1 41 922 1 41 933 1 41 934 1 41 935 1 41 936 1 41 937 1 41 948 1 41 949 1 41 950 1 41 951 1 41 952 1 41 953 1 41 954 1 41 955 1 41 956 1 41 957 1 41 968 1 41 969 1 41 970 1 41 971 1 41 972 1 41 973 1 41 974 1 41 975 1 41 976 1 41 977 1 41 988 1 41 989 1 41 990 1 41 991 1 41 992 1 41 993 1 41 994 1 41 995 1 41 996 1 41 997 1 41 1255 1 41 1261 1 41 1262 1 41 1263 1 41 1264 1 41 1265 1 41 1276 1 41 1277 1 41 1278 1 41 1279 1 41 1280 1 41 1291 1 41 1292 1 41 1293 1 41 1294 1 41 1295 1 41 1296 1 41 1297 1 41 1298 1 41 1299 1 41 1300 1 41 1311 1 41 1312 1 41 1313 1 41 1314 1 41 1315 1 41 1326 1 41 1327 1 41 1328 1 41 1329 1 41 1330 1 41 1331 1 41 1332 1 41 1333 1 41 1334 1 41 1335 1 41 1346 1 41 1347 1 41 1348 1 41 1349 1 41 1350 1 41 1351 1 41 1352 1 41 1353 1 41 1354 1 41 1355 1 41 1366 1 41 1367 1 41 1368 1 41 1369 1 41 1370 1 41 1371 1 41 1372 1 41 1373 1 41 1374 1 41 1375 1 41 1381 1 41 1382 1 41 1383 1 41 1384 1 41 1385 1 41 1396 1 41 1397 1 41 1398 1 41 1399 1 41 1400 1 41 1401 1 41 1402 1 41 1403 1 41 1404 1 41 1405 1 41 1416 1 41 1417 1 41 1418 1 41 1419 1 41 1420 1 41 1421 1 41 1422 1 41 1423 1 41 1424 1 41 1425 1 41 1436 1 41 1437 1 41 1438 1 41 1439 1 41 1440 1 41 1441 1 41 1442 1 41 1443 1 41 1444 1 41 1445 1 41 1451 1 41 1452 1 41 1453 1 41 1454 1 41 1455 1 41 1456 1 41 1457 1 41 1458 1 41 1459 1 41 1460 1 41 1471 1 41 1472 1 41 1473 1 41 1474 1 41 1475 1 41 1476 1 41 1477 1 41 1478 1 41 1479 1 41 1480 1 41 1486 1 41 1487 1 41 1488 1 41 1489 1 41 1490 1 41 1491 1 41 1492 1 41 1493 1 41 1494 1 41 1495 1 41 1501 1 41 1502 1 41 1503 1 41 1504 1 41 1505 1 41 1718 1 41 1724 1 41 1730 1 41 1731 1 41 1732 1 41 1733 1 41 1734 1 41 1745 1 41 1751 1 41 1752 1 41 1753 1 41 1754 1 41 1755 1 41 1766 1 41 1767 1 41 1768 1 41 1769 1 41 1770 1 41 1781 1 41 1782 1 41 1783 1 41 1784 1 41 1785 1 41 1786 1 41 1787 1 41 1788 1 41 1789 1 41 1790 1 41 1801 1 41 1807 1 41 1808 1 41 1809 1 41 1810 1 41 1811 1 41 1822 1 41 1823 1 41 1824 1 41 1825 1 41 1826 1 41 1837 1 41 1838 1 41 1839 1 41 1840 1 41 1841 1 41 1842 1 41 1843 1 41 1844 1 41 1845 1 41 1846 1 41 1857 1 41 1858 1 41 1859 1 41 1860 1 41 1861 1 41 1872 1 41 1873 1 41 1874 1 41 1875 1 41 1876 1 41 1877 1 41 1878 1 41 1879 1 41 1880 1 41 1881 1 41 1892 1 41 1893 1 41 1894 1 41 1895 1 41 1896 1 41 1897 1 41 1898 1 41 1899 1 41 1900 1 41 1901 1 41 1912 1 41 1913 1 41 1914 1 41 1915 1 41 1916 1 41 1917 1 41 1918 1 41 1919 1 41 1920 1 41 1921 1 41 2179 1 41 2185 1 41 2186 1 41 2187 1 41 2188 1 41 2189 1 41 2200 1 41 2201 1 41 2202 1 41 2203 1 41 2204 1 41 2215 1 41 2216 1 41 2217 1 41 2218 1 41 2219 1 41 2220 1 41 2221 1 41 2222 1 41 2223 1 41 2224 1 41 2235 1 41 2236 1 41 2237 1 41 2238 1 41 2239 1 41 2250 1 41 2251 1 41 2252 1 41 2253 1 41 2254 1 41 2255 1 41 2256 1 41 2257 1 41 2258 1 41 2259 1 41 2270 1 41 2271 1 41 2272 1 41 2273 1 41 2274 1 41 2275 1 41 2276 1 41 2277 1 41 2278 1 41 2279 1 41 2290 1 41 2291 1 41 2292 1 41 2293 1 41 2294 1 41 2295 1 41 2296 1 41 2297 1 41 2298 1 41 2299 1 41 2305 1 41 2306 1 41 2307 1 41 2308 1 41 2309 1 41 2320 1 41 2321 1 41 2322 1 41 2323 1 41 2324 1 41 2325 1 41 2326 1 41 2327 1 41 2328 1 41 2329 1 41 2340 1 41 2341 1 41 2342 1 41 2343 1 41 2344 1 41 2345 1 41 2346 1 41 2347 1 41 2348 1 41 2349 1 41 2360 1 41 2361 1 41 2362 1 41 2363 1 41 2364 1 41 2365 1 41 2366 1 41 2367 1 41 2368 1 41 2369 1 41 2375 1 41 2376 1 41 2377 1 41 2378 1 41 2379 1 41 2380 1 41 2381 1 41 2382 1 41 2383 1 41 2384 1 41 2395 1 41 2396 1 41 2397 1 41 2398 1 41 2399 1 41 2400 1 41 2401 1 41 2402 1 41 2403 1 41 2404 1 41 2410 1 41 2411 1 41 2412 1 41 2413 1 41 2414 1 41 2415 1 41 2416 1 41 2417 1 41 2418 1 41 2419 1 41 2425 1 41 2426 1 41 2427 1 41 2428 1 41 2429 1 41 2641 1 41 2647 1 41 2648 1 41 2649 1 41 2650 1 41 2651 1 41 2662 1 41 2663 1 41 2664 1 41 2665 1 41 2666 1 41 2677 1 41 2678 1 41 2679 1 41 2680 1 41 2681 1 41 2682 1 41 2683 1 41 2684 1 41 2685 1 41 2686 1 41 2697 1 41 2698 1 41 2699 1 41 2700 1 41 2701 1 41 2712 1 41 2713 1 41 2714 1 41 2715 1 41 2716 1 41 2717 1 41 2718 1 41 2719 1 41 2720 1 41 2721 1 41 2732 1 41 2733 1 41 2734 1 41 2735 1 41 2736 1 41 2737 1 41 2738 1 41 2739 1 41 2740 1 41 2741 1 41 2752 1 41 2753 1 41 2754 1 41 2755 1 41 2756 1 41 2757 1 41 2758 1 41 2759 1 41 2760 1 41 2761 1 41 2767 1 41 2768 1 41 2769 1 41 2770 1 41 2771 1 41 2782 1 41 2783 1 41 2784 1 41 2785 1 41 2786 1 41 2787 1 41 2788 1 41 2789 1 41 2790 1 41 2791 1 41 2802 1 41 2803 1 41 2804 1 41 2805 1 41 2806 1 41 2807 1 41 2808 1 41 2809 1 41 2810 1 41 2811 1 41 2822 1 41 2823 1 41 2824 1 41 2825 1 41 2826 1 41 2827 1 41 2828 1 41 2829 1 41 2830 1 41 2831 1 41 2837 1 41 2838 1 41 2839 1 41 2840 1 41 2841 1 41 2842 1 41 2843 1 41 2844 1 41 2845 1 41 2846 1 41 2857 1 41 2858 1 41 2859 1 41 2860 1 41 2861 1 41 2862 1 41 2863 1 41 2864 1 41 2865 1 41 2866 1 41 2872 1 41 2873 1 41 2874 1 41 2875 1 41 2876 1 41 2877 1 41 2878 1 41 2879 1 41 2880 1 41 2881 1 41 2887 1 41 2888 1 41 2889 1 41 2890 1 41 2891 1 41 3103 1 41 3104 1 41 3105 1 41 3106 1 41 3107 1 41 3118 1 41 3119 1 41 3120 1 41 3121 1 41 3122 1 41 3123 1 41 3124 1 41 3125 1 41 3126 1 41 3127 1 41 3138 1 41 3139 1 41 3140 1 41 3141 1 41 3142 1 41 3143 1 41 3144 1 41 3145 1 41 3146 1 41 3147 1 41 3158 1 41 3159 1 41 3160 1 41 3161 1 41 3162 1 41 3163 1 41 3164 1 41 3165 1 41 3166 1 41 3167 1 41 3173 1 41 3174 1 41 3175 1 41 3176 1 41 3177 1 41 3178 1 41 3179 1 41 3180 1 41 3181 1 41 3182 1 41 3193 1 41 3194 1 41 3195 1 41 3196 1 41 3197 1 41 3198 1 41 3199 1 41 3200 1 41 3201 1 41 3202 1 41 3208 1 41 3209 1 41 3210 1 41 3211 1 41 3212 1 41 3213 1 41 3214 1 41 3215 1 41 3216 1 41 3217 1 41 3223 1 41 3224 1 41 3225 1 41 3226 1 41 3227 1 41 3229 1 41 3230 1 41 3231 1 41 3232 1 41 3233 1 41 3234 1 41 3235 1 41 3236 1 41 3237 1 41 3238 1 41 3249 1 41 3250 1 41 3251 1 41 3252 1 41 3253 1 41 3254 1 41 3255 1 41 3256 1 41 3257 1 41 3258 1 41 3264 1 41 3265 1 41 3266 1 41 3267 1 41 3268 1 41 3269 1 41 3270 1 41 3271 1 41 3272 1 41 3273 1 41 3279 1 41 3280 1 41 3281 1 41 3282 1 41 3283 1 41 3285 1 41 3286 1 41 3287 1 41 3288 1 41 3289 1 41 3290 1 41 3291 1 41 3292 1 41 3293 1 41 3294 1 41 3300 1 41 3301 1 41 3302 1 41 3303 1 41 3304 1 41 3306 1 41 3307 1 41 3308 1 41 3309 1 41 3310 1 41 3312 1 42 4 1 42 11 1 42 17 1 42 22 1 42 27 1 42 28 1 42 29 1 42 30 1 42 39 1 42 45 1 42 50 1 42 55 1 42 56 1 42 57 1 42 58 1 42 66 1 42 71 1 42 76 1 42 77 1 42 78 1 42 79 1 42 86 1 42 91 1 42 92 1 42 93 1 42 94 1 42 101 1 42 102 1 42 103 1 42 104 1 42 111 1 42 112 1 42 113 1 42 114 1 42 115 1 42 116 1 42 333 1 42 339 1 42 344 1 42 349 1 42 350 1 42 351 1 42 352 1 42 360 1 42 365 1 42 370 1 42 371 1 42 372 1 42 373 1 42 380 1 42 385 1 42 386 1 42 387 1 42 388 1 42 395 1 42 396 1 42 397 1 42 398 1 42 405 1 42 406 1 42 407 1 42 408 1 42 409 1 42 410 1 42 416 1 42 421 1 42 426 1 42 427 1 42 428 1 42 429 1 42 436 1 42 441 1 42 442 1 42 443 1 42 444 1 42 451 1 42 452 1 42 453 1 42 454 1 42 461 1 42 462 1 42 463 1 42 464 1 42 465 1 42 466 1 42 471 1 42 476 1 42 477 1 42 478 1 42 479 1 42 486 1 42 487 1 42 488 1 42 489 1 42 496 1 42 497 1 42 498 1 42 499 1 42 500 1 42 501 1 42 506 1 42 507 1 42 508 1 42 509 1 42 516 1 42 517 1 42 518 1 42 519 1 42 520 1 42 521 1 42 526 1 42 527 1 42 528 1 42 529 1 42 530 1 42 531 1 42 536 1 42 537 1 42 538 1 42 539 1 42 795 1 42 801 1 42 806 1 42 811 1 42 812 1 42 813 1 42 814 1 42 822 1 42 827 1 42 832 1 42 833 1 42 834 1 42 835 1 42 842 1 42 847 1 42 848 1 42 849 1 42 850 1 42 857 1 42 858 1 42 859 1 42 860 1 42 867 1 42 868 1 42 869 1 42 870 1 42 871 1 42 872 1 42 878 1 42 883 1 42 888 1 42 889 1 42 890 1 42 891 1 42 898 1 42 903 1 42 904 1 42 905 1 42 906 1 42 913 1 42 914 1 42 915 1 42 916 1 42 923 1 42 924 1 42 925 1 42 926 1 42 927 1 42 928 1 42 933 1 42 938 1 42 939 1 42 940 1 42 941 1 42 948 1 42 949 1 42 950 1 42 951 1 42 958 1 42 959 1 42 960 1 42 961 1 42 962 1 42 963 1 42 968 1 42 969 1 42 970 1 42 971 1 42 978 1 42 979 1 42 980 1 42 981 1 42 982 1 42 983 1 42 988 1 42 989 1 42 990 1 42 991 1 42 992 1 42 993 1 42 998 1 42 999 1 42 1000 1 42 1001 1 42 1256 1 42 1261 1 42 1266 1 42 1267 1 42 1268 1 42 1269 1 42 1276 1 42 1281 1 42 1282 1 42 1283 1 42 1284 1 42 1291 1 42 1292 1 42 1293 1 42 1294 1 42 1301 1 42 1302 1 42 1303 1 42 1304 1 42 1305 1 42 1306 1 42 1311 1 42 1316 1 42 1317 1 42 1318 1 42 1319 1 42 1326 1 42 1327 1 42 1328 1 42 1329 1 42 1336 1 42 1337 1 42 1338 1 42 1339 1 42 1340 1 42 1341 1 42 1346 1 42 1347 1 42 1348 1 42 1349 1 42 1356 1 42 1357 1 42 1358 1 42 1359 1 42 1360 1 42 1361 1 42 1366 1 42 1367 1 42 1368 1 42 1369 1 42 1370 1 42 1371 1 42 1376 1 42 1377 1 42 1378 1 42 1379 1 42 1381 1 42 1386 1 42 1387 1 42 1388 1 42 1389 1 42 1396 1 42 1397 1 42 1398 1 42 1399 1 42 1406 1 42 1407 1 42 1408 1 42 1409 1 42 1410 1 42 1411 1 42 1416 1 42 1417 1 42 1418 1 42 1419 1 42 1426 1 42 1427 1 42 1428 1 42 1429 1 42 1430 1 42 1431 1 42 1436 1 42 1437 1 42 1438 1 42 1439 1 42 1440 1 42 1441 1 42 1446 1 42 1447 1 42 1448 1 42 1449 1 42 1451 1 42 1452 1 42 1453 1 42 1454 1 42 1461 1 42 1462 1 42 1463 1 42 1464 1 42 1465 1 42 1466 1 42 1471 1 42 1472 1 42 1473 1 42 1474 1 42 1475 1 42 1476 1 42 1481 1 42 1482 1 42 1483 1 42 1484 1 42 1486 1 42 1487 1 42 1488 1 42 1489 1 42 1490 1 42 1491 1 42 1496 1 42 1497 1 42 1498 1 42 1499 1 42 1501 1 42 1502 1 42 1503 1 42 1504 1 42 1506 1 42 1719 1 42 1725 1 42 1730 1 42 1735 1 42 1736 1 42 1737 1 42 1738 1 42 1746 1 42 1751 1 42 1756 1 42 1757 1 42 1758 1 42 1759 1 42 1766 1 42 1771 1 42 1772 1 42 1773 1 42 1774 1 42 1781 1 42 1782 1 42 1783 1 42 1784 1 42 1791 1 42 1792 1 42 1793 1 42 1794 1 42 1795 1 42 1796 1 42 1802 1 42 1807 1 42 1812 1 42 1813 1 42 1814 1 42 1815 1 42 1822 1 42 1827 1 42 1828 1 42 1829 1 42 1830 1 42 1837 1 42 1838 1 42 1839 1 42 1840 1 42 1847 1 42 1848 1 42 1849 1 42 1850 1 42 1851 1 42 1852 1 42 1857 1 42 1862 1 42 1863 1 42 1864 1 42 1865 1 42 1872 1 42 1873 1 42 1874 1 42 1875 1 42 1882 1 42 1883 1 42 1884 1 42 1885 1 42 1886 1 42 1887 1 42 1892 1 42 1893 1 42 1894 1 42 1895 1 42 1902 1 42 1903 1 42 1904 1 42 1905 1 42 1906 1 42 1907 1 42 1912 1 42 1913 1 42 1914 1 42 1915 1 42 1916 1 42 1917 1 42 1922 1 42 1923 1 42 1924 1 42 1925 1 42 2180 1 42 2185 1 42 2190 1 42 2191 1 42 2192 1 42 2193 1 42 2200 1 42 2205 1 42 2206 1 42 2207 1 42 2208 1 42 2215 1 42 2216 1 42 2217 1 42 2218 1 42 2225 1 42 2226 1 42 2227 1 42 2228 1 42 2229 1 42 2230 1 42 2235 1 42 2240 1 42 2241 1 42 2242 1 42 2243 1 42 2250 1 42 2251 1 42 2252 1 42 2253 1 42 2260 1 42 2261 1 42 2262 1 42 2263 1 42 2264 1 42 2265 1 42 2270 1 42 2271 1 42 2272 1 42 2273 1 42 2280 1 42 2281 1 42 2282 1 42 2283 1 42 2284 1 42 2285 1 42 2290 1 42 2291 1 42 2292 1 42 2293 1 42 2294 1 42 2295 1 42 2300 1 42 2301 1 42 2302 1 42 2303 1 42 2305 1 42 2310 1 42 2311 1 42 2312 1 42 2313 1 42 2320 1 42 2321 1 42 2322 1 42 2323 1 42 2330 1 42 2331 1 42 2332 1 42 2333 1 42 2334 1 42 2335 1 42 2340 1 42 2341 1 42 2342 1 42 2343 1 42 2350 1 42 2351 1 42 2352 1 42 2353 1 42 2354 1 42 2355 1 42 2360 1 42 2361 1 42 2362 1 42 2363 1 42 2364 1 42 2365 1 42 2370 1 42 2371 1 42 2372 1 42 2373 1 42 2375 1 42 2376 1 42 2377 1 42 2378 1 42 2385 1 42 2386 1 42 2387 1 42 2388 1 42 2389 1 42 2390 1 42 2395 1 42 2396 1 42 2397 1 42 2398 1 42 2399 1 42 2400 1 42 2405 1 42 2406 1 42 2407 1 42 2408 1 42 2410 1 42 2411 1 42 2412 1 42 2413 1 42 2414 1 42 2415 1 42 2420 1 42 2421 1 42 2422 1 42 2423 1 42 2425 1 42 2426 1 42 2427 1 42 2428 1 42 2430 1 42 2642 1 42 2647 1 42 2652 1 42 2653 1 42 2654 1 42 2655 1 42 2662 1 42 2667 1 42 2668 1 42 2669 1 42 2670 1 42 2677 1 42 2678 1 42 2679 1 42 2680 1 42 2687 1 42 2688 1 42 2689 1 42 2690 1 42 2691 1 42 2692 1 42 2697 1 42 2702 1 42 2703 1 42 2704 1 42 2705 1 42 2712 1 42 2713 1 42 2714 1 42 2715 1 42 2722 1 42 2723 1 42 2724 1 42 2725 1 42 2726 1 42 2727 1 42 2732 1 42 2733 1 42 2734 1 42 2735 1 42 2742 1 42 2743 1 42 2744 1 42 2745 1 42 2746 1 42 2747 1 42 2752 1 42 2753 1 42 2754 1 42 2755 1 42 2756 1 42 2757 1 42 2762 1 42 2763 1 42 2764 1 42 2765 1 42 2767 1 42 2772 1 42 2773 1 42 2774 1 42 2775 1 42 2782 1 42 2783 1 42 2784 1 42 2785 1 42 2792 1 42 2793 1 42 2794 1 42 2795 1 42 2796 1 42 2797 1 42 2802 1 42 2803 1 42 2804 1 42 2805 1 42 2812 1 42 2813 1 42 2814 1 42 2815 1 42 2816 1 42 2817 1 42 2822 1 42 2823 1 42 2824 1 42 2825 1 42 2826 1 42 2827 1 42 2832 1 42 2833 1 42 2834 1 42 2835 1 42 2837 1 42 2838 1 42 2839 1 42 2840 1 42 2847 1 42 2848 1 42 2849 1 42 2850 1 42 2851 1 42 2852 1 42 2857 1 42 2858 1 42 2859 1 42 2860 1 42 2861 1 42 2862 1 42 2867 1 42 2868 1 42 2869 1 42 2870 1 42 2872 1 42 2873 1 42 2874 1 42 2875 1 42 2876 1 42 2877 1 42 2882 1 42 2883 1 42 2884 1 42 2885 1 42 2887 1 42 2888 1 42 2889 1 42 2890 1 42 2892 1 42 3103 1 42 3108 1 42 3109 1 42 3110 1 42 3111 1 42 3118 1 42 3119 1 42 3120 1 42 3121 1 42 3128 1 42 3129 1 42 3130 1 42 3131 1 42 3132 1 42 3133 1 42 3138 1 42 3139 1 42 3140 1 42 3141 1 42 3148 1 42 3149 1 42 3150 1 42 3151 1 42 3152 1 42 3153 1 42 3158 1 42 3159 1 42 3160 1 42 3161 1 42 3162 1 42 3163 1 42 3168 1 42 3169 1 42 3170 1 42 3171 1 42 3173 1 42 3174 1 42 3175 1 42 3176 1 42 3183 1 42 3184 1 42 3185 1 42 3186 1 42 3187 1 42 3188 1 42 3193 1 42 3194 1 42 3195 1 42 3196 1 42 3197 1 42 3198 1 42 3203 1 42 3204 1 42 3205 1 42 3206 1 42 3208 1 42 3209 1 42 3210 1 42 3211 1 42 3212 1 42 3213 1 42 3218 1 42 3219 1 42 3220 1 42 3221 1 42 3223 1 42 3224 1 42 3225 1 42 3226 1 42 3228 1 42 3229 1 42 3230 1 42 3231 1 42 3232 1 42 3239 1 42 3240 1 42 3241 1 42 3242 1 42 3243 1 42 3244 1 42 3249 1 42 3250 1 42 3251 1 42 3252 1 42 3253 1 42 3254 1 42 3259 1 42 3260 1 42 3261 1 42 3262 1 42 3264 1 42 3265 1 42 3266 1 42 3267 1 42 3268 1 42 3269 1 42 3274 1 42 3275 1 42 3276 1 42 3277 1 42 3279 1 42 3280 1 42 3281 1 42 3282 1 42 3284 1 42 3285 1 42 3286 1 42 3287 1 42 3288 1 42 3289 1 42 3290 1 42 3295 1 42 3296 1 42 3297 1 42 3298 1 42 3300 1 42 3301 1 42 3302 1 42 3303 1 42 3305 1 42 3306 1 42 3307 1 42 3308 1 42 3309 1 42 3311 1 42 3312 1 43 5 1 43 12 1 43 18 1 43 23 1 43 27 1 43 31 1 43 32 1 43 33 1 43 40 1 43 46 1 43 51 1 43 55 1 43 59 1 43 60 1 43 61 1 43 67 1 43 72 1 43 76 1 43 80 1 43 81 1 43 82 1 43 87 1 43 91 1 43 95 1 43 96 1 43 97 1 43 101 1 43 105 1 43 106 1 43 107 1 43 111 1 43 112 1 43 113 1 43 117 1 43 118 1 43 119 1 43 334 1 43 340 1 43 345 1 43 349 1 43 353 1 43 354 1 43 355 1 43 361 1 43 366 1 43 370 1 43 374 1 43 375 1 43 376 1 43 381 1 43 385 1 43 389 1 43 390 1 43 391 1 43 395 1 43 399 1 43 400 1 43 401 1 43 405 1 43 406 1 43 407 1 43 411 1 43 412 1 43 413 1 43 417 1 43 422 1 43 426 1 43 430 1 43 431 1 43 432 1 43 437 1 43 441 1 43 445 1 43 446 1 43 447 1 43 451 1 43 455 1 43 456 1 43 457 1 43 461 1 43 462 1 43 463 1 43 467 1 43 468 1 43 469 1 43 472 1 43 476 1 43 480 1 43 481 1 43 482 1 43 486 1 43 490 1 43 491 1 43 492 1 43 496 1 43 497 1 43 498 1 43 502 1 43 503 1 43 504 1 43 506 1 43 510 1 43 511 1 43 512 1 43 516 1 43 517 1 43 518 1 43 522 1 43 523 1 43 524 1 43 526 1 43 527 1 43 528 1 43 532 1 43 533 1 43 534 1 43 536 1 43 537 1 43 538 1 43 540 1 43 796 1 43 802 1 43 807 1 43 811 1 43 815 1 43 816 1 43 817 1 43 823 1 43 828 1 43 832 1 43 836 1 43 837 1 43 838 1 43 843 1 43 847 1 43 851 1 43 852 1 43 853 1 43 857 1 43 861 1 43 862 1 43 863 1 43 867 1 43 868 1 43 869 1 43 873 1 43 874 1 43 875 1 43 879 1 43 884 1 43 888 1 43 892 1 43 893 1 43 894 1 43 899 1 43 903 1 43 907 1 43 908 1 43 909 1 43 913 1 43 917 1 43 918 1 43 919 1 43 923 1 43 924 1 43 925 1 43 929 1 43 930 1 43 931 1 43 934 1 43 938 1 43 942 1 43 943 1 43 944 1 43 948 1 43 952 1 43 953 1 43 954 1 43 958 1 43 959 1 43 960 1 43 964 1 43 965 1 43 966 1 43 968 1 43 972 1 43 973 1 43 974 1 43 978 1 43 979 1 43 980 1 43 984 1 43 985 1 43 986 1 43 988 1 43 989 1 43 990 1 43 994 1 43 995 1 43 996 1 43 998 1 43 999 1 43 1000 1 43 1002 1 43 1257 1 43 1262 1 43 1266 1 43 1270 1 43 1271 1 43 1272 1 43 1277 1 43 1281 1 43 1285 1 43 1286 1 43 1287 1 43 1291 1 43 1295 1 43 1296 1 43 1297 1 43 1301 1 43 1302 1 43 1303 1 43 1307 1 43 1308 1 43 1309 1 43 1312 1 43 1316 1 43 1320 1 43 1321 1 43 1322 1 43 1326 1 43 1330 1 43 1331 1 43 1332 1 43 1336 1 43 1337 1 43 1338 1 43 1342 1 43 1343 1 43 1344 1 43 1346 1 43 1350 1 43 1351 1 43 1352 1 43 1356 1 43 1357 1 43 1358 1 43 1362 1 43 1363 1 43 1364 1 43 1366 1 43 1367 1 43 1368 1 43 1372 1 43 1373 1 43 1374 1 43 1376 1 43 1377 1 43 1378 1 43 1380 1 43 1382 1 43 1386 1 43 1390 1 43 1391 1 43 1392 1 43 1396 1 43 1400 1 43 1401 1 43 1402 1 43 1406 1 43 1407 1 43 1408 1 43 1412 1 43 1413 1 43 1414 1 43 1416 1 43 1420 1 43 1421 1 43 1422 1 43 1426 1 43 1427 1 43 1428 1 43 1432 1 43 1433 1 43 1434 1 43 1436 1 43 1437 1 43 1438 1 43 1442 1 43 1443 1 43 1444 1 43 1446 1 43 1447 1 43 1448 1 43 1450 1 43 1451 1 43 1455 1 43 1456 1 43 1457 1 43 1461 1 43 1462 1 43 1463 1 43 1467 1 43 1468 1 43 1469 1 43 1471 1 43 1472 1 43 1473 1 43 1477 1 43 1478 1 43 1479 1 43 1481 1 43 1482 1 43 1483 1 43 1485 1 43 1486 1 43 1487 1 43 1488 1 43 1492 1 43 1493 1 43 1494 1 43 1496 1 43 1497 1 43 1498 1 43 1500 1 43 1501 1 43 1502 1 43 1503 1 43 1505 1 43 1506 1 43 1720 1 43 1726 1 43 1731 1 43 1735 1 43 1739 1 43 1740 1 43 1741 1 43 1747 1 43 1752 1 43 1756 1 43 1760 1 43 1761 1 43 1762 1 43 1767 1 43 1771 1 43 1775 1 43 1776 1 43 1777 1 43 1781 1 43 1785 1 43 1786 1 43 1787 1 43 1791 1 43 1792 1 43 1793 1 43 1797 1 43 1798 1 43 1799 1 43 1803 1 43 1808 1 43 1812 1 43 1816 1 43 1817 1 43 1818 1 43 1823 1 43 1827 1 43 1831 1 43 1832 1 43 1833 1 43 1837 1 43 1841 1 43 1842 1 43 1843 1 43 1847 1 43 1848 1 43 1849 1 43 1853 1 43 1854 1 43 1855 1 43 1858 1 43 1862 1 43 1866 1 43 1867 1 43 1868 1 43 1872 1 43 1876 1 43 1877 1 43 1878 1 43 1882 1 43 1883 1 43 1884 1 43 1888 1 43 1889 1 43 1890 1 43 1892 1 43 1896 1 43 1897 1 43 1898 1 43 1902 1 43 1903 1 43 1904 1 43 1908 1 43 1909 1 43 1910 1 43 1912 1 43 1913 1 43 1914 1 43 1918 1 43 1919 1 43 1920 1 43 1922 1 43 1923 1 43 1924 1 43 1926 1 43 2181 1 43 2186 1 43 2190 1 43 2194 1 43 2195 1 43 2196 1 43 2201 1 43 2205 1 43 2209 1 43 2210 1 43 2211 1 43 2215 1 43 2219 1 43 2220 1 43 2221 1 43 2225 1 43 2226 1 43 2227 1 43 2231 1 43 2232 1 43 2233 1 43 2236 1 43 2240 1 43 2244 1 43 2245 1 43 2246 1 43 2250 1 43 2254 1 43 2255 1 43 2256 1 43 2260 1 43 2261 1 43 2262 1 43 2266 1 43 2267 1 43 2268 1 43 2270 1 43 2274 1 43 2275 1 43 2276 1 43 2280 1 43 2281 1 43 2282 1 43 2286 1 43 2287 1 43 2288 1 43 2290 1 43 2291 1 43 2292 1 43 2296 1 43 2297 1 43 2298 1 43 2300 1 43 2301 1 43 2302 1 43 2304 1 43 2306 1 43 2310 1 43 2314 1 43 2315 1 43 2316 1 43 2320 1 43 2324 1 43 2325 1 43 2326 1 43 2330 1 43 2331 1 43 2332 1 43 2336 1 43 2337 1 43 2338 1 43 2340 1 43 2344 1 43 2345 1 43 2346 1 43 2350 1 43 2351 1 43 2352 1 43 2356 1 43 2357 1 43 2358 1 43 2360 1 43 2361 1 43 2362 1 43 2366 1 43 2367 1 43 2368 1 43 2370 1 43 2371 1 43 2372 1 43 2374 1 43 2375 1 43 2379 1 43 2380 1 43 2381 1 43 2385 1 43 2386 1 43 2387 1 43 2391 1 43 2392 1 43 2393 1 43 2395 1 43 2396 1 43 2397 1 43 2401 1 43 2402 1 43 2403 1 43 2405 1 43 2406 1 43 2407 1 43 2409 1 43 2410 1 43 2411 1 43 2412 1 43 2416 1 43 2417 1 43 2418 1 43 2420 1 43 2421 1 43 2422 1 43 2424 1 43 2425 1 43 2426 1 43 2427 1 43 2429 1 43 2430 1 43 2643 1 43 2648 1 43 2652 1 43 2656 1 43 2657 1 43 2658 1 43 2663 1 43 2667 1 43 2671 1 43 2672 1 43 2673 1 43 2677 1 43 2681 1 43 2682 1 43 2683 1 43 2687 1 43 2688 1 43 2689 1 43 2693 1 43 2694 1 43 2695 1 43 2698 1 43 2702 1 43 2706 1 43 2707 1 43 2708 1 43 2712 1 43 2716 1 43 2717 1 43 2718 1 43 2722 1 43 2723 1 43 2724 1 43 2728 1 43 2729 1 43 2730 1 43 2732 1 43 2736 1 43 2737 1 43 2738 1 43 2742 1 43 2743 1 43 2744 1 43 2748 1 43 2749 1 43 2750 1 43 2752 1 43 2753 1 43 2754 1 43 2758 1 43 2759 1 43 2760 1 43 2762 1 43 2763 1 43 2764 1 43 2766 1 43 2768 1 43 2772 1 43 2776 1 43 2777 1 43 2778 1 43 2782 1 43 2786 1 43 2787 1 43 2788 1 43 2792 1 43 2793 1 43 2794 1 43 2798 1 43 2799 1 43 2800 1 43 2802 1 43 2806 1 43 2807 1 43 2808 1 43 2812 1 43 2813 1 43 2814 1 43 2818 1 43 2819 1 43 2820 1 43 2822 1 43 2823 1 43 2824 1 43 2828 1 43 2829 1 43 2830 1 43 2832 1 43 2833 1 43 2834 1 43 2836 1 43 2837 1 43 2841 1 43 2842 1 43 2843 1 43 2847 1 43 2848 1 43 2849 1 43 2853 1 43 2854 1 43 2855 1 43 2857 1 43 2858 1 43 2859 1 43 2863 1 43 2864 1 43 2865 1 43 2867 1 43 2868 1 43 2869 1 43 2871 1 43 2872 1 43 2873 1 43 2874 1 43 2878 1 43 2879 1 43 2880 1 43 2882 1 43 2883 1 43 2884 1 43 2886 1 43 2887 1 43 2888 1 43 2889 1 43 2891 1 43 2892 1 43 3104 1 43 3108 1 43 3112 1 43 3113 1 43 3114 1 43 3118 1 43 3122 1 43 3123 1 43 3124 1 43 3128 1 43 3129 1 43 3130 1 43 3134 1 43 3135 1 43 3136 1 43 3138 1 43 3142 1 43 3143 1 43 3144 1 43 3148 1 43 3149 1 43 3150 1 43 3154 1 43 3155 1 43 3156 1 43 3158 1 43 3159 1 43 3160 1 43 3164 1 43 3165 1 43 3166 1 43 3168 1 43 3169 1 43 3170 1 43 3172 1 43 3173 1 43 3177 1 43 3178 1 43 3179 1 43 3183 1 43 3184 1 43 3185 1 43 3189 1 43 3190 1 43 3191 1 43 3193 1 43 3194 1 43 3195 1 43 3199 1 43 3200 1 43 3201 1 43 3203 1 43 3204 1 43 3205 1 43 3207 1 43 3208 1 43 3209 1 43 3210 1 43 3214 1 43 3215 1 43 3216 1 43 3218 1 43 3219 1 43 3220 1 43 3222 1 43 3223 1 43 3224 1 43 3225 1 43 3227 1 43 3228 1 43 3229 1 43 3233 1 43 3234 1 43 3235 1 43 3239 1 43 3240 1 43 3241 1 43 3245 1 43 3246 1 43 3247 1 43 3249 1 43 3250 1 43 3251 1 43 3255 1 43 3256 1 43 3257 1 43 3259 1 43 3260 1 43 3261 1 43 3263 1 43 3264 1 43 3265 1 43 3266 1 43 3270 1 43 3271 1 43 3272 1 43 3274 1 43 3275 1 43 3276 1 43 3278 1 43 3279 1 43 3280 1 43 3281 1 43 3283 1 43 3284 1 43 3285 1 43 3286 1 43 3287 1 43 3291 1 43 3292 1 43 3293 1 43 3295 1 43 3296 1 43 3297 1 43 3299 1 43 3300 1 43 3301 1 43 3302 1 43 3304 1 43 3305 1 43 3306 1 43 3307 1 43 3308 1 43 3310 1 43 3311 1 43 3312 1 44 6 1 44 13 1 44 19 1 44 24 1 44 28 1 44 31 1 44 34 1 44 35 1 44 41 1 44 47 1 44 52 1 44 56 1 44 59 1 44 62 1 44 63 1 44 68 1 44 73 1 44 77 1 44 80 1 44 83 1 44 84 1 44 88 1 44 92 1 44 95 1 44 98 1 44 99 1 44 102 1 44 105 1 44 108 1 44 109 1 44 111 1 44 114 1 44 115 1 44 117 1 44 118 1 44 120 1 44 335 1 44 341 1 44 346 1 44 350 1 44 353 1 44 356 1 44 357 1 44 362 1 44 367 1 44 371 1 44 374 1 44 377 1 44 378 1 44 382 1 44 386 1 44 389 1 44 392 1 44 393 1 44 396 1 44 399 1 44 402 1 44 403 1 44 405 1 44 408 1 44 409 1 44 411 1 44 412 1 44 414 1 44 418 1 44 423 1 44 427 1 44 430 1 44 433 1 44 434 1 44 438 1 44 442 1 44 445 1 44 448 1 44 449 1 44 452 1 44 455 1 44 458 1 44 459 1 44 461 1 44 464 1 44 465 1 44 467 1 44 468 1 44 470 1 44 473 1 44 477 1 44 480 1 44 483 1 44 484 1 44 487 1 44 490 1 44 493 1 44 494 1 44 496 1 44 499 1 44 500 1 44 502 1 44 503 1 44 505 1 44 507 1 44 510 1 44 513 1 44 514 1 44 516 1 44 519 1 44 520 1 44 522 1 44 523 1 44 525 1 44 526 1 44 529 1 44 530 1 44 532 1 44 533 1 44 535 1 44 536 1 44 537 1 44 539 1 44 540 1 44 797 1 44 803 1 44 808 1 44 812 1 44 815 1 44 818 1 44 819 1 44 824 1 44 829 1 44 833 1 44 836 1 44 839 1 44 840 1 44 844 1 44 848 1 44 851 1 44 854 1 44 855 1 44 858 1 44 861 1 44 864 1 44 865 1 44 867 1 44 870 1 44 871 1 44 873 1 44 874 1 44 876 1 44 880 1 44 885 1 44 889 1 44 892 1 44 895 1 44 896 1 44 900 1 44 904 1 44 907 1 44 910 1 44 911 1 44 914 1 44 917 1 44 920 1 44 921 1 44 923 1 44 926 1 44 927 1 44 929 1 44 930 1 44 932 1 44 935 1 44 939 1 44 942 1 44 945 1 44 946 1 44 949 1 44 952 1 44 955 1 44 956 1 44 958 1 44 961 1 44 962 1 44 964 1 44 965 1 44 967 1 44 969 1 44 972 1 44 975 1 44 976 1 44 978 1 44 981 1 44 982 1 44 984 1 44 985 1 44 987 1 44 988 1 44 991 1 44 992 1 44 994 1 44 995 1 44 997 1 44 998 1 44 999 1 44 1001 1 44 1002 1 44 1258 1 44 1263 1 44 1267 1 44 1270 1 44 1273 1 44 1274 1 44 1278 1 44 1282 1 44 1285 1 44 1288 1 44 1289 1 44 1292 1 44 1295 1 44 1298 1 44 1299 1 44 1301 1 44 1304 1 44 1305 1 44 1307 1 44 1308 1 44 1310 1 44 1313 1 44 1317 1 44 1320 1 44 1323 1 44 1324 1 44 1327 1 44 1330 1 44 1333 1 44 1334 1 44 1336 1 44 1339 1 44 1340 1 44 1342 1 44 1343 1 44 1345 1 44 1347 1 44 1350 1 44 1353 1 44 1354 1 44 1356 1 44 1359 1 44 1360 1 44 1362 1 44 1363 1 44 1365 1 44 1366 1 44 1369 1 44 1370 1 44 1372 1 44 1373 1 44 1375 1 44 1376 1 44 1377 1 44 1379 1 44 1380 1 44 1383 1 44 1387 1 44 1390 1 44 1393 1 44 1394 1 44 1397 1 44 1400 1 44 1403 1 44 1404 1 44 1406 1 44 1409 1 44 1410 1 44 1412 1 44 1413 1 44 1415 1 44 1417 1 44 1420 1 44 1423 1 44 1424 1 44 1426 1 44 1429 1 44 1430 1 44 1432 1 44 1433 1 44 1435 1 44 1436 1 44 1439 1 44 1440 1 44 1442 1 44 1443 1 44 1445 1 44 1446 1 44 1447 1 44 1449 1 44 1450 1 44 1452 1 44 1455 1 44 1458 1 44 1459 1 44 1461 1 44 1464 1 44 1465 1 44 1467 1 44 1468 1 44 1470 1 44 1471 1 44 1474 1 44 1475 1 44 1477 1 44 1478 1 44 1480 1 44 1481 1 44 1482 1 44 1484 1 44 1485 1 44 1486 1 44 1489 1 44 1490 1 44 1492 1 44 1493 1 44 1495 1 44 1496 1 44 1497 1 44 1499 1 44 1500 1 44 1501 1 44 1502 1 44 1504 1 44 1505 1 44 1506 1 44 1721 1 44 1727 1 44 1732 1 44 1736 1 44 1739 1 44 1742 1 44 1743 1 44 1748 1 44 1753 1 44 1757 1 44 1760 1 44 1763 1 44 1764 1 44 1768 1 44 1772 1 44 1775 1 44 1778 1 44 1779 1 44 1782 1 44 1785 1 44 1788 1 44 1789 1 44 1791 1 44 1794 1 44 1795 1 44 1797 1 44 1798 1 44 1800 1 44 1804 1 44 1809 1 44 1813 1 44 1816 1 44 1819 1 44 1820 1 44 1824 1 44 1828 1 44 1831 1 44 1834 1 44 1835 1 44 1838 1 44 1841 1 44 1844 1 44 1845 1 44 1847 1 44 1850 1 44 1851 1 44 1853 1 44 1854 1 44 1856 1 44 1859 1 44 1863 1 44 1866 1 44 1869 1 44 1870 1 44 1873 1 44 1876 1 44 1879 1 44 1880 1 44 1882 1 44 1885 1 44 1886 1 44 1888 1 44 1889 1 44 1891 1 44 1893 1 44 1896 1 44 1899 1 44 1900 1 44 1902 1 44 1905 1 44 1906 1 44 1908 1 44 1909 1 44 1911 1 44 1912 1 44 1915 1 44 1916 1 44 1918 1 44 1919 1 44 1921 1 44 1922 1 44 1923 1 44 1925 1 44 1926 1 44 2182 1 44 2187 1 44 2191 1 44 2194 1 44 2197 1 44 2198 1 44 2202 1 44 2206 1 44 2209 1 44 2212 1 44 2213 1 44 2216 1 44 2219 1 44 2222 1 44 2223 1 44 2225 1 44 2228 1 44 2229 1 44 2231 1 44 2232 1 44 2234 1 44 2237 1 44 2241 1 44 2244 1 44 2247 1 44 2248 1 44 2251 1 44 2254 1 44 2257 1 44 2258 1 44 2260 1 44 2263 1 44 2264 1 44 2266 1 44 2267 1 44 2269 1 44 2271 1 44 2274 1 44 2277 1 44 2278 1 44 2280 1 44 2283 1 44 2284 1 44 2286 1 44 2287 1 44 2289 1 44 2290 1 44 2293 1 44 2294 1 44 2296 1 44 2297 1 44 2299 1 44 2300 1 44 2301 1 44 2303 1 44 2304 1 44 2307 1 44 2311 1 44 2314 1 44 2317 1 44 2318 1 44 2321 1 44 2324 1 44 2327 1 44 2328 1 44 2330 1 44 2333 1 44 2334 1 44 2336 1 44 2337 1 44 2339 1 44 2341 1 44 2344 1 44 2347 1 44 2348 1 44 2350 1 44 2353 1 44 2354 1 44 2356 1 44 2357 1 44 2359 1 44 2360 1 44 2363 1 44 2364 1 44 2366 1 44 2367 1 44 2369 1 44 2370 1 44 2371 1 44 2373 1 44 2374 1 44 2376 1 44 2379 1 44 2382 1 44 2383 1 44 2385 1 44 2388 1 44 2389 1 44 2391 1 44 2392 1 44 2394 1 44 2395 1 44 2398 1 44 2399 1 44 2401 1 44 2402 1 44 2404 1 44 2405 1 44 2406 1 44 2408 1 44 2409 1 44 2410 1 44 2413 1 44 2414 1 44 2416 1 44 2417 1 44 2419 1 44 2420 1 44 2421 1 44 2423 1 44 2424 1 44 2425 1 44 2426 1 44 2428 1 44 2429 1 44 2430 1 44 2644 1 44 2649 1 44 2653 1 44 2656 1 44 2659 1 44 2660 1 44 2664 1 44 2668 1 44 2671 1 44 2674 1 44 2675 1 44 2678 1 44 2681 1 44 2684 1 44 2685 1 44 2687 1 44 2690 1 44 2691 1 44 2693 1 44 2694 1 44 2696 1 44 2699 1 44 2703 1 44 2706 1 44 2709 1 44 2710 1 44 2713 1 44 2716 1 44 2719 1 44 2720 1 44 2722 1 44 2725 1 44 2726 1 44 2728 1 44 2729 1 44 2731 1 44 2733 1 44 2736 1 44 2739 1 44 2740 1 44 2742 1 44 2745 1 44 2746 1 44 2748 1 44 2749 1 44 2751 1 44 2752 1 44 2755 1 44 2756 1 44 2758 1 44 2759 1 44 2761 1 44 2762 1 44 2763 1 44 2765 1 44 2766 1 44 2769 1 44 2773 1 44 2776 1 44 2779 1 44 2780 1 44 2783 1 44 2786 1 44 2789 1 44 2790 1 44 2792 1 44 2795 1 44 2796 1 44 2798 1 44 2799 1 44 2801 1 44 2803 1 44 2806 1 44 2809 1 44 2810 1 44 2812 1 44 2815 1 44 2816 1 44 2818 1 44 2819 1 44 2821 1 44 2822 1 44 2825 1 44 2826 1 44 2828 1 44 2829 1 44 2831 1 44 2832 1 44 2833 1 44 2835 1 44 2836 1 44 2838 1 44 2841 1 44 2844 1 44 2845 1 44 2847 1 44 2850 1 44 2851 1 44 2853 1 44 2854 1 44 2856 1 44 2857 1 44 2860 1 44 2861 1 44 2863 1 44 2864 1 44 2866 1 44 2867 1 44 2868 1 44 2870 1 44 2871 1 44 2872 1 44 2875 1 44 2876 1 44 2878 1 44 2879 1 44 2881 1 44 2882 1 44 2883 1 44 2885 1 44 2886 1 44 2887 1 44 2888 1 44 2890 1 44 2891 1 44 2892 1 44 3105 1 44 3109 1 44 3112 1 44 3115 1 44 3116 1 44 3119 1 44 3122 1 44 3125 1 44 3126 1 44 3128 1 44 3131 1 44 3132 1 44 3134 1 44 3135 1 44 3137 1 44 3139 1 44 3142 1 44 3145 1 44 3146 1 44 3148 1 44 3151 1 44 3152 1 44 3154 1 44 3155 1 44 3157 1 44 3158 1 44 3161 1 44 3162 1 44 3164 1 44 3165 1 44 3167 1 44 3168 1 44 3169 1 44 3171 1 44 3172 1 44 3174 1 44 3177 1 44 3180 1 44 3181 1 44 3183 1 44 3186 1 44 3187 1 44 3189 1 44 3190 1 44 3192 1 44 3193 1 44 3196 1 44 3197 1 44 3199 1 44 3200 1 44 3202 1 44 3203 1 44 3204 1 44 3206 1 44 3207 1 44 3208 1 44 3211 1 44 3212 1 44 3214 1 44 3215 1 44 3217 1 44 3218 1 44 3219 1 44 3221 1 44 3222 1 44 3223 1 44 3224 1 44 3226 1 44 3227 1 44 3228 1 44 3230 1 44 3233 1 44 3236 1 44 3237 1 44 3239 1 44 3242 1 44 3243 1 44 3245 1 44 3246 1 44 3248 1 44 3249 1 44 3252 1 44 3253 1 44 3255 1 44 3256 1 44 3258 1 44 3259 1 44 3260 1 44 3262 1 44 3263 1 44 3264 1 44 3267 1 44 3268 1 44 3270 1 44 3271 1 44 3273 1 44 3274 1 44 3275 1 44 3277 1 44 3278 1 44 3279 1 44 3280 1 44 3282 1 44 3283 1 44 3284 1 44 3285 1 44 3288 1 44 3289 1 44 3291 1 44 3292 1 44 3294 1 44 3295 1 44 3296 1 44 3298 1 44 3299 1 44 3300 1 44 3301 1 44 3303 1 44 3304 1 44 3305 1 44 3306 1 44 3307 1 44 3309 1 44 3310 1 44 3311 1 44 3312 1 45 7 1 45 14 1 45 20 1 45 25 1 45 29 1 45 32 1 45 34 1 45 36 1 45 42 1 45 48 1 45 53 1 45 57 1 45 60 1 45 62 1 45 64 1 45 69 1 45 74 1 45 78 1 45 81 1 45 83 1 45 85 1 45 89 1 45 93 1 45 96 1 45 98 1 45 100 1 45 103 1 45 106 1 45 108 1 45 110 1 45 112 1 45 114 1 45 116 1 45 117 1 45 119 1 45 120 1 45 336 1 45 342 1 45 347 1 45 351 1 45 354 1 45 356 1 45 358 1 45 363 1 45 368 1 45 372 1 45 375 1 45 377 1 45 379 1 45 383 1 45 387 1 45 390 1 45 392 1 45 394 1 45 397 1 45 400 1 45 402 1 45 404 1 45 406 1 45 408 1 45 410 1 45 411 1 45 413 1 45 414 1 45 419 1 45 424 1 45 428 1 45 431 1 45 433 1 45 435 1 45 439 1 45 443 1 45 446 1 45 448 1 45 450 1 45 453 1 45 456 1 45 458 1 45 460 1 45 462 1 45 464 1 45 466 1 45 467 1 45 469 1 45 470 1 45 474 1 45 478 1 45 481 1 45 483 1 45 485 1 45 488 1 45 491 1 45 493 1 45 495 1 45 497 1 45 499 1 45 501 1 45 502 1 45 504 1 45 505 1 45 508 1 45 511 1 45 513 1 45 515 1 45 517 1 45 519 1 45 521 1 45 522 1 45 524 1 45 525 1 45 527 1 45 529 1 45 531 1 45 532 1 45 534 1 45 535 1 45 536 1 45 538 1 45 539 1 45 540 1 45 798 1 45 804 1 45 809 1 45 813 1 45 816 1 45 818 1 45 820 1 45 825 1 45 830 1 45 834 1 45 837 1 45 839 1 45 841 1 45 845 1 45 849 1 45 852 1 45 854 1 45 856 1 45 859 1 45 862 1 45 864 1 45 866 1 45 868 1 45 870 1 45 872 1 45 873 1 45 875 1 45 876 1 45 881 1 45 886 1 45 890 1 45 893 1 45 895 1 45 897 1 45 901 1 45 905 1 45 908 1 45 910 1 45 912 1 45 915 1 45 918 1 45 920 1 45 922 1 45 924 1 45 926 1 45 928 1 45 929 1 45 931 1 45 932 1 45 936 1 45 940 1 45 943 1 45 945 1 45 947 1 45 950 1 45 953 1 45 955 1 45 957 1 45 959 1 45 961 1 45 963 1 45 964 1 45 966 1 45 967 1 45 970 1 45 973 1 45 975 1 45 977 1 45 979 1 45 981 1 45 983 1 45 984 1 45 986 1 45 987 1 45 989 1 45 991 1 45 993 1 45 994 1 45 996 1 45 997 1 45 998 1 45 1000 1 45 1001 1 45 1002 1 45 1259 1 45 1264 1 45 1268 1 45 1271 1 45 1273 1 45 1275 1 45 1279 1 45 1283 1 45 1286 1 45 1288 1 45 1290 1 45 1293 1 45 1296 1 45 1298 1 45 1300 1 45 1302 1 45 1304 1 45 1306 1 45 1307 1 45 1309 1 45 1310 1 45 1314 1 45 1318 1 45 1321 1 45 1323 1 45 1325 1 45 1328 1 45 1331 1 45 1333 1 45 1335 1 45 1337 1 45 1339 1 45 1341 1 45 1342 1 45 1344 1 45 1345 1 45 1348 1 45 1351 1 45 1353 1 45 1355 1 45 1357 1 45 1359 1 45 1361 1 45 1362 1 45 1364 1 45 1365 1 45 1367 1 45 1369 1 45 1371 1 45 1372 1 45 1374 1 45 1375 1 45 1376 1 45 1378 1 45 1379 1 45 1380 1 45 1384 1 45 1388 1 45 1391 1 45 1393 1 45 1395 1 45 1398 1 45 1401 1 45 1403 1 45 1405 1 45 1407 1 45 1409 1 45 1411 1 45 1412 1 45 1414 1 45 1415 1 45 1418 1 45 1421 1 45 1423 1 45 1425 1 45 1427 1 45 1429 1 45 1431 1 45 1432 1 45 1434 1 45 1435 1 45 1437 1 45 1439 1 45 1441 1 45 1442 1 45 1444 1 45 1445 1 45 1446 1 45 1448 1 45 1449 1 45 1450 1 45 1453 1 45 1456 1 45 1458 1 45 1460 1 45 1462 1 45 1464 1 45 1466 1 45 1467 1 45 1469 1 45 1470 1 45 1472 1 45 1474 1 45 1476 1 45 1477 1 45 1479 1 45 1480 1 45 1481 1 45 1483 1 45 1484 1 45 1485 1 45 1487 1 45 1489 1 45 1491 1 45 1492 1 45 1494 1 45 1495 1 45 1496 1 45 1498 1 45 1499 1 45 1500 1 45 1501 1 45 1503 1 45 1504 1 45 1505 1 45 1506 1 45 1722 1 45 1728 1 45 1733 1 45 1737 1 45 1740 1 45 1742 1 45 1744 1 45 1749 1 45 1754 1 45 1758 1 45 1761 1 45 1763 1 45 1765 1 45 1769 1 45 1773 1 45 1776 1 45 1778 1 45 1780 1 45 1783 1 45 1786 1 45 1788 1 45 1790 1 45 1792 1 45 1794 1 45 1796 1 45 1797 1 45 1799 1 45 1800 1 45 1805 1 45 1810 1 45 1814 1 45 1817 1 45 1819 1 45 1821 1 45 1825 1 45 1829 1 45 1832 1 45 1834 1 45 1836 1 45 1839 1 45 1842 1 45 1844 1 45 1846 1 45 1848 1 45 1850 1 45 1852 1 45 1853 1 45 1855 1 45 1856 1 45 1860 1 45 1864 1 45 1867 1 45 1869 1 45 1871 1 45 1874 1 45 1877 1 45 1879 1 45 1881 1 45 1883 1 45 1885 1 45 1887 1 45 1888 1 45 1890 1 45 1891 1 45 1894 1 45 1897 1 45 1899 1 45 1901 1 45 1903 1 45 1905 1 45 1907 1 45 1908 1 45 1910 1 45 1911 1 45 1913 1 45 1915 1 45 1917 1 45 1918 1 45 1920 1 45 1921 1 45 1922 1 45 1924 1 45 1925 1 45 1926 1 45 2183 1 45 2188 1 45 2192 1 45 2195 1 45 2197 1 45 2199 1 45 2203 1 45 2207 1 45 2210 1 45 2212 1 45 2214 1 45 2217 1 45 2220 1 45 2222 1 45 2224 1 45 2226 1 45 2228 1 45 2230 1 45 2231 1 45 2233 1 45 2234 1 45 2238 1 45 2242 1 45 2245 1 45 2247 1 45 2249 1 45 2252 1 45 2255 1 45 2257 1 45 2259 1 45 2261 1 45 2263 1 45 2265 1 45 2266 1 45 2268 1 45 2269 1 45 2272 1 45 2275 1 45 2277 1 45 2279 1 45 2281 1 45 2283 1 45 2285 1 45 2286 1 45 2288 1 45 2289 1 45 2291 1 45 2293 1 45 2295 1 45 2296 1 45 2298 1 45 2299 1 45 2300 1 45 2302 1 45 2303 1 45 2304 1 45 2308 1 45 2312 1 45 2315 1 45 2317 1 45 2319 1 45 2322 1 45 2325 1 45 2327 1 45 2329 1 45 2331 1 45 2333 1 45 2335 1 45 2336 1 45 2338 1 45 2339 1 45 2342 1 45 2345 1 45 2347 1 45 2349 1 45 2351 1 45 2353 1 45 2355 1 45 2356 1 45 2358 1 45 2359 1 45 2361 1 45 2363 1 45 2365 1 45 2366 1 45 2368 1 45 2369 1 45 2370 1 45 2372 1 45 2373 1 45 2374 1 45 2377 1 45 2380 1 45 2382 1 45 2384 1 45 2386 1 45 2388 1 45 2390 1 45 2391 1 45 2393 1 45 2394 1 45 2396 1 45 2398 1 45 2400 1 45 2401 1 45 2403 1 45 2404 1 45 2405 1 45 2407 1 45 2408 1 45 2409 1 45 2411 1 45 2413 1 45 2415 1 45 2416 1 45 2418 1 45 2419 1 45 2420 1 45 2422 1 45 2423 1 45 2424 1 45 2425 1 45 2427 1 45 2428 1 45 2429 1 45 2430 1 45 2645 1 45 2650 1 45 2654 1 45 2657 1 45 2659 1 45 2661 1 45 2665 1 45 2669 1 45 2672 1 45 2674 1 45 2676 1 45 2679 1 45 2682 1 45 2684 1 45 2686 1 45 2688 1 45 2690 1 45 2692 1 45 2693 1 45 2695 1 45 2696 1 45 2700 1 45 2704 1 45 2707 1 45 2709 1 45 2711 1 45 2714 1 45 2717 1 45 2719 1 45 2721 1 45 2723 1 45 2725 1 45 2727 1 45 2728 1 45 2730 1 45 2731 1 45 2734 1 45 2737 1 45 2739 1 45 2741 1 45 2743 1 45 2745 1 45 2747 1 45 2748 1 45 2750 1 45 2751 1 45 2753 1 45 2755 1 45 2757 1 45 2758 1 45 2760 1 45 2761 1 45 2762 1 45 2764 1 45 2765 1 45 2766 1 45 2770 1 45 2774 1 45 2777 1 45 2779 1 45 2781 1 45 2784 1 45 2787 1 45 2789 1 45 2791 1 45 2793 1 45 2795 1 45 2797 1 45 2798 1 45 2800 1 45 2801 1 45 2804 1 45 2807 1 45 2809 1 45 2811 1 45 2813 1 45 2815 1 45 2817 1 45 2818 1 45 2820 1 45 2821 1 45 2823 1 45 2825 1 45 2827 1 45 2828 1 45 2830 1 45 2831 1 45 2832 1 45 2834 1 45 2835 1 45 2836 1 45 2839 1 45 2842 1 45 2844 1 45 2846 1 45 2848 1 45 2850 1 45 2852 1 45 2853 1 45 2855 1 45 2856 1 45 2858 1 45 2860 1 45 2862 1 45 2863 1 45 2865 1 45 2866 1 45 2867 1 45 2869 1 45 2870 1 45 2871 1 45 2873 1 45 2875 1 45 2877 1 45 2878 1 45 2880 1 45 2881 1 45 2882 1 45 2884 1 45 2885 1 45 2886 1 45 2887 1 45 2889 1 45 2890 1 45 2891 1 45 2892 1 45 3106 1 45 3110 1 45 3113 1 45 3115 1 45 3117 1 45 3120 1 45 3123 1 45 3125 1 45 3127 1 45 3129 1 45 3131 1 45 3133 1 45 3134 1 45 3136 1 45 3137 1 45 3140 1 45 3143 1 45 3145 1 45 3147 1 45 3149 1 45 3151 1 45 3153 1 45 3154 1 45 3156 1 45 3157 1 45 3159 1 45 3161 1 45 3163 1 45 3164 1 45 3166 1 45 3167 1 45 3168 1 45 3170 1 45 3171 1 45 3172 1 45 3175 1 45 3178 1 45 3180 1 45 3182 1 45 3184 1 45 3186 1 45 3188 1 45 3189 1 45 3191 1 45 3192 1 45 3194 1 45 3196 1 45 3198 1 45 3199 1 45 3201 1 45 3202 1 45 3203 1 45 3205 1 45 3206 1 45 3207 1 45 3209 1 45 3211 1 45 3213 1 45 3214 1 45 3216 1 45 3217 1 45 3218 1 45 3220 1 45 3221 1 45 3222 1 45 3223 1 45 3225 1 45 3226 1 45 3227 1 45 3228 1 45 3231 1 45 3234 1 45 3236 1 45 3238 1 45 3240 1 45 3242 1 45 3244 1 45 3245 1 45 3247 1 45 3248 1 45 3250 1 45 3252 1 45 3254 1 45 3255 1 45 3257 1 45 3258 1 45 3259 1 45 3261 1 45 3262 1 45 3263 1 45 3265 1 45 3267 1 45 3269 1 45 3270 1 45 3272 1 45 3273 1 45 3274 1 45 3276 1 45 3277 1 45 3278 1 45 3279 1 45 3281 1 45 3282 1 45 3283 1 45 3284 1 45 3286 1 45 3288 1 45 3290 1 45 3291 1 45 3293 1 45 3294 1 45 3295 1 45 3297 1 45 3298 1 45 3299 1 45 3300 1 45 3302 1 45 3303 1 45 3304 1 45 3305 1 45 3306 1 45 3308 1 45 3309 1 45 3310 1 45 3311 1 45 3312 1 46 8 1 46 15 1 46 21 1 46 26 1 46 30 1 46 33 1 46 35 1 46 36 1 46 43 1 46 49 1 46 54 1 46 58 1 46 61 1 46 63 1 46 64 1 46 70 1 46 75 1 46 79 1 46 82 1 46 84 1 46 85 1 46 90 1 46 94 1 46 97 1 46 99 1 46 100 1 46 104 1 46 107 1 46 109 1 46 110 1 46 113 1 46 115 1 46 116 1 46 118 1 46 119 1 46 120 1 46 337 1 46 343 1 46 348 1 46 352 1 46 355 1 46 357 1 46 358 1 46 364 1 46 369 1 46 373 1 46 376 1 46 378 1 46 379 1 46 384 1 46 388 1 46 391 1 46 393 1 46 394 1 46 398 1 46 401 1 46 403 1 46 404 1 46 407 1 46 409 1 46 410 1 46 412 1 46 413 1 46 414 1 46 420 1 46 425 1 46 429 1 46 432 1 46 434 1 46 435 1 46 440 1 46 444 1 46 447 1 46 449 1 46 450 1 46 454 1 46 457 1 46 459 1 46 460 1 46 463 1 46 465 1 46 466 1 46 468 1 46 469 1 46 470 1 46 475 1 46 479 1 46 482 1 46 484 1 46 485 1 46 489 1 46 492 1 46 494 1 46 495 1 46 498 1 46 500 1 46 501 1 46 503 1 46 504 1 46 505 1 46 509 1 46 512 1 46 514 1 46 515 1 46 518 1 46 520 1 46 521 1 46 523 1 46 524 1 46 525 1 46 528 1 46 530 1 46 531 1 46 533 1 46 534 1 46 535 1 46 537 1 46 538 1 46 539 1 46 540 1 46 799 1 46 805 1 46 810 1 46 814 1 46 817 1 46 819 1 46 820 1 46 826 1 46 831 1 46 835 1 46 838 1 46 840 1 46 841 1 46 846 1 46 850 1 46 853 1 46 855 1 46 856 1 46 860 1 46 863 1 46 865 1 46 866 1 46 869 1 46 871 1 46 872 1 46 874 1 46 875 1 46 876 1 46 882 1 46 887 1 46 891 1 46 894 1 46 896 1 46 897 1 46 902 1 46 906 1 46 909 1 46 911 1 46 912 1 46 916 1 46 919 1 46 921 1 46 922 1 46 925 1 46 927 1 46 928 1 46 930 1 46 931 1 46 932 1 46 937 1 46 941 1 46 944 1 46 946 1 46 947 1 46 951 1 46 954 1 46 956 1 46 957 1 46 960 1 46 962 1 46 963 1 46 965 1 46 966 1 46 967 1 46 971 1 46 974 1 46 976 1 46 977 1 46 980 1 46 982 1 46 983 1 46 985 1 46 986 1 46 987 1 46 990 1 46 992 1 46 993 1 46 995 1 46 996 1 46 997 1 46 999 1 46 1000 1 46 1001 1 46 1002 1 46 1260 1 46 1265 1 46 1269 1 46 1272 1 46 1274 1 46 1275 1 46 1280 1 46 1284 1 46 1287 1 46 1289 1 46 1290 1 46 1294 1 46 1297 1 46 1299 1 46 1300 1 46 1303 1 46 1305 1 46 1306 1 46 1308 1 46 1309 1 46 1310 1 46 1315 1 46 1319 1 46 1322 1 46 1324 1 46 1325 1 46 1329 1 46 1332 1 46 1334 1 46 1335 1 46 1338 1 46 1340 1 46 1341 1 46 1343 1 46 1344 1 46 1345 1 46 1349 1 46 1352 1 46 1354 1 46 1355 1 46 1358 1 46 1360 1 46 1361 1 46 1363 1 46 1364 1 46 1365 1 46 1368 1 46 1370 1 46 1371 1 46 1373 1 46 1374 1 46 1375 1 46 1377 1 46 1378 1 46 1379 1 46 1380 1 46 1385 1 46 1389 1 46 1392 1 46 1394 1 46 1395 1 46 1399 1 46 1402 1 46 1404 1 46 1405 1 46 1408 1 46 1410 1 46 1411 1 46 1413 1 46 1414 1 46 1415 1 46 1419 1 46 1422 1 46 1424 1 46 1425 1 46 1428 1 46 1430 1 46 1431 1 46 1433 1 46 1434 1 46 1435 1 46 1438 1 46 1440 1 46 1441 1 46 1443 1 46 1444 1 46 1445 1 46 1447 1 46 1448 1 46 1449 1 46 1450 1 46 1454 1 46 1457 1 46 1459 1 46 1460 1 46 1463 1 46 1465 1 46 1466 1 46 1468 1 46 1469 1 46 1470 1 46 1473 1 46 1475 1 46 1476 1 46 1478 1 46 1479 1 46 1480 1 46 1482 1 46 1483 1 46 1484 1 46 1485 1 46 1488 1 46 1490 1 46 1491 1 46 1493 1 46 1494 1 46 1495 1 46 1497 1 46 1498 1 46 1499 1 46 1500 1 46 1502 1 46 1503 1 46 1504 1 46 1505 1 46 1506 1 46 1723 1 46 1729 1 46 1734 1 46 1738 1 46 1741 1 46 1743 1 46 1744 1 46 1750 1 46 1755 1 46 1759 1 46 1762 1 46 1764 1 46 1765 1 46 1770 1 46 1774 1 46 1777 1 46 1779 1 46 1780 1 46 1784 1 46 1787 1 46 1789 1 46 1790 1 46 1793 1 46 1795 1 46 1796 1 46 1798 1 46 1799 1 46 1800 1 46 1806 1 46 1811 1 46 1815 1 46 1818 1 46 1820 1 46 1821 1 46 1826 1 46 1830 1 46 1833 1 46 1835 1 46 1836 1 46 1840 1 46 1843 1 46 1845 1 46 1846 1 46 1849 1 46 1851 1 46 1852 1 46 1854 1 46 1855 1 46 1856 1 46 1861 1 46 1865 1 46 1868 1 46 1870 1 46 1871 1 46 1875 1 46 1878 1 46 1880 1 46 1881 1 46 1884 1 46 1886 1 46 1887 1 46 1889 1 46 1890 1 46 1891 1 46 1895 1 46 1898 1 46 1900 1 46 1901 1 46 1904 1 46 1906 1 46 1907 1 46 1909 1 46 1910 1 46 1911 1 46 1914 1 46 1916 1 46 1917 1 46 1919 1 46 1920 1 46 1921 1 46 1923 1 46 1924 1 46 1925 1 46 1926 1 46 2184 1 46 2189 1 46 2193 1 46 2196 1 46 2198 1 46 2199 1 46 2204 1 46 2208 1 46 2211 1 46 2213 1 46 2214 1 46 2218 1 46 2221 1 46 2223 1 46 2224 1 46 2227 1 46 2229 1 46 2230 1 46 2232 1 46 2233 1 46 2234 1 46 2239 1 46 2243 1 46 2246 1 46 2248 1 46 2249 1 46 2253 1 46 2256 1 46 2258 1 46 2259 1 46 2262 1 46 2264 1 46 2265 1 46 2267 1 46 2268 1 46 2269 1 46 2273 1 46 2276 1 46 2278 1 46 2279 1 46 2282 1 46 2284 1 46 2285 1 46 2287 1 46 2288 1 46 2289 1 46 2292 1 46 2294 1 46 2295 1 46 2297 1 46 2298 1 46 2299 1 46 2301 1 46 2302 1 46 2303 1 46 2304 1 46 2309 1 46 2313 1 46 2316 1 46 2318 1 46 2319 1 46 2323 1 46 2326 1 46 2328 1 46 2329 1 46 2332 1 46 2334 1 46 2335 1 46 2337 1 46 2338 1 46 2339 1 46 2343 1 46 2346 1 46 2348 1 46 2349 1 46 2352 1 46 2354 1 46 2355 1 46 2357 1 46 2358 1 46 2359 1 46 2362 1 46 2364 1 46 2365 1 46 2367 1 46 2368 1 46 2369 1 46 2371 1 46 2372 1 46 2373 1 46 2374 1 46 2378 1 46 2381 1 46 2383 1 46 2384 1 46 2387 1 46 2389 1 46 2390 1 46 2392 1 46 2393 1 46 2394 1 46 2397 1 46 2399 1 46 2400 1 46 2402 1 46 2403 1 46 2404 1 46 2406 1 46 2407 1 46 2408 1 46 2409 1 46 2412 1 46 2414 1 46 2415 1 46 2417 1 46 2418 1 46 2419 1 46 2421 1 46 2422 1 46 2423 1 46 2424 1 46 2426 1 46 2427 1 46 2428 1 46 2429 1 46 2430 1 46 2646 1 46 2651 1 46 2655 1 46 2658 1 46 2660 1 46 2661 1 46 2666 1 46 2670 1 46 2673 1 46 2675 1 46 2676 1 46 2680 1 46 2683 1 46 2685 1 46 2686 1 46 2689 1 46 2691 1 46 2692 1 46 2694 1 46 2695 1 46 2696 1 46 2701 1 46 2705 1 46 2708 1 46 2710 1 46 2711 1 46 2715 1 46 2718 1 46 2720 1 46 2721 1 46 2724 1 46 2726 1 46 2727 1 46 2729 1 46 2730 1 46 2731 1 46 2735 1 46 2738 1 46 2740 1 46 2741 1 46 2744 1 46 2746 1 46 2747 1 46 2749 1 46 2750 1 46 2751 1 46 2754 1 46 2756 1 46 2757 1 46 2759 1 46 2760 1 46 2761 1 46 2763 1 46 2764 1 46 2765 1 46 2766 1 46 2771 1 46 2775 1 46 2778 1 46 2780 1 46 2781 1 46 2785 1 46 2788 1 46 2790 1 46 2791 1 46 2794 1 46 2796 1 46 2797 1 46 2799 1 46 2800 1 46 2801 1 46 2805 1 46 2808 1 46 2810 1 46 2811 1 46 2814 1 46 2816 1 46 2817 1 46 2819 1 46 2820 1 46 2821 1 46 2824 1 46 2826 1 46 2827 1 46 2829 1 46 2830 1 46 2831 1 46 2833 1 46 2834 1 46 2835 1 46 2836 1 46 2840 1 46 2843 1 46 2845 1 46 2846 1 46 2849 1 46 2851 1 46 2852 1 46 2854 1 46 2855 1 46 2856 1 46 2859 1 46 2861 1 46 2862 1 46 2864 1 46 2865 1 46 2866 1 46 2868 1 46 2869 1 46 2870 1 46 2871 1 46 2874 1 46 2876 1 46 2877 1 46 2879 1 46 2880 1 46 2881 1 46 2883 1 46 2884 1 46 2885 1 46 2886 1 46 2888 1 46 2889 1 46 2890 1 46 2891 1 46 2892 1 46 3107 1 46 3111 1 46 3114 1 46 3116 1 46 3117 1 46 3121 1 46 3124 1 46 3126 1 46 3127 1 46 3130 1 46 3132 1 46 3133 1 46 3135 1 46 3136 1 46 3137 1 46 3141 1 46 3144 1 46 3146 1 46 3147 1 46 3150 1 46 3152 1 46 3153 1 46 3155 1 46 3156 1 46 3157 1 46 3160 1 46 3162 1 46 3163 1 46 3165 1 46 3166 1 46 3167 1 46 3169 1 46 3170 1 46 3171 1 46 3172 1 46 3176 1 46 3179 1 46 3181 1 46 3182 1 46 3185 1 46 3187 1 46 3188 1 46 3190 1 46 3191 1 46 3192 1 46 3195 1 46 3197 1 46 3198 1 46 3200 1 46 3201 1 46 3202 1 46 3204 1 46 3205 1 46 3206 1 46 3207 1 46 3210 1 46 3212 1 46 3213 1 46 3215 1 46 3216 1 46 3217 1 46 3219 1 46 3220 1 46 3221 1 46 3222 1 46 3224 1 46 3225 1 46 3226 1 46 3227 1 46 3228 1 46 3232 1 46 3235 1 46 3237 1 46 3238 1 46 3241 1 46 3243 1 46 3244 1 46 3246 1 46 3247 1 46 3248 1 46 3251 1 46 3253 1 46 3254 1 46 3256 1 46 3257 1 46 3258 1 46 3260 1 46 3261 1 46 3262 1 46 3263 1 46 3266 1 46 3268 1 46 3269 1 46 3271 1 46 3272 1 46 3273 1 46 3275 1 46 3276 1 46 3277 1 46 3278 1 46 3280 1 46 3281 1 46 3282 1 46 3283 1 46 3284 1 46 3287 1 46 3289 1 46 3290 1 46 3292 1 46 3293 1 46 3294 1 46 3296 1 46 3297 1 46 3298 1 46 3299 1 46 3301 1 46 3302 1 46 3303 1 46 3304 1 46 3305 1 46 3307 1 46 3308 1 46 3309 1 46 3310 1 46 3311 1 46 3312 1 47 1 1 47 2 1 47 3 1 47 4 1 47 5 1 47 6 1 47 7 1 47 8 1 47 121 1 47 122 1 47 123 1 47 124 1 47 125 1 47 126 1 47 127 1 47 128 1 47 129 1 47 130 1 47 131 1 47 132 1 47 133 1 47 134 1 47 135 1 47 136 1 47 137 1 47 138 1 47 139 1 47 140 1 47 141 1 47 142 1 47 143 1 47 144 1 47 145 1 47 146 1 47 147 1 47 148 1 47 331 1 47 332 1 47 333 1 47 334 1 47 335 1 47 336 1 47 337 1 47 338 1 47 339 1 47 340 1 47 341 1 47 342 1 47 343 1 47 344 1 47 345 1 47 346 1 47 347 1 47 348 1 47 349 1 47 350 1 47 351 1 47 352 1 47 353 1 47 354 1 47 355 1 47 356 1 47 357 1 47 358 1 47 541 1 47 542 1 47 543 1 47 544 1 47 545 1 47 546 1 47 547 1 47 548 1 47 549 1 47 550 1 47 551 1 47 552 1 47 553 1 47 554 1 47 555 1 47 556 1 47 557 1 47 558 1 47 559 1 47 560 1 47 561 1 47 562 1 47 563 1 47 564 1 47 565 1 47 566 1 47 567 1 47 568 1 47 569 1 47 570 1 47 571 1 47 572 1 47 573 1 47 574 1 47 575 1 47 576 1 47 577 1 47 578 1 47 579 1 47 580 1 47 581 1 47 582 1 47 583 1 47 584 1 47 585 1 47 586 1 47 587 1 47 588 1 47 589 1 47 590 1 47 591 1 47 592 1 47 593 1 47 594 1 47 595 1 47 596 1 47 793 1 47 794 1 47 795 1 47 796 1 47 797 1 47 798 1 47 799 1 47 800 1 47 801 1 47 802 1 47 803 1 47 804 1 47 805 1 47 806 1 47 807 1 47 808 1 47 809 1 47 810 1 47 811 1 47 812 1 47 813 1 47 814 1 47 815 1 47 816 1 47 817 1 47 818 1 47 819 1 47 820 1 47 1003 1 47 1004 1 47 1005 1 47 1006 1 47 1007 1 47 1008 1 47 1009 1 47 1010 1 47 1011 1 47 1012 1 47 1013 1 47 1014 1 47 1015 1 47 1016 1 47 1017 1 47 1018 1 47 1019 1 47 1020 1 47 1021 1 47 1022 1 47 1023 1 47 1024 1 47 1025 1 47 1026 1 47 1027 1 47 1028 1 47 1029 1 47 1030 1 47 1031 1 47 1032 1 47 1033 1 47 1034 1 47 1035 1 47 1036 1 47 1037 1 47 1038 1 47 1039 1 47 1040 1 47 1041 1 47 1042 1 47 1043 1 47 1044 1 47 1045 1 47 1046 1 47 1047 1 47 1048 1 47 1049 1 47 1050 1 47 1051 1 47 1052 1 47 1053 1 47 1054 1 47 1055 1 47 1056 1 47 1057 1 47 1058 1 47 1255 1 47 1256 1 47 1257 1 47 1258 1 47 1259 1 47 1260 1 47 1261 1 47 1262 1 47 1263 1 47 1264 1 47 1265 1 47 1266 1 47 1267 1 47 1268 1 47 1269 1 47 1270 1 47 1271 1 47 1272 1 47 1273 1 47 1274 1 47 1275 1 47 1276 1 47 1277 1 47 1278 1 47 1279 1 47 1280 1 47 1281 1 47 1282 1 47 1283 1 47 1284 1 47 1285 1 47 1286 1 47 1287 1 47 1288 1 47 1289 1 47 1290 1 47 1291 1 47 1292 1 47 1293 1 47 1294 1 47 1295 1 47 1296 1 47 1297 1 47 1298 1 47 1299 1 47 1300 1 47 1301 1 47 1302 1 47 1303 1 47 1304 1 47 1305 1 47 1306 1 47 1307 1 47 1308 1 47 1309 1 47 1310 1 47 1507 1 47 1508 1 47 1509 1 47 1510 1 47 1511 1 47 1512 1 47 1513 1 47 1514 1 47 1515 1 47 1516 1 47 1517 1 47 1518 1 47 1519 1 47 1520 1 47 1521 1 47 1522 1 47 1523 1 47 1524 1 47 1525 1 47 1526 1 47 1527 1 47 1528 1 47 1529 1 47 1530 1 47 1531 1 47 1532 1 47 1533 1 47 1534 1 47 1535 1 47 1536 1 47 1537 1 47 1538 1 47 1539 1 47 1540 1 47 1541 1 47 1542 1 47 1543 1 47 1544 1 47 1545 1 47 1546 1 47 1547 1 47 1548 1 47 1549 1 47 1550 1 47 1551 1 47 1552 1 47 1553 1 47 1554 1 47 1555 1 47 1556 1 47 1557 1 47 1558 1 47 1559 1 47 1560 1 47 1561 1 47 1562 1 47 1563 1 47 1564 1 47 1565 1 47 1566 1 47 1567 1 47 1568 1 47 1569 1 47 1570 1 47 1571 1 47 1572 1 47 1573 1 47 1574 1 47 1575 1 47 1576 1 47 1717 1 47 1718 1 47 1719 1 47 1720 1 47 1721 1 47 1722 1 47 1723 1 47 1724 1 47 1725 1 47 1726 1 47 1727 1 47 1728 1 47 1729 1 47 1730 1 47 1731 1 47 1732 1 47 1733 1 47 1734 1 47 1735 1 47 1736 1 47 1737 1 47 1738 1 47 1739 1 47 1740 1 47 1741 1 47 1742 1 47 1743 1 47 1744 1 47 1927 1 47 1928 1 47 1929 1 47 1930 1 47 1931 1 47 1932 1 47 1933 1 47 1934 1 47 1935 1 47 1936 1 47 1937 1 47 1938 1 47 1939 1 47 1940 1 47 1941 1 47 1942 1 47 1943 1 47 1944 1 47 1945 1 47 1946 1 47 1947 1 47 1948 1 47 1949 1 47 1950 1 47 1951 1 47 1952 1 47 1953 1 47 1954 1 47 1955 1 47 1956 1 47 1957 1 47 1958 1 47 1959 1 47 1960 1 47 1961 1 47 1962 1 47 1963 1 47 1964 1 47 1965 1 47 1966 1 47 1967 1 47 1968 1 47 1969 1 47 1970 1 47 1971 1 47 1972 1 47 1973 1 47 1974 1 47 1975 1 47 1976 1 47 1977 1 47 1978 1 47 1979 1 47 1980 1 47 1981 1 47 1982 1 47 2179 1 47 2180 1 47 2181 1 47 2182 1 47 2183 1 47 2184 1 47 2185 1 47 2186 1 47 2187 1 47 2188 1 47 2189 1 47 2190 1 47 2191 1 47 2192 1 47 2193 1 47 2194 1 47 2195 1 47 2196 1 47 2197 1 47 2198 1 47 2199 1 47 2200 1 47 2201 1 47 2202 1 47 2203 1 47 2204 1 47 2205 1 47 2206 1 47 2207 1 47 2208 1 47 2209 1 47 2210 1 47 2211 1 47 2212 1 47 2213 1 47 2214 1 47 2215 1 47 2216 1 47 2217 1 47 2218 1 47 2219 1 47 2220 1 47 2221 1 47 2222 1 47 2223 1 47 2224 1 47 2225 1 47 2226 1 47 2227 1 47 2228 1 47 2229 1 47 2230 1 47 2231 1 47 2232 1 47 2233 1 47 2234 1 47 2431 1 47 2432 1 47 2433 1 47 2434 1 47 2435 1 47 2436 1 47 2437 1 47 2438 1 47 2439 1 47 2440 1 47 2441 1 47 2442 1 47 2443 1 47 2444 1 47 2445 1 47 2446 1 47 2447 1 47 2448 1 47 2449 1 47 2450 1 47 2451 1 47 2452 1 47 2453 1 47 2454 1 47 2455 1 47 2456 1 47 2457 1 47 2458 1 47 2459 1 47 2460 1 47 2461 1 47 2462 1 47 2463 1 47 2464 1 47 2465 1 47 2466 1 47 2467 1 47 2468 1 47 2469 1 47 2470 1 47 2471 1 47 2472 1 47 2473 1 47 2474 1 47 2475 1 47 2476 1 47 2477 1 47 2478 1 47 2479 1 47 2480 1 47 2481 1 47 2482 1 47 2483 1 47 2484 1 47 2485 1 47 2486 1 47 2487 1 47 2488 1 47 2489 1 47 2490 1 47 2491 1 47 2492 1 47 2493 1 47 2494 1 47 2495 1 47 2496 1 47 2497 1 47 2498 1 47 2499 1 47 2500 1 47 2641 1 47 2642 1 47 2643 1 47 2644 1 47 2645 1 47 2646 1 47 2647 1 47 2648 1 47 2649 1 47 2650 1 47 2651 1 47 2652 1 47 2653 1 47 2654 1 47 2655 1 47 2656 1 47 2657 1 47 2658 1 47 2659 1 47 2660 1 47 2661 1 47 2662 1 47 2663 1 47 2664 1 47 2665 1 47 2666 1 47 2667 1 47 2668 1 47 2669 1 47 2670 1 47 2671 1 47 2672 1 47 2673 1 47 2674 1 47 2675 1 47 2676 1 47 2677 1 47 2678 1 47 2679 1 47 2680 1 47 2681 1 47 2682 1 47 2683 1 47 2684 1 47 2685 1 47 2686 1 47 2687 1 47 2688 1 47 2689 1 47 2690 1 47 2691 1 47 2692 1 47 2693 1 47 2694 1 47 2695 1 47 2696 1 47 2893 1 47 2894 1 47 2895 1 47 2896 1 47 2897 1 47 2898 1 47 2899 1 47 2900 1 47 2901 1 47 2902 1 47 2903 1 47 2904 1 47 2905 1 47 2906 1 47 2907 1 47 2908 1 47 2909 1 47 2910 1 47 2911 1 47 2912 1 47 2913 1 47 2914 1 47 2915 1 47 2916 1 47 2917 1 47 2918 1 47 2919 1 47 2920 1 47 2921 1 47 2922 1 47 2923 1 47 2924 1 47 2925 1 47 2926 1 47 2927 1 47 2928 1 47 2929 1 47 2930 1 47 2931 1 47 2932 1 47 2933 1 47 2934 1 47 2935 1 47 2936 1 47 2937 1 47 2938 1 47 2939 1 47 2940 1 47 2941 1 47 2942 1 47 2943 1 47 2944 1 47 2945 1 47 2946 1 47 2947 1 47 2948 1 47 2949 1 47 2950 1 47 2951 1 47 2952 1 47 2953 1 47 2954 1 47 2955 1 47 2956 1 47 2957 1 47 2958 1 47 2959 1 47 2960 1 47 2961 1 47 2962 1 47 3103 1 47 3104 1 47 3105 1 47 3106 1 47 3107 1 47 3108 1 47 3109 1 47 3110 1 47 3111 1 47 3112 1 47 3113 1 47 3114 1 47 3115 1 47 3116 1 47 3117 1 47 3118 1 47 3119 1 47 3120 1 47 3121 1 47 3122 1 47 3123 1 47 3124 1 47 3125 1 47 3126 1 47 3127 1 47 3128 1 47 3129 1 47 3130 1 47 3131 1 47 3132 1 47 3133 1 47 3134 1 47 3135 1 47 3136 1 47 3137 1 47 3138 1 47 3139 1 47 3140 1 47 3141 1 47 3142 1 47 3143 1 47 3144 1 47 3145 1 47 3146 1 47 3147 1 47 3148 1 47 3149 1 47 3150 1 47 3151 1 47 3152 1 47 3153 1 47 3154 1 47 3155 1 47 3156 1 47 3157 1 47 3158 1 47 3159 1 47 3160 1 47 3161 1 47 3162 1 47 3163 1 47 3164 1 47 3165 1 47 3166 1 47 3167 1 47 3168 1 47 3169 1 47 3170 1 47 3171 1 47 3172 1 47 3313 1 47 3314 1 47 3315 1 47 3316 1 47 3317 1 47 3318 1 47 3319 1 47 3320 1 47 3321 1 47 3322 1 47 3323 1 47 3324 1 47 3325 1 47 3326 1 47 3327 1 47 3328 1 47 3329 1 47 3330 1 47 3331 1 47 3332 1 47 3333 1 47 3334 1 47 3335 1 47 3336 1 47 3337 1 47 3338 1 47 3339 1 47 3340 1 47 3341 1 47 3342 1 47 3343 1 47 3344 1 47 3345 1 47 3346 1 47 3347 1 47 3348 1 47 3349 1 47 3350 1 47 3351 1 47 3352 1 47 3353 1 47 3354 1 47 3355 1 47 3356 1 47 3357 1 47 3358 1 47 3359 1 47 3360 1 47 3361 1 47 3362 1 47 3363 1 47 3364 1 47 3365 1 47 3366 1 47 3367 1 47 3368 1 48 1 1 48 9 1 48 10 1 48 11 1 48 12 1 48 13 1 48 14 1 48 15 1 48 121 1 48 122 1 48 123 1 48 124 1 48 125 1 48 126 1 48 127 1 48 149 1 48 150 1 48 151 1 48 152 1 48 153 1 48 154 1 48 155 1 48 156 1 48 157 1 48 158 1 48 159 1 48 160 1 48 161 1 48 162 1 48 163 1 48 164 1 48 165 1 48 166 1 48 167 1 48 168 1 48 169 1 48 331 1 48 332 1 48 333 1 48 334 1 48 335 1 48 336 1 48 337 1 48 359 1 48 360 1 48 361 1 48 362 1 48 363 1 48 364 1 48 365 1 48 366 1 48 367 1 48 368 1 48 369 1 48 370 1 48 371 1 48 372 1 48 373 1 48 374 1 48 375 1 48 376 1 48 377 1 48 378 1 48 379 1 48 541 1 48 542 1 48 543 1 48 544 1 48 545 1 48 546 1 48 547 1 48 548 1 48 549 1 48 550 1 48 551 1 48 552 1 48 553 1 48 554 1 48 555 1 48 556 1 48 557 1 48 558 1 48 559 1 48 560 1 48 561 1 48 597 1 48 598 1 48 599 1 48 600 1 48 601 1 48 602 1 48 603 1 48 604 1 48 605 1 48 606 1 48 607 1 48 608 1 48 609 1 48 610 1 48 611 1 48 612 1 48 613 1 48 614 1 48 615 1 48 616 1 48 617 1 48 618 1 48 619 1 48 620 1 48 621 1 48 622 1 48 623 1 48 624 1 48 625 1 48 626 1 48 627 1 48 628 1 48 629 1 48 630 1 48 631 1 48 793 1 48 794 1 48 795 1 48 796 1 48 797 1 48 798 1 48 799 1 48 821 1 48 822 1 48 823 1 48 824 1 48 825 1 48 826 1 48 827 1 48 828 1 48 829 1 48 830 1 48 831 1 48 832 1 48 833 1 48 834 1 48 835 1 48 836 1 48 837 1 48 838 1 48 839 1 48 840 1 48 841 1 48 1003 1 48 1004 1 48 1005 1 48 1006 1 48 1007 1 48 1008 1 48 1009 1 48 1010 1 48 1011 1 48 1012 1 48 1013 1 48 1014 1 48 1015 1 48 1016 1 48 1017 1 48 1018 1 48 1019 1 48 1020 1 48 1021 1 48 1022 1 48 1023 1 48 1059 1 48 1060 1 48 1061 1 48 1062 1 48 1063 1 48 1064 1 48 1065 1 48 1066 1 48 1067 1 48 1068 1 48 1069 1 48 1070 1 48 1071 1 48 1072 1 48 1073 1 48 1074 1 48 1075 1 48 1076 1 48 1077 1 48 1078 1 48 1079 1 48 1080 1 48 1081 1 48 1082 1 48 1083 1 48 1084 1 48 1085 1 48 1086 1 48 1087 1 48 1088 1 48 1089 1 48 1090 1 48 1091 1 48 1092 1 48 1093 1 48 1255 1 48 1256 1 48 1257 1 48 1258 1 48 1259 1 48 1260 1 48 1261 1 48 1262 1 48 1263 1 48 1264 1 48 1265 1 48 1266 1 48 1267 1 48 1268 1 48 1269 1 48 1270 1 48 1271 1 48 1272 1 48 1273 1 48 1274 1 48 1275 1 48 1311 1 48 1312 1 48 1313 1 48 1314 1 48 1315 1 48 1316 1 48 1317 1 48 1318 1 48 1319 1 48 1320 1 48 1321 1 48 1322 1 48 1323 1 48 1324 1 48 1325 1 48 1326 1 48 1327 1 48 1328 1 48 1329 1 48 1330 1 48 1331 1 48 1332 1 48 1333 1 48 1334 1 48 1335 1 48 1336 1 48 1337 1 48 1338 1 48 1339 1 48 1340 1 48 1341 1 48 1342 1 48 1343 1 48 1344 1 48 1345 1 48 1507 1 48 1508 1 48 1509 1 48 1510 1 48 1511 1 48 1512 1 48 1513 1 48 1514 1 48 1515 1 48 1516 1 48 1517 1 48 1518 1 48 1519 1 48 1520 1 48 1521 1 48 1522 1 48 1523 1 48 1524 1 48 1525 1 48 1526 1 48 1527 1 48 1528 1 48 1529 1 48 1530 1 48 1531 1 48 1532 1 48 1533 1 48 1534 1 48 1535 1 48 1536 1 48 1537 1 48 1538 1 48 1539 1 48 1540 1 48 1541 1 48 1577 1 48 1578 1 48 1579 1 48 1580 1 48 1581 1 48 1582 1 48 1583 1 48 1584 1 48 1585 1 48 1586 1 48 1587 1 48 1588 1 48 1589 1 48 1590 1 48 1591 1 48 1592 1 48 1593 1 48 1594 1 48 1595 1 48 1596 1 48 1597 1 48 1598 1 48 1599 1 48 1600 1 48 1601 1 48 1602 1 48 1603 1 48 1604 1 48 1605 1 48 1606 1 48 1607 1 48 1608 1 48 1609 1 48 1610 1 48 1611 1 48 1717 1 48 1718 1 48 1719 1 48 1720 1 48 1721 1 48 1722 1 48 1723 1 48 1745 1 48 1746 1 48 1747 1 48 1748 1 48 1749 1 48 1750 1 48 1751 1 48 1752 1 48 1753 1 48 1754 1 48 1755 1 48 1756 1 48 1757 1 48 1758 1 48 1759 1 48 1760 1 48 1761 1 48 1762 1 48 1763 1 48 1764 1 48 1765 1 48 1927 1 48 1928 1 48 1929 1 48 1930 1 48 1931 1 48 1932 1 48 1933 1 48 1934 1 48 1935 1 48 1936 1 48 1937 1 48 1938 1 48 1939 1 48 1940 1 48 1941 1 48 1942 1 48 1943 1 48 1944 1 48 1945 1 48 1946 1 48 1947 1 48 1983 1 48 1984 1 48 1985 1 48 1986 1 48 1987 1 48 1988 1 48 1989 1 48 1990 1 48 1991 1 48 1992 1 48 1993 1 48 1994 1 48 1995 1 48 1996 1 48 1997 1 48 1998 1 48 1999 1 48 2000 1 48 2001 1 48 2002 1 48 2003 1 48 2004 1 48 2005 1 48 2006 1 48 2007 1 48 2008 1 48 2009 1 48 2010 1 48 2011 1 48 2012 1 48 2013 1 48 2014 1 48 2015 1 48 2016 1 48 2017 1 48 2179 1 48 2180 1 48 2181 1 48 2182 1 48 2183 1 48 2184 1 48 2185 1 48 2186 1 48 2187 1 48 2188 1 48 2189 1 48 2190 1 48 2191 1 48 2192 1 48 2193 1 48 2194 1 48 2195 1 48 2196 1 48 2197 1 48 2198 1 48 2199 1 48 2235 1 48 2236 1 48 2237 1 48 2238 1 48 2239 1 48 2240 1 48 2241 1 48 2242 1 48 2243 1 48 2244 1 48 2245 1 48 2246 1 48 2247 1 48 2248 1 48 2249 1 48 2250 1 48 2251 1 48 2252 1 48 2253 1 48 2254 1 48 2255 1 48 2256 1 48 2257 1 48 2258 1 48 2259 1 48 2260 1 48 2261 1 48 2262 1 48 2263 1 48 2264 1 48 2265 1 48 2266 1 48 2267 1 48 2268 1 48 2269 1 48 2431 1 48 2432 1 48 2433 1 48 2434 1 48 2435 1 48 2436 1 48 2437 1 48 2438 1 48 2439 1 48 2440 1 48 2441 1 48 2442 1 48 2443 1 48 2444 1 48 2445 1 48 2446 1 48 2447 1 48 2448 1 48 2449 1 48 2450 1 48 2451 1 48 2452 1 48 2453 1 48 2454 1 48 2455 1 48 2456 1 48 2457 1 48 2458 1 48 2459 1 48 2460 1 48 2461 1 48 2462 1 48 2463 1 48 2464 1 48 2465 1 48 2501 1 48 2502 1 48 2503 1 48 2504 1 48 2505 1 48 2506 1 48 2507 1 48 2508 1 48 2509 1 48 2510 1 48 2511 1 48 2512 1 48 2513 1 48 2514 1 48 2515 1 48 2516 1 48 2517 1 48 2518 1 48 2519 1 48 2520 1 48 2521 1 48 2522 1 48 2523 1 48 2524 1 48 2525 1 48 2526 1 48 2527 1 48 2528 1 48 2529 1 48 2530 1 48 2531 1 48 2532 1 48 2533 1 48 2534 1 48 2535 1 48 2641 1 48 2642 1 48 2643 1 48 2644 1 48 2645 1 48 2646 1 48 2647 1 48 2648 1 48 2649 1 48 2650 1 48 2651 1 48 2652 1 48 2653 1 48 2654 1 48 2655 1 48 2656 1 48 2657 1 48 2658 1 48 2659 1 48 2660 1 48 2661 1 48 2697 1 48 2698 1 48 2699 1 48 2700 1 48 2701 1 48 2702 1 48 2703 1 48 2704 1 48 2705 1 48 2706 1 48 2707 1 48 2708 1 48 2709 1 48 2710 1 48 2711 1 48 2712 1 48 2713 1 48 2714 1 48 2715 1 48 2716 1 48 2717 1 48 2718 1 48 2719 1 48 2720 1 48 2721 1 48 2722 1 48 2723 1 48 2724 1 48 2725 1 48 2726 1 48 2727 1 48 2728 1 48 2729 1 48 2730 1 48 2731 1 48 2893 1 48 2894 1 48 2895 1 48 2896 1 48 2897 1 48 2898 1 48 2899 1 48 2900 1 48 2901 1 48 2902 1 48 2903 1 48 2904 1 48 2905 1 48 2906 1 48 2907 1 48 2908 1 48 2909 1 48 2910 1 48 2911 1 48 2912 1 48 2913 1 48 2914 1 48 2915 1 48 2916 1 48 2917 1 48 2918 1 48 2919 1 48 2920 1 48 2921 1 48 2922 1 48 2923 1 48 2924 1 48 2925 1 48 2926 1 48 2927 1 48 2963 1 48 2964 1 48 2965 1 48 2966 1 48 2967 1 48 2968 1 48 2969 1 48 2970 1 48 2971 1 48 2972 1 48 2973 1 48 2974 1 48 2975 1 48 2976 1 48 2977 1 48 2978 1 48 2979 1 48 2980 1 48 2981 1 48 2982 1 48 2983 1 48 2984 1 48 2985 1 48 2986 1 48 2987 1 48 2988 1 48 2989 1 48 2990 1 48 2991 1 48 2992 1 48 2993 1 48 2994 1 48 2995 1 48 2996 1 48 2997 1 48 3103 1 48 3104 1 48 3105 1 48 3106 1 48 3107 1 48 3108 1 48 3109 1 48 3110 1 48 3111 1 48 3112 1 48 3113 1 48 3114 1 48 3115 1 48 3116 1 48 3117 1 48 3118 1 48 3119 1 48 3120 1 48 3121 1 48 3122 1 48 3123 1 48 3124 1 48 3125 1 48 3126 1 48 3127 1 48 3128 1 48 3129 1 48 3130 1 48 3131 1 48 3132 1 48 3133 1 48 3134 1 48 3135 1 48 3136 1 48 3137 1 48 3173 1 48 3174 1 48 3175 1 48 3176 1 48 3177 1 48 3178 1 48 3179 1 48 3180 1 48 3181 1 48 3182 1 48 3183 1 48 3184 1 48 3185 1 48 3186 1 48 3187 1 48 3188 1 48 3189 1 48 3190 1 48 3191 1 48 3192 1 48 3193 1 48 3194 1 48 3195 1 48 3196 1 48 3197 1 48 3198 1 48 3199 1 48 3200 1 48 3201 1 48 3202 1 48 3203 1 48 3204 1 48 3205 1 48 3206 1 48 3207 1 48 3313 1 48 3314 1 48 3315 1 48 3316 1 48 3317 1 48 3318 1 48 3319 1 48 3320 1 48 3321 1 48 3322 1 48 3323 1 48 3324 1 48 3325 1 48 3326 1 48 3327 1 48 3328 1 48 3329 1 48 3330 1 48 3331 1 48 3332 1 48 3333 1 48 3334 1 48 3335 1 48 3336 1 48 3337 1 48 3338 1 48 3339 1 48 3340 1 48 3341 1 48 3342 1 48 3343 1 48 3344 1 48 3345 1 48 3346 1 48 3347 1 48 3369 1 48 3370 1 48 3371 1 48 3372 1 48 3373 1 48 3374 1 48 3375 1 48 3376 1 48 3377 1 48 3378 1 48 3379 1 48 3380 1 48 3381 1 48 3382 1 48 3383 1 48 3384 1 48 3385 1 48 3386 1 48 3387 1 48 3388 1 48 3389 1 49 2 1 49 9 1 49 16 1 49 17 1 49 18 1 49 19 1 49 20 1 49 21 1 49 121 1 49 128 1 49 129 1 49 130 1 49 131 1 49 132 1 49 133 1 49 149 1 49 150 1 49 151 1 49 152 1 49 153 1 49 154 1 49 170 1 49 171 1 49 172 1 49 173 1 49 174 1 49 175 1 49 176 1 49 177 1 49 178 1 49 179 1 49 180 1 49 181 1 49 182 1 49 183 1 49 184 1 49 331 1 49 338 1 49 339 1 49 340 1 49 341 1 49 342 1 49 343 1 49 359 1 49 360 1 49 361 1 49 362 1 49 363 1 49 364 1 49 380 1 49 381 1 49 382 1 49 383 1 49 384 1 49 385 1 49 386 1 49 387 1 49 388 1 49 389 1 49 390 1 49 391 1 49 392 1 49 393 1 49 394 1 49 541 1 49 542 1 49 543 1 49 544 1 49 545 1 49 546 1 49 562 1 49 563 1 49 564 1 49 565 1 49 566 1 49 567 1 49 568 1 49 569 1 49 570 1 49 571 1 49 572 1 49 573 1 49 574 1 49 575 1 49 576 1 49 597 1 49 598 1 49 599 1 49 600 1 49 601 1 49 602 1 49 603 1 49 604 1 49 605 1 49 606 1 49 607 1 49 608 1 49 609 1 49 610 1 49 611 1 49 632 1 49 633 1 49 634 1 49 635 1 49 636 1 49 637 1 49 638 1 49 639 1 49 640 1 49 641 1 49 642 1 49 643 1 49 644 1 49 645 1 49 646 1 49 647 1 49 648 1 49 649 1 49 650 1 49 651 1 49 793 1 49 800 1 49 801 1 49 802 1 49 803 1 49 804 1 49 805 1 49 821 1 49 822 1 49 823 1 49 824 1 49 825 1 49 826 1 49 842 1 49 843 1 49 844 1 49 845 1 49 846 1 49 847 1 49 848 1 49 849 1 49 850 1 49 851 1 49 852 1 49 853 1 49 854 1 49 855 1 49 856 1 49 1003 1 49 1004 1 49 1005 1 49 1006 1 49 1007 1 49 1008 1 49 1024 1 49 1025 1 49 1026 1 49 1027 1 49 1028 1 49 1029 1 49 1030 1 49 1031 1 49 1032 1 49 1033 1 49 1034 1 49 1035 1 49 1036 1 49 1037 1 49 1038 1 49 1059 1 49 1060 1 49 1061 1 49 1062 1 49 1063 1 49 1064 1 49 1065 1 49 1066 1 49 1067 1 49 1068 1 49 1069 1 49 1070 1 49 1071 1 49 1072 1 49 1073 1 49 1094 1 49 1095 1 49 1096 1 49 1097 1 49 1098 1 49 1099 1 49 1100 1 49 1101 1 49 1102 1 49 1103 1 49 1104 1 49 1105 1 49 1106 1 49 1107 1 49 1108 1 49 1109 1 49 1110 1 49 1111 1 49 1112 1 49 1113 1 49 1255 1 49 1256 1 49 1257 1 49 1258 1 49 1259 1 49 1260 1 49 1276 1 49 1277 1 49 1278 1 49 1279 1 49 1280 1 49 1281 1 49 1282 1 49 1283 1 49 1284 1 49 1285 1 49 1286 1 49 1287 1 49 1288 1 49 1289 1 49 1290 1 49 1311 1 49 1312 1 49 1313 1 49 1314 1 49 1315 1 49 1316 1 49 1317 1 49 1318 1 49 1319 1 49 1320 1 49 1321 1 49 1322 1 49 1323 1 49 1324 1 49 1325 1 49 1346 1 49 1347 1 49 1348 1 49 1349 1 49 1350 1 49 1351 1 49 1352 1 49 1353 1 49 1354 1 49 1355 1 49 1356 1 49 1357 1 49 1358 1 49 1359 1 49 1360 1 49 1361 1 49 1362 1 49 1363 1 49 1364 1 49 1365 1 49 1507 1 49 1508 1 49 1509 1 49 1510 1 49 1511 1 49 1512 1 49 1513 1 49 1514 1 49 1515 1 49 1516 1 49 1517 1 49 1518 1 49 1519 1 49 1520 1 49 1521 1 49 1542 1 49 1543 1 49 1544 1 49 1545 1 49 1546 1 49 1547 1 49 1548 1 49 1549 1 49 1550 1 49 1551 1 49 1552 1 49 1553 1 49 1554 1 49 1555 1 49 1556 1 49 1557 1 49 1558 1 49 1559 1 49 1560 1 49 1561 1 49 1577 1 49 1578 1 49 1579 1 49 1580 1 49 1581 1 49 1582 1 49 1583 1 49 1584 1 49 1585 1 49 1586 1 49 1587 1 49 1588 1 49 1589 1 49 1590 1 49 1591 1 49 1592 1 49 1593 1 49 1594 1 49 1595 1 49 1596 1 49 1612 1 49 1613 1 49 1614 1 49 1615 1 49 1616 1 49 1617 1 49 1618 1 49 1619 1 49 1620 1 49 1621 1 49 1622 1 49 1623 1 49 1624 1 49 1625 1 49 1626 1 49 1717 1 49 1724 1 49 1725 1 49 1726 1 49 1727 1 49 1728 1 49 1729 1 49 1745 1 49 1746 1 49 1747 1 49 1748 1 49 1749 1 49 1750 1 49 1766 1 49 1767 1 49 1768 1 49 1769 1 49 1770 1 49 1771 1 49 1772 1 49 1773 1 49 1774 1 49 1775 1 49 1776 1 49 1777 1 49 1778 1 49 1779 1 49 1780 1 49 1927 1 49 1928 1 49 1929 1 49 1930 1 49 1931 1 49 1932 1 49 1948 1 49 1949 1 49 1950 1 49 1951 1 49 1952 1 49 1953 1 49 1954 1 49 1955 1 49 1956 1 49 1957 1 49 1958 1 49 1959 1 49 1960 1 49 1961 1 49 1962 1 49 1983 1 49 1984 1 49 1985 1 49 1986 1 49 1987 1 49 1988 1 49 1989 1 49 1990 1 49 1991 1 49 1992 1 49 1993 1 49 1994 1 49 1995 1 49 1996 1 49 1997 1 49 2018 1 49 2019 1 49 2020 1 49 2021 1 49 2022 1 49 2023 1 49 2024 1 49 2025 1 49 2026 1 49 2027 1 49 2028 1 49 2029 1 49 2030 1 49 2031 1 49 2032 1 49 2033 1 49 2034 1 49 2035 1 49 2036 1 49 2037 1 49 2179 1 49 2180 1 49 2181 1 49 2182 1 49 2183 1 49 2184 1 49 2200 1 49 2201 1 49 2202 1 49 2203 1 49 2204 1 49 2205 1 49 2206 1 49 2207 1 49 2208 1 49 2209 1 49 2210 1 49 2211 1 49 2212 1 49 2213 1 49 2214 1 49 2235 1 49 2236 1 49 2237 1 49 2238 1 49 2239 1 49 2240 1 49 2241 1 49 2242 1 49 2243 1 49 2244 1 49 2245 1 49 2246 1 49 2247 1 49 2248 1 49 2249 1 49 2270 1 49 2271 1 49 2272 1 49 2273 1 49 2274 1 49 2275 1 49 2276 1 49 2277 1 49 2278 1 49 2279 1 49 2280 1 49 2281 1 49 2282 1 49 2283 1 49 2284 1 49 2285 1 49 2286 1 49 2287 1 49 2288 1 49 2289 1 49 2431 1 49 2432 1 49 2433 1 49 2434 1 49 2435 1 49 2436 1 49 2437 1 49 2438 1 49 2439 1 49 2440 1 49 2441 1 49 2442 1 49 2443 1 49 2444 1 49 2445 1 49 2466 1 49 2467 1 49 2468 1 49 2469 1 49 2470 1 49 2471 1 49 2472 1 49 2473 1 49 2474 1 49 2475 1 49 2476 1 49 2477 1 49 2478 1 49 2479 1 49 2480 1 49 2481 1 49 2482 1 49 2483 1 49 2484 1 49 2485 1 49 2501 1 49 2502 1 49 2503 1 49 2504 1 49 2505 1 49 2506 1 49 2507 1 49 2508 1 49 2509 1 49 2510 1 49 2511 1 49 2512 1 49 2513 1 49 2514 1 49 2515 1 49 2516 1 49 2517 1 49 2518 1 49 2519 1 49 2520 1 49 2536 1 49 2537 1 49 2538 1 49 2539 1 49 2540 1 49 2541 1 49 2542 1 49 2543 1 49 2544 1 49 2545 1 49 2546 1 49 2547 1 49 2548 1 49 2549 1 49 2550 1 49 2641 1 49 2642 1 49 2643 1 49 2644 1 49 2645 1 49 2646 1 49 2662 1 49 2663 1 49 2664 1 49 2665 1 49 2666 1 49 2667 1 49 2668 1 49 2669 1 49 2670 1 49 2671 1 49 2672 1 49 2673 1 49 2674 1 49 2675 1 49 2676 1 49 2697 1 49 2698 1 49 2699 1 49 2700 1 49 2701 1 49 2702 1 49 2703 1 49 2704 1 49 2705 1 49 2706 1 49 2707 1 49 2708 1 49 2709 1 49 2710 1 49 2711 1 49 2732 1 49 2733 1 49 2734 1 49 2735 1 49 2736 1 49 2737 1 49 2738 1 49 2739 1 49 2740 1 49 2741 1 49 2742 1 49 2743 1 49 2744 1 49 2745 1 49 2746 1 49 2747 1 49 2748 1 49 2749 1 49 2750 1 49 2751 1 49 2893 1 49 2894 1 49 2895 1 49 2896 1 49 2897 1 49 2898 1 49 2899 1 49 2900 1 49 2901 1 49 2902 1 49 2903 1 49 2904 1 49 2905 1 49 2906 1 49 2907 1 49 2928 1 49 2929 1 49 2930 1 49 2931 1 49 2932 1 49 2933 1 49 2934 1 49 2935 1 49 2936 1 49 2937 1 49 2938 1 49 2939 1 49 2940 1 49 2941 1 49 2942 1 49 2943 1 49 2944 1 49 2945 1 49 2946 1 49 2947 1 49 2963 1 49 2964 1 49 2965 1 49 2966 1 49 2967 1 49 2968 1 49 2969 1 49 2970 1 49 2971 1 49 2972 1 49 2973 1 49 2974 1 49 2975 1 49 2976 1 49 2977 1 49 2978 1 49 2979 1 49 2980 1 49 2981 1 49 2982 1 49 2998 1 49 2999 1 49 3000 1 49 3001 1 49 3002 1 49 3003 1 49 3004 1 49 3005 1 49 3006 1 49 3007 1 49 3008 1 49 3009 1 49 3010 1 49 3011 1 49 3012 1 49 3103 1 49 3104 1 49 3105 1 49 3106 1 49 3107 1 49 3108 1 49 3109 1 49 3110 1 49 3111 1 49 3112 1 49 3113 1 49 3114 1 49 3115 1 49 3116 1 49 3117 1 49 3138 1 49 3139 1 49 3140 1 49 3141 1 49 3142 1 49 3143 1 49 3144 1 49 3145 1 49 3146 1 49 3147 1 49 3148 1 49 3149 1 49 3150 1 49 3151 1 49 3152 1 49 3153 1 49 3154 1 49 3155 1 49 3156 1 49 3157 1 49 3173 1 49 3174 1 49 3175 1 49 3176 1 49 3177 1 49 3178 1 49 3179 1 49 3180 1 49 3181 1 49 3182 1 49 3183 1 49 3184 1 49 3185 1 49 3186 1 49 3187 1 49 3188 1 49 3189 1 49 3190 1 49 3191 1 49 3192 1 49 3208 1 49 3209 1 49 3210 1 49 3211 1 49 3212 1 49 3213 1 49 3214 1 49 3215 1 49 3216 1 49 3217 1 49 3218 1 49 3219 1 49 3220 1 49 3221 1 49 3222 1 49 3313 1 49 3314 1 49 3315 1 49 3316 1 49 3317 1 49 3318 1 49 3319 1 49 3320 1 49 3321 1 49 3322 1 49 3323 1 49 3324 1 49 3325 1 49 3326 1 49 3327 1 49 3328 1 49 3329 1 49 3330 1 49 3331 1 49 3332 1 49 3348 1 49 3349 1 49 3350 1 49 3351 1 49 3352 1 49 3353 1 49 3354 1 49 3355 1 49 3356 1 49 3357 1 49 3358 1 49 3359 1 49 3360 1 49 3361 1 49 3362 1 49 3369 1 49 3370 1 49 3371 1 49 3372 1 49 3373 1 49 3374 1 49 3375 1 49 3376 1 49 3377 1 49 3378 1 49 3379 1 49 3380 1 49 3381 1 49 3382 1 49 3383 1 49 3390 1 49 3391 1 49 3392 1 49 3393 1 49 3394 1 49 3395 1 50 3 1 50 10 1 50 16 1 50 22 1 50 23 1 50 24 1 50 25 1 50 26 1 50 122 1 50 128 1 50 134 1 50 135 1 50 136 1 50 137 1 50 138 1 50 149 1 50 155 1 50 156 1 50 157 1 50 158 1 50 159 1 50 170 1 50 171 1 50 172 1 50 173 1 50 174 1 50 185 1 50 186 1 50 187 1 50 188 1 50 189 1 50 190 1 50 191 1 50 192 1 50 193 1 50 194 1 50 332 1 50 338 1 50 344 1 50 345 1 50 346 1 50 347 1 50 348 1 50 359 1 50 365 1 50 366 1 50 367 1 50 368 1 50 369 1 50 380 1 50 381 1 50 382 1 50 383 1 50 384 1 50 395 1 50 396 1 50 397 1 50 398 1 50 399 1 50 400 1 50 401 1 50 402 1 50 403 1 50 404 1 50 541 1 50 547 1 50 548 1 50 549 1 50 550 1 50 551 1 50 562 1 50 563 1 50 564 1 50 565 1 50 566 1 50 577 1 50 578 1 50 579 1 50 580 1 50 581 1 50 582 1 50 583 1 50 584 1 50 585 1 50 586 1 50 597 1 50 598 1 50 599 1 50 600 1 50 601 1 50 612 1 50 613 1 50 614 1 50 615 1 50 616 1 50 617 1 50 618 1 50 619 1 50 620 1 50 621 1 50 632 1 50 633 1 50 634 1 50 635 1 50 636 1 50 637 1 50 638 1 50 639 1 50 640 1 50 641 1 50 652 1 50 653 1 50 654 1 50 655 1 50 656 1 50 657 1 50 658 1 50 659 1 50 660 1 50 661 1 50 794 1 50 800 1 50 806 1 50 807 1 50 808 1 50 809 1 50 810 1 50 821 1 50 827 1 50 828 1 50 829 1 50 830 1 50 831 1 50 842 1 50 843 1 50 844 1 50 845 1 50 846 1 50 857 1 50 858 1 50 859 1 50 860 1 50 861 1 50 862 1 50 863 1 50 864 1 50 865 1 50 866 1 50 1003 1 50 1009 1 50 1010 1 50 1011 1 50 1012 1 50 1013 1 50 1024 1 50 1025 1 50 1026 1 50 1027 1 50 1028 1 50 1039 1 50 1040 1 50 1041 1 50 1042 1 50 1043 1 50 1044 1 50 1045 1 50 1046 1 50 1047 1 50 1048 1 50 1059 1 50 1060 1 50 1061 1 50 1062 1 50 1063 1 50 1074 1 50 1075 1 50 1076 1 50 1077 1 50 1078 1 50 1079 1 50 1080 1 50 1081 1 50 1082 1 50 1083 1 50 1094 1 50 1095 1 50 1096 1 50 1097 1 50 1098 1 50 1099 1 50 1100 1 50 1101 1 50 1102 1 50 1103 1 50 1114 1 50 1115 1 50 1116 1 50 1117 1 50 1118 1 50 1119 1 50 1120 1 50 1121 1 50 1122 1 50 1123 1 50 1255 1 50 1261 1 50 1262 1 50 1263 1 50 1264 1 50 1265 1 50 1276 1 50 1277 1 50 1278 1 50 1279 1 50 1280 1 50 1291 1 50 1292 1 50 1293 1 50 1294 1 50 1295 1 50 1296 1 50 1297 1 50 1298 1 50 1299 1 50 1300 1 50 1311 1 50 1312 1 50 1313 1 50 1314 1 50 1315 1 50 1326 1 50 1327 1 50 1328 1 50 1329 1 50 1330 1 50 1331 1 50 1332 1 50 1333 1 50 1334 1 50 1335 1 50 1346 1 50 1347 1 50 1348 1 50 1349 1 50 1350 1 50 1351 1 50 1352 1 50 1353 1 50 1354 1 50 1355 1 50 1366 1 50 1367 1 50 1368 1 50 1369 1 50 1370 1 50 1371 1 50 1372 1 50 1373 1 50 1374 1 50 1375 1 50 1507 1 50 1508 1 50 1509 1 50 1510 1 50 1511 1 50 1522 1 50 1523 1 50 1524 1 50 1525 1 50 1526 1 50 1527 1 50 1528 1 50 1529 1 50 1530 1 50 1531 1 50 1542 1 50 1543 1 50 1544 1 50 1545 1 50 1546 1 50 1547 1 50 1548 1 50 1549 1 50 1550 1 50 1551 1 50 1562 1 50 1563 1 50 1564 1 50 1565 1 50 1566 1 50 1567 1 50 1568 1 50 1569 1 50 1570 1 50 1571 1 50 1577 1 50 1578 1 50 1579 1 50 1580 1 50 1581 1 50 1582 1 50 1583 1 50 1584 1 50 1585 1 50 1586 1 50 1597 1 50 1598 1 50 1599 1 50 1600 1 50 1601 1 50 1602 1 50 1603 1 50 1604 1 50 1605 1 50 1606 1 50 1612 1 50 1613 1 50 1614 1 50 1615 1 50 1616 1 50 1617 1 50 1618 1 50 1619 1 50 1620 1 50 1621 1 50 1627 1 50 1628 1 50 1629 1 50 1630 1 50 1631 1 50 1718 1 50 1724 1 50 1730 1 50 1731 1 50 1732 1 50 1733 1 50 1734 1 50 1745 1 50 1751 1 50 1752 1 50 1753 1 50 1754 1 50 1755 1 50 1766 1 50 1767 1 50 1768 1 50 1769 1 50 1770 1 50 1781 1 50 1782 1 50 1783 1 50 1784 1 50 1785 1 50 1786 1 50 1787 1 50 1788 1 50 1789 1 50 1790 1 50 1927 1 50 1933 1 50 1934 1 50 1935 1 50 1936 1 50 1937 1 50 1948 1 50 1949 1 50 1950 1 50 1951 1 50 1952 1 50 1963 1 50 1964 1 50 1965 1 50 1966 1 50 1967 1 50 1968 1 50 1969 1 50 1970 1 50 1971 1 50 1972 1 50 1983 1 50 1984 1 50 1985 1 50 1986 1 50 1987 1 50 1998 1 50 1999 1 50 2000 1 50 2001 1 50 2002 1 50 2003 1 50 2004 1 50 2005 1 50 2006 1 50 2007 1 50 2018 1 50 2019 1 50 2020 1 50 2021 1 50 2022 1 50 2023 1 50 2024 1 50 2025 1 50 2026 1 50 2027 1 50 2038 1 50 2039 1 50 2040 1 50 2041 1 50 2042 1 50 2043 1 50 2044 1 50 2045 1 50 2046 1 50 2047 1 50 2179 1 50 2185 1 50 2186 1 50 2187 1 50 2188 1 50 2189 1 50 2200 1 50 2201 1 50 2202 1 50 2203 1 50 2204 1 50 2215 1 50 2216 1 50 2217 1 50 2218 1 50 2219 1 50 2220 1 50 2221 1 50 2222 1 50 2223 1 50 2224 1 50 2235 1 50 2236 1 50 2237 1 50 2238 1 50 2239 1 50 2250 1 50 2251 1 50 2252 1 50 2253 1 50 2254 1 50 2255 1 50 2256 1 50 2257 1 50 2258 1 50 2259 1 50 2270 1 50 2271 1 50 2272 1 50 2273 1 50 2274 1 50 2275 1 50 2276 1 50 2277 1 50 2278 1 50 2279 1 50 2290 1 50 2291 1 50 2292 1 50 2293 1 50 2294 1 50 2295 1 50 2296 1 50 2297 1 50 2298 1 50 2299 1 50 2431 1 50 2432 1 50 2433 1 50 2434 1 50 2435 1 50 2446 1 50 2447 1 50 2448 1 50 2449 1 50 2450 1 50 2451 1 50 2452 1 50 2453 1 50 2454 1 50 2455 1 50 2466 1 50 2467 1 50 2468 1 50 2469 1 50 2470 1 50 2471 1 50 2472 1 50 2473 1 50 2474 1 50 2475 1 50 2486 1 50 2487 1 50 2488 1 50 2489 1 50 2490 1 50 2491 1 50 2492 1 50 2493 1 50 2494 1 50 2495 1 50 2501 1 50 2502 1 50 2503 1 50 2504 1 50 2505 1 50 2506 1 50 2507 1 50 2508 1 50 2509 1 50 2510 1 50 2521 1 50 2522 1 50 2523 1 50 2524 1 50 2525 1 50 2526 1 50 2527 1 50 2528 1 50 2529 1 50 2530 1 50 2536 1 50 2537 1 50 2538 1 50 2539 1 50 2540 1 50 2541 1 50 2542 1 50 2543 1 50 2544 1 50 2545 1 50 2551 1 50 2552 1 50 2553 1 50 2554 1 50 2555 1 50 2641 1 50 2647 1 50 2648 1 50 2649 1 50 2650 1 50 2651 1 50 2662 1 50 2663 1 50 2664 1 50 2665 1 50 2666 1 50 2677 1 50 2678 1 50 2679 1 50 2680 1 50 2681 1 50 2682 1 50 2683 1 50 2684 1 50 2685 1 50 2686 1 50 2697 1 50 2698 1 50 2699 1 50 2700 1 50 2701 1 50 2712 1 50 2713 1 50 2714 1 50 2715 1 50 2716 1 50 2717 1 50 2718 1 50 2719 1 50 2720 1 50 2721 1 50 2732 1 50 2733 1 50 2734 1 50 2735 1 50 2736 1 50 2737 1 50 2738 1 50 2739 1 50 2740 1 50 2741 1 50 2752 1 50 2753 1 50 2754 1 50 2755 1 50 2756 1 50 2757 1 50 2758 1 50 2759 1 50 2760 1 50 2761 1 50 2893 1 50 2894 1 50 2895 1 50 2896 1 50 2897 1 50 2908 1 50 2909 1 50 2910 1 50 2911 1 50 2912 1 50 2913 1 50 2914 1 50 2915 1 50 2916 1 50 2917 1 50 2928 1 50 2929 1 50 2930 1 50 2931 1 50 2932 1 50 2933 1 50 2934 1 50 2935 1 50 2936 1 50 2937 1 50 2948 1 50 2949 1 50 2950 1 50 2951 1 50 2952 1 50 2953 1 50 2954 1 50 2955 1 50 2956 1 50 2957 1 50 2963 1 50 2964 1 50 2965 1 50 2966 1 50 2967 1 50 2968 1 50 2969 1 50 2970 1 50 2971 1 50 2972 1 50 2983 1 50 2984 1 50 2985 1 50 2986 1 50 2987 1 50 2988 1 50 2989 1 50 2990 1 50 2991 1 50 2992 1 50 2998 1 50 2999 1 50 3000 1 50 3001 1 50 3002 1 50 3003 1 50 3004 1 50 3005 1 50 3006 1 50 3007 1 50 3013 1 50 3014 1 50 3015 1 50 3016 1 50 3017 1 50 3103 1 50 3104 1 50 3105 1 50 3106 1 50 3107 1 50 3118 1 50 3119 1 50 3120 1 50 3121 1 50 3122 1 50 3123 1 50 3124 1 50 3125 1 50 3126 1 50 3127 1 50 3138 1 50 3139 1 50 3140 1 50 3141 1 50 3142 1 50 3143 1 50 3144 1 50 3145 1 50 3146 1 50 3147 1 50 3158 1 50 3159 1 50 3160 1 50 3161 1 50 3162 1 50 3163 1 50 3164 1 50 3165 1 50 3166 1 50 3167 1 50 3173 1 50 3174 1 50 3175 1 50 3176 1 50 3177 1 50 3178 1 50 3179 1 50 3180 1 50 3181 1 50 3182 1 50 3193 1 50 3194 1 50 3195 1 50 3196 1 50 3197 1 50 3198 1 50 3199 1 50 3200 1 50 3201 1 50 3202 1 50 3208 1 50 3209 1 50 3210 1 50 3211 1 50 3212 1 50 3213 1 50 3214 1 50 3215 1 50 3216 1 50 3217 1 50 3223 1 50 3224 1 50 3225 1 50 3226 1 50 3227 1 50 3313 1 50 3314 1 50 3315 1 50 3316 1 50 3317 1 50 3318 1 50 3319 1 50 3320 1 50 3321 1 50 3322 1 50 3333 1 50 3334 1 50 3335 1 50 3336 1 50 3337 1 50 3338 1 50 3339 1 50 3340 1 50 3341 1 50 3342 1 50 3348 1 50 3349 1 50 3350 1 50 3351 1 50 3352 1 50 3353 1 50 3354 1 50 3355 1 50 3356 1 50 3357 1 50 3363 1 50 3364 1 50 3365 1 50 3366 1 50 3367 1 50 3369 1 50 3370 1 50 3371 1 50 3372 1 50 3373 1 50 3374 1 50 3375 1 50 3376 1 50 3377 1 50 3378 1 50 3384 1 50 3385 1 50 3386 1 50 3387 1 50 3388 1 50 3390 1 50 3391 1 50 3392 1 50 3393 1 50 3394 1 50 3396 1 51 4 1 51 11 1 51 17 1 51 22 1 51 27 1 51 28 1 51 29 1 51 30 1 51 123 1 51 129 1 51 134 1 51 139 1 51 140 1 51 141 1 51 142 1 51 150 1 51 155 1 51 160 1 51 161 1 51 162 1 51 163 1 51 170 1 51 175 1 51 176 1 51 177 1 51 178 1 51 185 1 51 186 1 51 187 1 51 188 1 51 195 1 51 196 1 51 197 1 51 198 1 51 199 1 51 200 1 51 333 1 51 339 1 51 344 1 51 349 1 51 350 1 51 351 1 51 352 1 51 360 1 51 365 1 51 370 1 51 371 1 51 372 1 51 373 1 51 380 1 51 385 1 51 386 1 51 387 1 51 388 1 51 395 1 51 396 1 51 397 1 51 398 1 51 405 1 51 406 1 51 407 1 51 408 1 51 409 1 51 410 1 51 542 1 51 547 1 51 552 1 51 553 1 51 554 1 51 555 1 51 562 1 51 567 1 51 568 1 51 569 1 51 570 1 51 577 1 51 578 1 51 579 1 51 580 1 51 587 1 51 588 1 51 589 1 51 590 1 51 591 1 51 592 1 51 597 1 51 602 1 51 603 1 51 604 1 51 605 1 51 612 1 51 613 1 51 614 1 51 615 1 51 622 1 51 623 1 51 624 1 51 625 1 51 626 1 51 627 1 51 632 1 51 633 1 51 634 1 51 635 1 51 642 1 51 643 1 51 644 1 51 645 1 51 646 1 51 647 1 51 652 1 51 653 1 51 654 1 51 655 1 51 656 1 51 657 1 51 662 1 51 663 1 51 664 1 51 665 1 51 795 1 51 801 1 51 806 1 51 811 1 51 812 1 51 813 1 51 814 1 51 822 1 51 827 1 51 832 1 51 833 1 51 834 1 51 835 1 51 842 1 51 847 1 51 848 1 51 849 1 51 850 1 51 857 1 51 858 1 51 859 1 51 860 1 51 867 1 51 868 1 51 869 1 51 870 1 51 871 1 51 872 1 51 1004 1 51 1009 1 51 1014 1 51 1015 1 51 1016 1 51 1017 1 51 1024 1 51 1029 1 51 1030 1 51 1031 1 51 1032 1 51 1039 1 51 1040 1 51 1041 1 51 1042 1 51 1049 1 51 1050 1 51 1051 1 51 1052 1 51 1053 1 51 1054 1 51 1059 1 51 1064 1 51 1065 1 51 1066 1 51 1067 1 51 1074 1 51 1075 1 51 1076 1 51 1077 1 51 1084 1 51 1085 1 51 1086 1 51 1087 1 51 1088 1 51 1089 1 51 1094 1 51 1095 1 51 1096 1 51 1097 1 51 1104 1 51 1105 1 51 1106 1 51 1107 1 51 1108 1 51 1109 1 51 1114 1 51 1115 1 51 1116 1 51 1117 1 51 1118 1 51 1119 1 51 1124 1 51 1125 1 51 1126 1 51 1127 1 51 1256 1 51 1261 1 51 1266 1 51 1267 1 51 1268 1 51 1269 1 51 1276 1 51 1281 1 51 1282 1 51 1283 1 51 1284 1 51 1291 1 51 1292 1 51 1293 1 51 1294 1 51 1301 1 51 1302 1 51 1303 1 51 1304 1 51 1305 1 51 1306 1 51 1311 1 51 1316 1 51 1317 1 51 1318 1 51 1319 1 51 1326 1 51 1327 1 51 1328 1 51 1329 1 51 1336 1 51 1337 1 51 1338 1 51 1339 1 51 1340 1 51 1341 1 51 1346 1 51 1347 1 51 1348 1 51 1349 1 51 1356 1 51 1357 1 51 1358 1 51 1359 1 51 1360 1 51 1361 1 51 1366 1 51 1367 1 51 1368 1 51 1369 1 51 1370 1 51 1371 1 51 1376 1 51 1377 1 51 1378 1 51 1379 1 51 1507 1 51 1512 1 51 1513 1 51 1514 1 51 1515 1 51 1522 1 51 1523 1 51 1524 1 51 1525 1 51 1532 1 51 1533 1 51 1534 1 51 1535 1 51 1536 1 51 1537 1 51 1542 1 51 1543 1 51 1544 1 51 1545 1 51 1552 1 51 1553 1 51 1554 1 51 1555 1 51 1556 1 51 1557 1 51 1562 1 51 1563 1 51 1564 1 51 1565 1 51 1566 1 51 1567 1 51 1572 1 51 1573 1 51 1574 1 51 1575 1 51 1577 1 51 1578 1 51 1579 1 51 1580 1 51 1587 1 51 1588 1 51 1589 1 51 1590 1 51 1591 1 51 1592 1 51 1597 1 51 1598 1 51 1599 1 51 1600 1 51 1601 1 51 1602 1 51 1607 1 51 1608 1 51 1609 1 51 1610 1 51 1612 1 51 1613 1 51 1614 1 51 1615 1 51 1616 1 51 1617 1 51 1622 1 51 1623 1 51 1624 1 51 1625 1 51 1627 1 51 1628 1 51 1629 1 51 1630 1 51 1632 1 51 1719 1 51 1725 1 51 1730 1 51 1735 1 51 1736 1 51 1737 1 51 1738 1 51 1746 1 51 1751 1 51 1756 1 51 1757 1 51 1758 1 51 1759 1 51 1766 1 51 1771 1 51 1772 1 51 1773 1 51 1774 1 51 1781 1 51 1782 1 51 1783 1 51 1784 1 51 1791 1 51 1792 1 51 1793 1 51 1794 1 51 1795 1 51 1796 1 51 1928 1 51 1933 1 51 1938 1 51 1939 1 51 1940 1 51 1941 1 51 1948 1 51 1953 1 51 1954 1 51 1955 1 51 1956 1 51 1963 1 51 1964 1 51 1965 1 51 1966 1 51 1973 1 51 1974 1 51 1975 1 51 1976 1 51 1977 1 51 1978 1 51 1983 1 51 1988 1 51 1989 1 51 1990 1 51 1991 1 51 1998 1 51 1999 1 51 2000 1 51 2001 1 51 2008 1 51 2009 1 51 2010 1 51 2011 1 51 2012 1 51 2013 1 51 2018 1 51 2019 1 51 2020 1 51 2021 1 51 2028 1 51 2029 1 51 2030 1 51 2031 1 51 2032 1 51 2033 1 51 2038 1 51 2039 1 51 2040 1 51 2041 1 51 2042 1 51 2043 1 51 2048 1 51 2049 1 51 2050 1 51 2051 1 51 2180 1 51 2185 1 51 2190 1 51 2191 1 51 2192 1 51 2193 1 51 2200 1 51 2205 1 51 2206 1 51 2207 1 51 2208 1 51 2215 1 51 2216 1 51 2217 1 51 2218 1 51 2225 1 51 2226 1 51 2227 1 51 2228 1 51 2229 1 51 2230 1 51 2235 1 51 2240 1 51 2241 1 51 2242 1 51 2243 1 51 2250 1 51 2251 1 51 2252 1 51 2253 1 51 2260 1 51 2261 1 51 2262 1 51 2263 1 51 2264 1 51 2265 1 51 2270 1 51 2271 1 51 2272 1 51 2273 1 51 2280 1 51 2281 1 51 2282 1 51 2283 1 51 2284 1 51 2285 1 51 2290 1 51 2291 1 51 2292 1 51 2293 1 51 2294 1 51 2295 1 51 2300 1 51 2301 1 51 2302 1 51 2303 1 51 2431 1 51 2436 1 51 2437 1 51 2438 1 51 2439 1 51 2446 1 51 2447 1 51 2448 1 51 2449 1 51 2456 1 51 2457 1 51 2458 1 51 2459 1 51 2460 1 51 2461 1 51 2466 1 51 2467 1 51 2468 1 51 2469 1 51 2476 1 51 2477 1 51 2478 1 51 2479 1 51 2480 1 51 2481 1 51 2486 1 51 2487 1 51 2488 1 51 2489 1 51 2490 1 51 2491 1 51 2496 1 51 2497 1 51 2498 1 51 2499 1 51 2501 1 51 2502 1 51 2503 1 51 2504 1 51 2511 1 51 2512 1 51 2513 1 51 2514 1 51 2515 1 51 2516 1 51 2521 1 51 2522 1 51 2523 1 51 2524 1 51 2525 1 51 2526 1 51 2531 1 51 2532 1 51 2533 1 51 2534 1 51 2536 1 51 2537 1 51 2538 1 51 2539 1 51 2540 1 51 2541 1 51 2546 1 51 2547 1 51 2548 1 51 2549 1 51 2551 1 51 2552 1 51 2553 1 51 2554 1 51 2556 1 51 2642 1 51 2647 1 51 2652 1 51 2653 1 51 2654 1 51 2655 1 51 2662 1 51 2667 1 51 2668 1 51 2669 1 51 2670 1 51 2677 1 51 2678 1 51 2679 1 51 2680 1 51 2687 1 51 2688 1 51 2689 1 51 2690 1 51 2691 1 51 2692 1 51 2697 1 51 2702 1 51 2703 1 51 2704 1 51 2705 1 51 2712 1 51 2713 1 51 2714 1 51 2715 1 51 2722 1 51 2723 1 51 2724 1 51 2725 1 51 2726 1 51 2727 1 51 2732 1 51 2733 1 51 2734 1 51 2735 1 51 2742 1 51 2743 1 51 2744 1 51 2745 1 51 2746 1 51 2747 1 51 2752 1 51 2753 1 51 2754 1 51 2755 1 51 2756 1 51 2757 1 51 2762 1 51 2763 1 51 2764 1 51 2765 1 51 2893 1 51 2898 1 51 2899 1 51 2900 1 51 2901 1 51 2908 1 51 2909 1 51 2910 1 51 2911 1 51 2918 1 51 2919 1 51 2920 1 51 2921 1 51 2922 1 51 2923 1 51 2928 1 51 2929 1 51 2930 1 51 2931 1 51 2938 1 51 2939 1 51 2940 1 51 2941 1 51 2942 1 51 2943 1 51 2948 1 51 2949 1 51 2950 1 51 2951 1 51 2952 1 51 2953 1 51 2958 1 51 2959 1 51 2960 1 51 2961 1 51 2963 1 51 2964 1 51 2965 1 51 2966 1 51 2973 1 51 2974 1 51 2975 1 51 2976 1 51 2977 1 51 2978 1 51 2983 1 51 2984 1 51 2985 1 51 2986 1 51 2987 1 51 2988 1 51 2993 1 51 2994 1 51 2995 1 51 2996 1 51 2998 1 51 2999 1 51 3000 1 51 3001 1 51 3002 1 51 3003 1 51 3008 1 51 3009 1 51 3010 1 51 3011 1 51 3013 1 51 3014 1 51 3015 1 51 3016 1 51 3018 1 51 3103 1 51 3108 1 51 3109 1 51 3110 1 51 3111 1 51 3118 1 51 3119 1 51 3120 1 51 3121 1 51 3128 1 51 3129 1 51 3130 1 51 3131 1 51 3132 1 51 3133 1 51 3138 1 51 3139 1 51 3140 1 51 3141 1 51 3148 1 51 3149 1 51 3150 1 51 3151 1 51 3152 1 51 3153 1 51 3158 1 51 3159 1 51 3160 1 51 3161 1 51 3162 1 51 3163 1 51 3168 1 51 3169 1 51 3170 1 51 3171 1 51 3173 1 51 3174 1 51 3175 1 51 3176 1 51 3183 1 51 3184 1 51 3185 1 51 3186 1 51 3187 1 51 3188 1 51 3193 1 51 3194 1 51 3195 1 51 3196 1 51 3197 1 51 3198 1 51 3203 1 51 3204 1 51 3205 1 51 3206 1 51 3208 1 51 3209 1 51 3210 1 51 3211 1 51 3212 1 51 3213 1 51 3218 1 51 3219 1 51 3220 1 51 3221 1 51 3223 1 51 3224 1 51 3225 1 51 3226 1 51 3228 1 51 3313 1 51 3314 1 51 3315 1 51 3316 1 51 3323 1 51 3324 1 51 3325 1 51 3326 1 51 3327 1 51 3328 1 51 3333 1 51 3334 1 51 3335 1 51 3336 1 51 3337 1 51 3338 1 51 3343 1 51 3344 1 51 3345 1 51 3346 1 51 3348 1 51 3349 1 51 3350 1 51 3351 1 51 3352 1 51 3353 1 51 3358 1 51 3359 1 51 3360 1 51 3361 1 51 3363 1 51 3364 1 51 3365 1 51 3366 1 51 3368 1 51 3369 1 51 3370 1 51 3371 1 51 3372 1 51 3373 1 51 3374 1 51 3379 1 51 3380 1 51 3381 1 51 3382 1 51 3384 1 51 3385 1 51 3386 1 51 3387 1 51 3389 1 51 3390 1 51 3391 1 51 3392 1 51 3393 1 51 3395 1 51 3396 1 52 5 1 52 12 1 52 18 1 52 23 1 52 27 1 52 31 1 52 32 1 52 33 1 52 124 1 52 130 1 52 135 1 52 139 1 52 143 1 52 144 1 52 145 1 52 151 1 52 156 1 52 160 1 52 164 1 52 165 1 52 166 1 52 171 1 52 175 1 52 179 1 52 180 1 52 181 1 52 185 1 52 189 1 52 190 1 52 191 1 52 195 1 52 196 1 52 197 1 52 201 1 52 202 1 52 203 1 52 334 1 52 340 1 52 345 1 52 349 1 52 353 1 52 354 1 52 355 1 52 361 1 52 366 1 52 370 1 52 374 1 52 375 1 52 376 1 52 381 1 52 385 1 52 389 1 52 390 1 52 391 1 52 395 1 52 399 1 52 400 1 52 401 1 52 405 1 52 406 1 52 407 1 52 411 1 52 412 1 52 413 1 52 543 1 52 548 1 52 552 1 52 556 1 52 557 1 52 558 1 52 563 1 52 567 1 52 571 1 52 572 1 52 573 1 52 577 1 52 581 1 52 582 1 52 583 1 52 587 1 52 588 1 52 589 1 52 593 1 52 594 1 52 595 1 52 598 1 52 602 1 52 606 1 52 607 1 52 608 1 52 612 1 52 616 1 52 617 1 52 618 1 52 622 1 52 623 1 52 624 1 52 628 1 52 629 1 52 630 1 52 632 1 52 636 1 52 637 1 52 638 1 52 642 1 52 643 1 52 644 1 52 648 1 52 649 1 52 650 1 52 652 1 52 653 1 52 654 1 52 658 1 52 659 1 52 660 1 52 662 1 52 663 1 52 664 1 52 666 1 52 796 1 52 802 1 52 807 1 52 811 1 52 815 1 52 816 1 52 817 1 52 823 1 52 828 1 52 832 1 52 836 1 52 837 1 52 838 1 52 843 1 52 847 1 52 851 1 52 852 1 52 853 1 52 857 1 52 861 1 52 862 1 52 863 1 52 867 1 52 868 1 52 869 1 52 873 1 52 874 1 52 875 1 52 1005 1 52 1010 1 52 1014 1 52 1018 1 52 1019 1 52 1020 1 52 1025 1 52 1029 1 52 1033 1 52 1034 1 52 1035 1 52 1039 1 52 1043 1 52 1044 1 52 1045 1 52 1049 1 52 1050 1 52 1051 1 52 1055 1 52 1056 1 52 1057 1 52 1060 1 52 1064 1 52 1068 1 52 1069 1 52 1070 1 52 1074 1 52 1078 1 52 1079 1 52 1080 1 52 1084 1 52 1085 1 52 1086 1 52 1090 1 52 1091 1 52 1092 1 52 1094 1 52 1098 1 52 1099 1 52 1100 1 52 1104 1 52 1105 1 52 1106 1 52 1110 1 52 1111 1 52 1112 1 52 1114 1 52 1115 1 52 1116 1 52 1120 1 52 1121 1 52 1122 1 52 1124 1 52 1125 1 52 1126 1 52 1128 1 52 1257 1 52 1262 1 52 1266 1 52 1270 1 52 1271 1 52 1272 1 52 1277 1 52 1281 1 52 1285 1 52 1286 1 52 1287 1 52 1291 1 52 1295 1 52 1296 1 52 1297 1 52 1301 1 52 1302 1 52 1303 1 52 1307 1 52 1308 1 52 1309 1 52 1312 1 52 1316 1 52 1320 1 52 1321 1 52 1322 1 52 1326 1 52 1330 1 52 1331 1 52 1332 1 52 1336 1 52 1337 1 52 1338 1 52 1342 1 52 1343 1 52 1344 1 52 1346 1 52 1350 1 52 1351 1 52 1352 1 52 1356 1 52 1357 1 52 1358 1 52 1362 1 52 1363 1 52 1364 1 52 1366 1 52 1367 1 52 1368 1 52 1372 1 52 1373 1 52 1374 1 52 1376 1 52 1377 1 52 1378 1 52 1380 1 52 1508 1 52 1512 1 52 1516 1 52 1517 1 52 1518 1 52 1522 1 52 1526 1 52 1527 1 52 1528 1 52 1532 1 52 1533 1 52 1534 1 52 1538 1 52 1539 1 52 1540 1 52 1542 1 52 1546 1 52 1547 1 52 1548 1 52 1552 1 52 1553 1 52 1554 1 52 1558 1 52 1559 1 52 1560 1 52 1562 1 52 1563 1 52 1564 1 52 1568 1 52 1569 1 52 1570 1 52 1572 1 52 1573 1 52 1574 1 52 1576 1 52 1577 1 52 1581 1 52 1582 1 52 1583 1 52 1587 1 52 1588 1 52 1589 1 52 1593 1 52 1594 1 52 1595 1 52 1597 1 52 1598 1 52 1599 1 52 1603 1 52 1604 1 52 1605 1 52 1607 1 52 1608 1 52 1609 1 52 1611 1 52 1612 1 52 1613 1 52 1614 1 52 1618 1 52 1619 1 52 1620 1 52 1622 1 52 1623 1 52 1624 1 52 1626 1 52 1627 1 52 1628 1 52 1629 1 52 1631 1 52 1632 1 52 1720 1 52 1726 1 52 1731 1 52 1735 1 52 1739 1 52 1740 1 52 1741 1 52 1747 1 52 1752 1 52 1756 1 52 1760 1 52 1761 1 52 1762 1 52 1767 1 52 1771 1 52 1775 1 52 1776 1 52 1777 1 52 1781 1 52 1785 1 52 1786 1 52 1787 1 52 1791 1 52 1792 1 52 1793 1 52 1797 1 52 1798 1 52 1799 1 52 1929 1 52 1934 1 52 1938 1 52 1942 1 52 1943 1 52 1944 1 52 1949 1 52 1953 1 52 1957 1 52 1958 1 52 1959 1 52 1963 1 52 1967 1 52 1968 1 52 1969 1 52 1973 1 52 1974 1 52 1975 1 52 1979 1 52 1980 1 52 1981 1 52 1984 1 52 1988 1 52 1992 1 52 1993 1 52 1994 1 52 1998 1 52 2002 1 52 2003 1 52 2004 1 52 2008 1 52 2009 1 52 2010 1 52 2014 1 52 2015 1 52 2016 1 52 2018 1 52 2022 1 52 2023 1 52 2024 1 52 2028 1 52 2029 1 52 2030 1 52 2034 1 52 2035 1 52 2036 1 52 2038 1 52 2039 1 52 2040 1 52 2044 1 52 2045 1 52 2046 1 52 2048 1 52 2049 1 52 2050 1 52 2052 1 52 2181 1 52 2186 1 52 2190 1 52 2194 1 52 2195 1 52 2196 1 52 2201 1 52 2205 1 52 2209 1 52 2210 1 52 2211 1 52 2215 1 52 2219 1 52 2220 1 52 2221 1 52 2225 1 52 2226 1 52 2227 1 52 2231 1 52 2232 1 52 2233 1 52 2236 1 52 2240 1 52 2244 1 52 2245 1 52 2246 1 52 2250 1 52 2254 1 52 2255 1 52 2256 1 52 2260 1 52 2261 1 52 2262 1 52 2266 1 52 2267 1 52 2268 1 52 2270 1 52 2274 1 52 2275 1 52 2276 1 52 2280 1 52 2281 1 52 2282 1 52 2286 1 52 2287 1 52 2288 1 52 2290 1 52 2291 1 52 2292 1 52 2296 1 52 2297 1 52 2298 1 52 2300 1 52 2301 1 52 2302 1 52 2304 1 52 2432 1 52 2436 1 52 2440 1 52 2441 1 52 2442 1 52 2446 1 52 2450 1 52 2451 1 52 2452 1 52 2456 1 52 2457 1 52 2458 1 52 2462 1 52 2463 1 52 2464 1 52 2466 1 52 2470 1 52 2471 1 52 2472 1 52 2476 1 52 2477 1 52 2478 1 52 2482 1 52 2483 1 52 2484 1 52 2486 1 52 2487 1 52 2488 1 52 2492 1 52 2493 1 52 2494 1 52 2496 1 52 2497 1 52 2498 1 52 2500 1 52 2501 1 52 2505 1 52 2506 1 52 2507 1 52 2511 1 52 2512 1 52 2513 1 52 2517 1 52 2518 1 52 2519 1 52 2521 1 52 2522 1 52 2523 1 52 2527 1 52 2528 1 52 2529 1 52 2531 1 52 2532 1 52 2533 1 52 2535 1 52 2536 1 52 2537 1 52 2538 1 52 2542 1 52 2543 1 52 2544 1 52 2546 1 52 2547 1 52 2548 1 52 2550 1 52 2551 1 52 2552 1 52 2553 1 52 2555 1 52 2556 1 52 2643 1 52 2648 1 52 2652 1 52 2656 1 52 2657 1 52 2658 1 52 2663 1 52 2667 1 52 2671 1 52 2672 1 52 2673 1 52 2677 1 52 2681 1 52 2682 1 52 2683 1 52 2687 1 52 2688 1 52 2689 1 52 2693 1 52 2694 1 52 2695 1 52 2698 1 52 2702 1 52 2706 1 52 2707 1 52 2708 1 52 2712 1 52 2716 1 52 2717 1 52 2718 1 52 2722 1 52 2723 1 52 2724 1 52 2728 1 52 2729 1 52 2730 1 52 2732 1 52 2736 1 52 2737 1 52 2738 1 52 2742 1 52 2743 1 52 2744 1 52 2748 1 52 2749 1 52 2750 1 52 2752 1 52 2753 1 52 2754 1 52 2758 1 52 2759 1 52 2760 1 52 2762 1 52 2763 1 52 2764 1 52 2766 1 52 2894 1 52 2898 1 52 2902 1 52 2903 1 52 2904 1 52 2908 1 52 2912 1 52 2913 1 52 2914 1 52 2918 1 52 2919 1 52 2920 1 52 2924 1 52 2925 1 52 2926 1 52 2928 1 52 2932 1 52 2933 1 52 2934 1 52 2938 1 52 2939 1 52 2940 1 52 2944 1 52 2945 1 52 2946 1 52 2948 1 52 2949 1 52 2950 1 52 2954 1 52 2955 1 52 2956 1 52 2958 1 52 2959 1 52 2960 1 52 2962 1 52 2963 1 52 2967 1 52 2968 1 52 2969 1 52 2973 1 52 2974 1 52 2975 1 52 2979 1 52 2980 1 52 2981 1 52 2983 1 52 2984 1 52 2985 1 52 2989 1 52 2990 1 52 2991 1 52 2993 1 52 2994 1 52 2995 1 52 2997 1 52 2998 1 52 2999 1 52 3000 1 52 3004 1 52 3005 1 52 3006 1 52 3008 1 52 3009 1 52 3010 1 52 3012 1 52 3013 1 52 3014 1 52 3015 1 52 3017 1 52 3018 1 52 3104 1 52 3108 1 52 3112 1 52 3113 1 52 3114 1 52 3118 1 52 3122 1 52 3123 1 52 3124 1 52 3128 1 52 3129 1 52 3130 1 52 3134 1 52 3135 1 52 3136 1 52 3138 1 52 3142 1 52 3143 1 52 3144 1 52 3148 1 52 3149 1 52 3150 1 52 3154 1 52 3155 1 52 3156 1 52 3158 1 52 3159 1 52 3160 1 52 3164 1 52 3165 1 52 3166 1 52 3168 1 52 3169 1 52 3170 1 52 3172 1 52 3173 1 52 3177 1 52 3178 1 52 3179 1 52 3183 1 52 3184 1 52 3185 1 52 3189 1 52 3190 1 52 3191 1 52 3193 1 52 3194 1 52 3195 1 52 3199 1 52 3200 1 52 3201 1 52 3203 1 52 3204 1 52 3205 1 52 3207 1 52 3208 1 52 3209 1 52 3210 1 52 3214 1 52 3215 1 52 3216 1 52 3218 1 52 3219 1 52 3220 1 52 3222 1 52 3223 1 52 3224 1 52 3225 1 52 3227 1 52 3228 1 52 3313 1 52 3317 1 52 3318 1 52 3319 1 52 3323 1 52 3324 1 52 3325 1 52 3329 1 52 3330 1 52 3331 1 52 3333 1 52 3334 1 52 3335 1 52 3339 1 52 3340 1 52 3341 1 52 3343 1 52 3344 1 52 3345 1 52 3347 1 52 3348 1 52 3349 1 52 3350 1 52 3354 1 52 3355 1 52 3356 1 52 3358 1 52 3359 1 52 3360 1 52 3362 1 52 3363 1 52 3364 1 52 3365 1 52 3367 1 52 3368 1 52 3369 1 52 3370 1 52 3371 1 52 3375 1 52 3376 1 52 3377 1 52 3379 1 52 3380 1 52 3381 1 52 3383 1 52 3384 1 52 3385 1 52 3386 1 52 3388 1 52 3389 1 52 3390 1 52 3391 1 52 3392 1 52 3394 1 52 3395 1 52 3396 1 53 6 1 53 13 1 53 19 1 53 24 1 53 28 1 53 31 1 53 34 1 53 35 1 53 125 1 53 131 1 53 136 1 53 140 1 53 143 1 53 146 1 53 147 1 53 152 1 53 157 1 53 161 1 53 164 1 53 167 1 53 168 1 53 172 1 53 176 1 53 179 1 53 182 1 53 183 1 53 186 1 53 189 1 53 192 1 53 193 1 53 195 1 53 198 1 53 199 1 53 201 1 53 202 1 53 204 1 53 335 1 53 341 1 53 346 1 53 350 1 53 353 1 53 356 1 53 357 1 53 362 1 53 367 1 53 371 1 53 374 1 53 377 1 53 378 1 53 382 1 53 386 1 53 389 1 53 392 1 53 393 1 53 396 1 53 399 1 53 402 1 53 403 1 53 405 1 53 408 1 53 409 1 53 411 1 53 412 1 53 414 1 53 544 1 53 549 1 53 553 1 53 556 1 53 559 1 53 560 1 53 564 1 53 568 1 53 571 1 53 574 1 53 575 1 53 578 1 53 581 1 53 584 1 53 585 1 53 587 1 53 590 1 53 591 1 53 593 1 53 594 1 53 596 1 53 599 1 53 603 1 53 606 1 53 609 1 53 610 1 53 613 1 53 616 1 53 619 1 53 620 1 53 622 1 53 625 1 53 626 1 53 628 1 53 629 1 53 631 1 53 633 1 53 636 1 53 639 1 53 640 1 53 642 1 53 645 1 53 646 1 53 648 1 53 649 1 53 651 1 53 652 1 53 655 1 53 656 1 53 658 1 53 659 1 53 661 1 53 662 1 53 663 1 53 665 1 53 666 1 53 797 1 53 803 1 53 808 1 53 812 1 53 815 1 53 818 1 53 819 1 53 824 1 53 829 1 53 833 1 53 836 1 53 839 1 53 840 1 53 844 1 53 848 1 53 851 1 53 854 1 53 855 1 53 858 1 53 861 1 53 864 1 53 865 1 53 867 1 53 870 1 53 871 1 53 873 1 53 874 1 53 876 1 53 1006 1 53 1011 1 53 1015 1 53 1018 1 53 1021 1 53 1022 1 53 1026 1 53 1030 1 53 1033 1 53 1036 1 53 1037 1 53 1040 1 53 1043 1 53 1046 1 53 1047 1 53 1049 1 53 1052 1 53 1053 1 53 1055 1 53 1056 1 53 1058 1 53 1061 1 53 1065 1 53 1068 1 53 1071 1 53 1072 1 53 1075 1 53 1078 1 53 1081 1 53 1082 1 53 1084 1 53 1087 1 53 1088 1 53 1090 1 53 1091 1 53 1093 1 53 1095 1 53 1098 1 53 1101 1 53 1102 1 53 1104 1 53 1107 1 53 1108 1 53 1110 1 53 1111 1 53 1113 1 53 1114 1 53 1117 1 53 1118 1 53 1120 1 53 1121 1 53 1123 1 53 1124 1 53 1125 1 53 1127 1 53 1128 1 53 1258 1 53 1263 1 53 1267 1 53 1270 1 53 1273 1 53 1274 1 53 1278 1 53 1282 1 53 1285 1 53 1288 1 53 1289 1 53 1292 1 53 1295 1 53 1298 1 53 1299 1 53 1301 1 53 1304 1 53 1305 1 53 1307 1 53 1308 1 53 1310 1 53 1313 1 53 1317 1 53 1320 1 53 1323 1 53 1324 1 53 1327 1 53 1330 1 53 1333 1 53 1334 1 53 1336 1 53 1339 1 53 1340 1 53 1342 1 53 1343 1 53 1345 1 53 1347 1 53 1350 1 53 1353 1 53 1354 1 53 1356 1 53 1359 1 53 1360 1 53 1362 1 53 1363 1 53 1365 1 53 1366 1 53 1369 1 53 1370 1 53 1372 1 53 1373 1 53 1375 1 53 1376 1 53 1377 1 53 1379 1 53 1380 1 53 1509 1 53 1513 1 53 1516 1 53 1519 1 53 1520 1 53 1523 1 53 1526 1 53 1529 1 53 1530 1 53 1532 1 53 1535 1 53 1536 1 53 1538 1 53 1539 1 53 1541 1 53 1543 1 53 1546 1 53 1549 1 53 1550 1 53 1552 1 53 1555 1 53 1556 1 53 1558 1 53 1559 1 53 1561 1 53 1562 1 53 1565 1 53 1566 1 53 1568 1 53 1569 1 53 1571 1 53 1572 1 53 1573 1 53 1575 1 53 1576 1 53 1578 1 53 1581 1 53 1584 1 53 1585 1 53 1587 1 53 1590 1 53 1591 1 53 1593 1 53 1594 1 53 1596 1 53 1597 1 53 1600 1 53 1601 1 53 1603 1 53 1604 1 53 1606 1 53 1607 1 53 1608 1 53 1610 1 53 1611 1 53 1612 1 53 1615 1 53 1616 1 53 1618 1 53 1619 1 53 1621 1 53 1622 1 53 1623 1 53 1625 1 53 1626 1 53 1627 1 53 1628 1 53 1630 1 53 1631 1 53 1632 1 53 1721 1 53 1727 1 53 1732 1 53 1736 1 53 1739 1 53 1742 1 53 1743 1 53 1748 1 53 1753 1 53 1757 1 53 1760 1 53 1763 1 53 1764 1 53 1768 1 53 1772 1 53 1775 1 53 1778 1 53 1779 1 53 1782 1 53 1785 1 53 1788 1 53 1789 1 53 1791 1 53 1794 1 53 1795 1 53 1797 1 53 1798 1 53 1800 1 53 1930 1 53 1935 1 53 1939 1 53 1942 1 53 1945 1 53 1946 1 53 1950 1 53 1954 1 53 1957 1 53 1960 1 53 1961 1 53 1964 1 53 1967 1 53 1970 1 53 1971 1 53 1973 1 53 1976 1 53 1977 1 53 1979 1 53 1980 1 53 1982 1 53 1985 1 53 1989 1 53 1992 1 53 1995 1 53 1996 1 53 1999 1 53 2002 1 53 2005 1 53 2006 1 53 2008 1 53 2011 1 53 2012 1 53 2014 1 53 2015 1 53 2017 1 53 2019 1 53 2022 1 53 2025 1 53 2026 1 53 2028 1 53 2031 1 53 2032 1 53 2034 1 53 2035 1 53 2037 1 53 2038 1 53 2041 1 53 2042 1 53 2044 1 53 2045 1 53 2047 1 53 2048 1 53 2049 1 53 2051 1 53 2052 1 53 2182 1 53 2187 1 53 2191 1 53 2194 1 53 2197 1 53 2198 1 53 2202 1 53 2206 1 53 2209 1 53 2212 1 53 2213 1 53 2216 1 53 2219 1 53 2222 1 53 2223 1 53 2225 1 53 2228 1 53 2229 1 53 2231 1 53 2232 1 53 2234 1 53 2237 1 53 2241 1 53 2244 1 53 2247 1 53 2248 1 53 2251 1 53 2254 1 53 2257 1 53 2258 1 53 2260 1 53 2263 1 53 2264 1 53 2266 1 53 2267 1 53 2269 1 53 2271 1 53 2274 1 53 2277 1 53 2278 1 53 2280 1 53 2283 1 53 2284 1 53 2286 1 53 2287 1 53 2289 1 53 2290 1 53 2293 1 53 2294 1 53 2296 1 53 2297 1 53 2299 1 53 2300 1 53 2301 1 53 2303 1 53 2304 1 53 2433 1 53 2437 1 53 2440 1 53 2443 1 53 2444 1 53 2447 1 53 2450 1 53 2453 1 53 2454 1 53 2456 1 53 2459 1 53 2460 1 53 2462 1 53 2463 1 53 2465 1 53 2467 1 53 2470 1 53 2473 1 53 2474 1 53 2476 1 53 2479 1 53 2480 1 53 2482 1 53 2483 1 53 2485 1 53 2486 1 53 2489 1 53 2490 1 53 2492 1 53 2493 1 53 2495 1 53 2496 1 53 2497 1 53 2499 1 53 2500 1 53 2502 1 53 2505 1 53 2508 1 53 2509 1 53 2511 1 53 2514 1 53 2515 1 53 2517 1 53 2518 1 53 2520 1 53 2521 1 53 2524 1 53 2525 1 53 2527 1 53 2528 1 53 2530 1 53 2531 1 53 2532 1 53 2534 1 53 2535 1 53 2536 1 53 2539 1 53 2540 1 53 2542 1 53 2543 1 53 2545 1 53 2546 1 53 2547 1 53 2549 1 53 2550 1 53 2551 1 53 2552 1 53 2554 1 53 2555 1 53 2556 1 53 2644 1 53 2649 1 53 2653 1 53 2656 1 53 2659 1 53 2660 1 53 2664 1 53 2668 1 53 2671 1 53 2674 1 53 2675 1 53 2678 1 53 2681 1 53 2684 1 53 2685 1 53 2687 1 53 2690 1 53 2691 1 53 2693 1 53 2694 1 53 2696 1 53 2699 1 53 2703 1 53 2706 1 53 2709 1 53 2710 1 53 2713 1 53 2716 1 53 2719 1 53 2720 1 53 2722 1 53 2725 1 53 2726 1 53 2728 1 53 2729 1 53 2731 1 53 2733 1 53 2736 1 53 2739 1 53 2740 1 53 2742 1 53 2745 1 53 2746 1 53 2748 1 53 2749 1 53 2751 1 53 2752 1 53 2755 1 53 2756 1 53 2758 1 53 2759 1 53 2761 1 53 2762 1 53 2763 1 53 2765 1 53 2766 1 53 2895 1 53 2899 1 53 2902 1 53 2905 1 53 2906 1 53 2909 1 53 2912 1 53 2915 1 53 2916 1 53 2918 1 53 2921 1 53 2922 1 53 2924 1 53 2925 1 53 2927 1 53 2929 1 53 2932 1 53 2935 1 53 2936 1 53 2938 1 53 2941 1 53 2942 1 53 2944 1 53 2945 1 53 2947 1 53 2948 1 53 2951 1 53 2952 1 53 2954 1 53 2955 1 53 2957 1 53 2958 1 53 2959 1 53 2961 1 53 2962 1 53 2964 1 53 2967 1 53 2970 1 53 2971 1 53 2973 1 53 2976 1 53 2977 1 53 2979 1 53 2980 1 53 2982 1 53 2983 1 53 2986 1 53 2987 1 53 2989 1 53 2990 1 53 2992 1 53 2993 1 53 2994 1 53 2996 1 53 2997 1 53 2998 1 53 3001 1 53 3002 1 53 3004 1 53 3005 1 53 3007 1 53 3008 1 53 3009 1 53 3011 1 53 3012 1 53 3013 1 53 3014 1 53 3016 1 53 3017 1 53 3018 1 53 3105 1 53 3109 1 53 3112 1 53 3115 1 53 3116 1 53 3119 1 53 3122 1 53 3125 1 53 3126 1 53 3128 1 53 3131 1 53 3132 1 53 3134 1 53 3135 1 53 3137 1 53 3139 1 53 3142 1 53 3145 1 53 3146 1 53 3148 1 53 3151 1 53 3152 1 53 3154 1 53 3155 1 53 3157 1 53 3158 1 53 3161 1 53 3162 1 53 3164 1 53 3165 1 53 3167 1 53 3168 1 53 3169 1 53 3171 1 53 3172 1 53 3174 1 53 3177 1 53 3180 1 53 3181 1 53 3183 1 53 3186 1 53 3187 1 53 3189 1 53 3190 1 53 3192 1 53 3193 1 53 3196 1 53 3197 1 53 3199 1 53 3200 1 53 3202 1 53 3203 1 53 3204 1 53 3206 1 53 3207 1 53 3208 1 53 3211 1 53 3212 1 53 3214 1 53 3215 1 53 3217 1 53 3218 1 53 3219 1 53 3221 1 53 3222 1 53 3223 1 53 3224 1 53 3226 1 53 3227 1 53 3228 1 53 3314 1 53 3317 1 53 3320 1 53 3321 1 53 3323 1 53 3326 1 53 3327 1 53 3329 1 53 3330 1 53 3332 1 53 3333 1 53 3336 1 53 3337 1 53 3339 1 53 3340 1 53 3342 1 53 3343 1 53 3344 1 53 3346 1 53 3347 1 53 3348 1 53 3351 1 53 3352 1 53 3354 1 53 3355 1 53 3357 1 53 3358 1 53 3359 1 53 3361 1 53 3362 1 53 3363 1 53 3364 1 53 3366 1 53 3367 1 53 3368 1 53 3369 1 53 3372 1 53 3373 1 53 3375 1 53 3376 1 53 3378 1 53 3379 1 53 3380 1 53 3382 1 53 3383 1 53 3384 1 53 3385 1 53 3387 1 53 3388 1 53 3389 1 53 3390 1 53 3391 1 53 3393 1 53 3394 1 53 3395 1 53 3396 1 54 7 1 54 14 1 54 20 1 54 25 1 54 29 1 54 32 1 54 34 1 54 36 1 54 126 1 54 132 1 54 137 1 54 141 1 54 144 1 54 146 1 54 148 1 54 153 1 54 158 1 54 162 1 54 165 1 54 167 1 54 169 1 54 173 1 54 177 1 54 180 1 54 182 1 54 184 1 54 187 1 54 190 1 54 192 1 54 194 1 54 196 1 54 198 1 54 200 1 54 201 1 54 203 1 54 204 1 54 336 1 54 342 1 54 347 1 54 351 1 54 354 1 54 356 1 54 358 1 54 363 1 54 368 1 54 372 1 54 375 1 54 377 1 54 379 1 54 383 1 54 387 1 54 390 1 54 392 1 54 394 1 54 397 1 54 400 1 54 402 1 54 404 1 54 406 1 54 408 1 54 410 1 54 411 1 54 413 1 54 414 1 54 545 1 54 550 1 54 554 1 54 557 1 54 559 1 54 561 1 54 565 1 54 569 1 54 572 1 54 574 1 54 576 1 54 579 1 54 582 1 54 584 1 54 586 1 54 588 1 54 590 1 54 592 1 54 593 1 54 595 1 54 596 1 54 600 1 54 604 1 54 607 1 54 609 1 54 611 1 54 614 1 54 617 1 54 619 1 54 621 1 54 623 1 54 625 1 54 627 1 54 628 1 54 630 1 54 631 1 54 634 1 54 637 1 54 639 1 54 641 1 54 643 1 54 645 1 54 647 1 54 648 1 54 650 1 54 651 1 54 653 1 54 655 1 54 657 1 54 658 1 54 660 1 54 661 1 54 662 1 54 664 1 54 665 1 54 666 1 54 798 1 54 804 1 54 809 1 54 813 1 54 816 1 54 818 1 54 820 1 54 825 1 54 830 1 54 834 1 54 837 1 54 839 1 54 841 1 54 845 1 54 849 1 54 852 1 54 854 1 54 856 1 54 859 1 54 862 1 54 864 1 54 866 1 54 868 1 54 870 1 54 872 1 54 873 1 54 875 1 54 876 1 54 1007 1 54 1012 1 54 1016 1 54 1019 1 54 1021 1 54 1023 1 54 1027 1 54 1031 1 54 1034 1 54 1036 1 54 1038 1 54 1041 1 54 1044 1 54 1046 1 54 1048 1 54 1050 1 54 1052 1 54 1054 1 54 1055 1 54 1057 1 54 1058 1 54 1062 1 54 1066 1 54 1069 1 54 1071 1 54 1073 1 54 1076 1 54 1079 1 54 1081 1 54 1083 1 54 1085 1 54 1087 1 54 1089 1 54 1090 1 54 1092 1 54 1093 1 54 1096 1 54 1099 1 54 1101 1 54 1103 1 54 1105 1 54 1107 1 54 1109 1 54 1110 1 54 1112 1 54 1113 1 54 1115 1 54 1117 1 54 1119 1 54 1120 1 54 1122 1 54 1123 1 54 1124 1 54 1126 1 54 1127 1 54 1128 1 54 1259 1 54 1264 1 54 1268 1 54 1271 1 54 1273 1 54 1275 1 54 1279 1 54 1283 1 54 1286 1 54 1288 1 54 1290 1 54 1293 1 54 1296 1 54 1298 1 54 1300 1 54 1302 1 54 1304 1 54 1306 1 54 1307 1 54 1309 1 54 1310 1 54 1314 1 54 1318 1 54 1321 1 54 1323 1 54 1325 1 54 1328 1 54 1331 1 54 1333 1 54 1335 1 54 1337 1 54 1339 1 54 1341 1 54 1342 1 54 1344 1 54 1345 1 54 1348 1 54 1351 1 54 1353 1 54 1355 1 54 1357 1 54 1359 1 54 1361 1 54 1362 1 54 1364 1 54 1365 1 54 1367 1 54 1369 1 54 1371 1 54 1372 1 54 1374 1 54 1375 1 54 1376 1 54 1378 1 54 1379 1 54 1380 1 54 1510 1 54 1514 1 54 1517 1 54 1519 1 54 1521 1 54 1524 1 54 1527 1 54 1529 1 54 1531 1 54 1533 1 54 1535 1 54 1537 1 54 1538 1 54 1540 1 54 1541 1 54 1544 1 54 1547 1 54 1549 1 54 1551 1 54 1553 1 54 1555 1 54 1557 1 54 1558 1 54 1560 1 54 1561 1 54 1563 1 54 1565 1 54 1567 1 54 1568 1 54 1570 1 54 1571 1 54 1572 1 54 1574 1 54 1575 1 54 1576 1 54 1579 1 54 1582 1 54 1584 1 54 1586 1 54 1588 1 54 1590 1 54 1592 1 54 1593 1 54 1595 1 54 1596 1 54 1598 1 54 1600 1 54 1602 1 54 1603 1 54 1605 1 54 1606 1 54 1607 1 54 1609 1 54 1610 1 54 1611 1 54 1613 1 54 1615 1 54 1617 1 54 1618 1 54 1620 1 54 1621 1 54 1622 1 54 1624 1 54 1625 1 54 1626 1 54 1627 1 54 1629 1 54 1630 1 54 1631 1 54 1632 1 54 1722 1 54 1728 1 54 1733 1 54 1737 1 54 1740 1 54 1742 1 54 1744 1 54 1749 1 54 1754 1 54 1758 1 54 1761 1 54 1763 1 54 1765 1 54 1769 1 54 1773 1 54 1776 1 54 1778 1 54 1780 1 54 1783 1 54 1786 1 54 1788 1 54 1790 1 54 1792 1 54 1794 1 54 1796 1 54 1797 1 54 1799 1 54 1800 1 54 1931 1 54 1936 1 54 1940 1 54 1943 1 54 1945 1 54 1947 1 54 1951 1 54 1955 1 54 1958 1 54 1960 1 54 1962 1 54 1965 1 54 1968 1 54 1970 1 54 1972 1 54 1974 1 54 1976 1 54 1978 1 54 1979 1 54 1981 1 54 1982 1 54 1986 1 54 1990 1 54 1993 1 54 1995 1 54 1997 1 54 2000 1 54 2003 1 54 2005 1 54 2007 1 54 2009 1 54 2011 1 54 2013 1 54 2014 1 54 2016 1 54 2017 1 54 2020 1 54 2023 1 54 2025 1 54 2027 1 54 2029 1 54 2031 1 54 2033 1 54 2034 1 54 2036 1 54 2037 1 54 2039 1 54 2041 1 54 2043 1 54 2044 1 54 2046 1 54 2047 1 54 2048 1 54 2050 1 54 2051 1 54 2052 1 54 2183 1 54 2188 1 54 2192 1 54 2195 1 54 2197 1 54 2199 1 54 2203 1 54 2207 1 54 2210 1 54 2212 1 54 2214 1 54 2217 1 54 2220 1 54 2222 1 54 2224 1 54 2226 1 54 2228 1 54 2230 1 54 2231 1 54 2233 1 54 2234 1 54 2238 1 54 2242 1 54 2245 1 54 2247 1 54 2249 1 54 2252 1 54 2255 1 54 2257 1 54 2259 1 54 2261 1 54 2263 1 54 2265 1 54 2266 1 54 2268 1 54 2269 1 54 2272 1 54 2275 1 54 2277 1 54 2279 1 54 2281 1 54 2283 1 54 2285 1 54 2286 1 54 2288 1 54 2289 1 54 2291 1 54 2293 1 54 2295 1 54 2296 1 54 2298 1 54 2299 1 54 2300 1 54 2302 1 54 2303 1 54 2304 1 54 2434 1 54 2438 1 54 2441 1 54 2443 1 54 2445 1 54 2448 1 54 2451 1 54 2453 1 54 2455 1 54 2457 1 54 2459 1 54 2461 1 54 2462 1 54 2464 1 54 2465 1 54 2468 1 54 2471 1 54 2473 1 54 2475 1 54 2477 1 54 2479 1 54 2481 1 54 2482 1 54 2484 1 54 2485 1 54 2487 1 54 2489 1 54 2491 1 54 2492 1 54 2494 1 54 2495 1 54 2496 1 54 2498 1 54 2499 1 54 2500 1 54 2503 1 54 2506 1 54 2508 1 54 2510 1 54 2512 1 54 2514 1 54 2516 1 54 2517 1 54 2519 1 54 2520 1 54 2522 1 54 2524 1 54 2526 1 54 2527 1 54 2529 1 54 2530 1 54 2531 1 54 2533 1 54 2534 1 54 2535 1 54 2537 1 54 2539 1 54 2541 1 54 2542 1 54 2544 1 54 2545 1 54 2546 1 54 2548 1 54 2549 1 54 2550 1 54 2551 1 54 2553 1 54 2554 1 54 2555 1 54 2556 1 54 2645 1 54 2650 1 54 2654 1 54 2657 1 54 2659 1 54 2661 1 54 2665 1 54 2669 1 54 2672 1 54 2674 1 54 2676 1 54 2679 1 54 2682 1 54 2684 1 54 2686 1 54 2688 1 54 2690 1 54 2692 1 54 2693 1 54 2695 1 54 2696 1 54 2700 1 54 2704 1 54 2707 1 54 2709 1 54 2711 1 54 2714 1 54 2717 1 54 2719 1 54 2721 1 54 2723 1 54 2725 1 54 2727 1 54 2728 1 54 2730 1 54 2731 1 54 2734 1 54 2737 1 54 2739 1 54 2741 1 54 2743 1 54 2745 1 54 2747 1 54 2748 1 54 2750 1 54 2751 1 54 2753 1 54 2755 1 54 2757 1 54 2758 1 54 2760 1 54 2761 1 54 2762 1 54 2764 1 54 2765 1 54 2766 1 54 2896 1 54 2900 1 54 2903 1 54 2905 1 54 2907 1 54 2910 1 54 2913 1 54 2915 1 54 2917 1 54 2919 1 54 2921 1 54 2923 1 54 2924 1 54 2926 1 54 2927 1 54 2930 1 54 2933 1 54 2935 1 54 2937 1 54 2939 1 54 2941 1 54 2943 1 54 2944 1 54 2946 1 54 2947 1 54 2949 1 54 2951 1 54 2953 1 54 2954 1 54 2956 1 54 2957 1 54 2958 1 54 2960 1 54 2961 1 54 2962 1 54 2965 1 54 2968 1 54 2970 1 54 2972 1 54 2974 1 54 2976 1 54 2978 1 54 2979 1 54 2981 1 54 2982 1 54 2984 1 54 2986 1 54 2988 1 54 2989 1 54 2991 1 54 2992 1 54 2993 1 54 2995 1 54 2996 1 54 2997 1 54 2999 1 54 3001 1 54 3003 1 54 3004 1 54 3006 1 54 3007 1 54 3008 1 54 3010 1 54 3011 1 54 3012 1 54 3013 1 54 3015 1 54 3016 1 54 3017 1 54 3018 1 54 3106 1 54 3110 1 54 3113 1 54 3115 1 54 3117 1 54 3120 1 54 3123 1 54 3125 1 54 3127 1 54 3129 1 54 3131 1 54 3133 1 54 3134 1 54 3136 1 54 3137 1 54 3140 1 54 3143 1 54 3145 1 54 3147 1 54 3149 1 54 3151 1 54 3153 1 54 3154 1 54 3156 1 54 3157 1 54 3159 1 54 3161 1 54 3163 1 54 3164 1 54 3166 1 54 3167 1 54 3168 1 54 3170 1 54 3171 1 54 3172 1 54 3175 1 54 3178 1 54 3180 1 54 3182 1 54 3184 1 54 3186 1 54 3188 1 54 3189 1 54 3191 1 54 3192 1 54 3194 1 54 3196 1 54 3198 1 54 3199 1 54 3201 1 54 3202 1 54 3203 1 54 3205 1 54 3206 1 54 3207 1 54 3209 1 54 3211 1 54 3213 1 54 3214 1 54 3216 1 54 3217 1 54 3218 1 54 3220 1 54 3221 1 54 3222 1 54 3223 1 54 3225 1 54 3226 1 54 3227 1 54 3228 1 54 3315 1 54 3318 1 54 3320 1 54 3322 1 54 3324 1 54 3326 1 54 3328 1 54 3329 1 54 3331 1 54 3332 1 54 3334 1 54 3336 1 54 3338 1 54 3339 1 54 3341 1 54 3342 1 54 3343 1 54 3345 1 54 3346 1 54 3347 1 54 3349 1 54 3351 1 54 3353 1 54 3354 1 54 3356 1 54 3357 1 54 3358 1 54 3360 1 54 3361 1 54 3362 1 54 3363 1 54 3365 1 54 3366 1 54 3367 1 54 3368 1 54 3370 1 54 3372 1 54 3374 1 54 3375 1 54 3377 1 54 3378 1 54 3379 1 54 3381 1 54 3382 1 54 3383 1 54 3384 1 54 3386 1 54 3387 1 54 3388 1 54 3389 1 54 3390 1 54 3392 1 54 3393 1 54 3394 1 54 3395 1 54 3396 1 55 8 1 55 15 1 55 21 1 55 26 1 55 30 1 55 33 1 55 35 1 55 36 1 55 127 1 55 133 1 55 138 1 55 142 1 55 145 1 55 147 1 55 148 1 55 154 1 55 159 1 55 163 1 55 166 1 55 168 1 55 169 1 55 174 1 55 178 1 55 181 1 55 183 1 55 184 1 55 188 1 55 191 1 55 193 1 55 194 1 55 197 1 55 199 1 55 200 1 55 202 1 55 203 1 55 204 1 55 337 1 55 343 1 55 348 1 55 352 1 55 355 1 55 357 1 55 358 1 55 364 1 55 369 1 55 373 1 55 376 1 55 378 1 55 379 1 55 384 1 55 388 1 55 391 1 55 393 1 55 394 1 55 398 1 55 401 1 55 403 1 55 404 1 55 407 1 55 409 1 55 410 1 55 412 1 55 413 1 55 414 1 55 546 1 55 551 1 55 555 1 55 558 1 55 560 1 55 561 1 55 566 1 55 570 1 55 573 1 55 575 1 55 576 1 55 580 1 55 583 1 55 585 1 55 586 1 55 589 1 55 591 1 55 592 1 55 594 1 55 595 1 55 596 1 55 601 1 55 605 1 55 608 1 55 610 1 55 611 1 55 615 1 55 618 1 55 620 1 55 621 1 55 624 1 55 626 1 55 627 1 55 629 1 55 630 1 55 631 1 55 635 1 55 638 1 55 640 1 55 641 1 55 644 1 55 646 1 55 647 1 55 649 1 55 650 1 55 651 1 55 654 1 55 656 1 55 657 1 55 659 1 55 660 1 55 661 1 55 663 1 55 664 1 55 665 1 55 666 1 55 799 1 55 805 1 55 810 1 55 814 1 55 817 1 55 819 1 55 820 1 55 826 1 55 831 1 55 835 1 55 838 1 55 840 1 55 841 1 55 846 1 55 850 1 55 853 1 55 855 1 55 856 1 55 860 1 55 863 1 55 865 1 55 866 1 55 869 1 55 871 1 55 872 1 55 874 1 55 875 1 55 876 1 55 1008 1 55 1013 1 55 1017 1 55 1020 1 55 1022 1 55 1023 1 55 1028 1 55 1032 1 55 1035 1 55 1037 1 55 1038 1 55 1042 1 55 1045 1 55 1047 1 55 1048 1 55 1051 1 55 1053 1 55 1054 1 55 1056 1 55 1057 1 55 1058 1 55 1063 1 55 1067 1 55 1070 1 55 1072 1 55 1073 1 55 1077 1 55 1080 1 55 1082 1 55 1083 1 55 1086 1 55 1088 1 55 1089 1 55 1091 1 55 1092 1 55 1093 1 55 1097 1 55 1100 1 55 1102 1 55 1103 1 55 1106 1 55 1108 1 55 1109 1 55 1111 1 55 1112 1 55 1113 1 55 1116 1 55 1118 1 55 1119 1 55 1121 1 55 1122 1 55 1123 1 55 1125 1 55 1126 1 55 1127 1 55 1128 1 55 1260 1 55 1265 1 55 1269 1 55 1272 1 55 1274 1 55 1275 1 55 1280 1 55 1284 1 55 1287 1 55 1289 1 55 1290 1 55 1294 1 55 1297 1 55 1299 1 55 1300 1 55 1303 1 55 1305 1 55 1306 1 55 1308 1 55 1309 1 55 1310 1 55 1315 1 55 1319 1 55 1322 1 55 1324 1 55 1325 1 55 1329 1 55 1332 1 55 1334 1 55 1335 1 55 1338 1 55 1340 1 55 1341 1 55 1343 1 55 1344 1 55 1345 1 55 1349 1 55 1352 1 55 1354 1 55 1355 1 55 1358 1 55 1360 1 55 1361 1 55 1363 1 55 1364 1 55 1365 1 55 1368 1 55 1370 1 55 1371 1 55 1373 1 55 1374 1 55 1375 1 55 1377 1 55 1378 1 55 1379 1 55 1380 1 55 1511 1 55 1515 1 55 1518 1 55 1520 1 55 1521 1 55 1525 1 55 1528 1 55 1530 1 55 1531 1 55 1534 1 55 1536 1 55 1537 1 55 1539 1 55 1540 1 55 1541 1 55 1545 1 55 1548 1 55 1550 1 55 1551 1 55 1554 1 55 1556 1 55 1557 1 55 1559 1 55 1560 1 55 1561 1 55 1564 1 55 1566 1 55 1567 1 55 1569 1 55 1570 1 55 1571 1 55 1573 1 55 1574 1 55 1575 1 55 1576 1 55 1580 1 55 1583 1 55 1585 1 55 1586 1 55 1589 1 55 1591 1 55 1592 1 55 1594 1 55 1595 1 55 1596 1 55 1599 1 55 1601 1 55 1602 1 55 1604 1 55 1605 1 55 1606 1 55 1608 1 55 1609 1 55 1610 1 55 1611 1 55 1614 1 55 1616 1 55 1617 1 55 1619 1 55 1620 1 55 1621 1 55 1623 1 55 1624 1 55 1625 1 55 1626 1 55 1628 1 55 1629 1 55 1630 1 55 1631 1 55 1632 1 55 1723 1 55 1729 1 55 1734 1 55 1738 1 55 1741 1 55 1743 1 55 1744 1 55 1750 1 55 1755 1 55 1759 1 55 1762 1 55 1764 1 55 1765 1 55 1770 1 55 1774 1 55 1777 1 55 1779 1 55 1780 1 55 1784 1 55 1787 1 55 1789 1 55 1790 1 55 1793 1 55 1795 1 55 1796 1 55 1798 1 55 1799 1 55 1800 1 55 1932 1 55 1937 1 55 1941 1 55 1944 1 55 1946 1 55 1947 1 55 1952 1 55 1956 1 55 1959 1 55 1961 1 55 1962 1 55 1966 1 55 1969 1 55 1971 1 55 1972 1 55 1975 1 55 1977 1 55 1978 1 55 1980 1 55 1981 1 55 1982 1 55 1987 1 55 1991 1 55 1994 1 55 1996 1 55 1997 1 55 2001 1 55 2004 1 55 2006 1 55 2007 1 55 2010 1 55 2012 1 55 2013 1 55 2015 1 55 2016 1 55 2017 1 55 2021 1 55 2024 1 55 2026 1 55 2027 1 55 2030 1 55 2032 1 55 2033 1 55 2035 1 55 2036 1 55 2037 1 55 2040 1 55 2042 1 55 2043 1 55 2045 1 55 2046 1 55 2047 1 55 2049 1 55 2050 1 55 2051 1 55 2052 1 55 2184 1 55 2189 1 55 2193 1 55 2196 1 55 2198 1 55 2199 1 55 2204 1 55 2208 1 55 2211 1 55 2213 1 55 2214 1 55 2218 1 55 2221 1 55 2223 1 55 2224 1 55 2227 1 55 2229 1 55 2230 1 55 2232 1 55 2233 1 55 2234 1 55 2239 1 55 2243 1 55 2246 1 55 2248 1 55 2249 1 55 2253 1 55 2256 1 55 2258 1 55 2259 1 55 2262 1 55 2264 1 55 2265 1 55 2267 1 55 2268 1 55 2269 1 55 2273 1 55 2276 1 55 2278 1 55 2279 1 55 2282 1 55 2284 1 55 2285 1 55 2287 1 55 2288 1 55 2289 1 55 2292 1 55 2294 1 55 2295 1 55 2297 1 55 2298 1 55 2299 1 55 2301 1 55 2302 1 55 2303 1 55 2304 1 55 2435 1 55 2439 1 55 2442 1 55 2444 1 55 2445 1 55 2449 1 55 2452 1 55 2454 1 55 2455 1 55 2458 1 55 2460 1 55 2461 1 55 2463 1 55 2464 1 55 2465 1 55 2469 1 55 2472 1 55 2474 1 55 2475 1 55 2478 1 55 2480 1 55 2481 1 55 2483 1 55 2484 1 55 2485 1 55 2488 1 55 2490 1 55 2491 1 55 2493 1 55 2494 1 55 2495 1 55 2497 1 55 2498 1 55 2499 1 55 2500 1 55 2504 1 55 2507 1 55 2509 1 55 2510 1 55 2513 1 55 2515 1 55 2516 1 55 2518 1 55 2519 1 55 2520 1 55 2523 1 55 2525 1 55 2526 1 55 2528 1 55 2529 1 55 2530 1 55 2532 1 55 2533 1 55 2534 1 55 2535 1 55 2538 1 55 2540 1 55 2541 1 55 2543 1 55 2544 1 55 2545 1 55 2547 1 55 2548 1 55 2549 1 55 2550 1 55 2552 1 55 2553 1 55 2554 1 55 2555 1 55 2556 1 55 2646 1 55 2651 1 55 2655 1 55 2658 1 55 2660 1 55 2661 1 55 2666 1 55 2670 1 55 2673 1 55 2675 1 55 2676 1 55 2680 1 55 2683 1 55 2685 1 55 2686 1 55 2689 1 55 2691 1 55 2692 1 55 2694 1 55 2695 1 55 2696 1 55 2701 1 55 2705 1 55 2708 1 55 2710 1 55 2711 1 55 2715 1 55 2718 1 55 2720 1 55 2721 1 55 2724 1 55 2726 1 55 2727 1 55 2729 1 55 2730 1 55 2731 1 55 2735 1 55 2738 1 55 2740 1 55 2741 1 55 2744 1 55 2746 1 55 2747 1 55 2749 1 55 2750 1 55 2751 1 55 2754 1 55 2756 1 55 2757 1 55 2759 1 55 2760 1 55 2761 1 55 2763 1 55 2764 1 55 2765 1 55 2766 1 55 2897 1 55 2901 1 55 2904 1 55 2906 1 55 2907 1 55 2911 1 55 2914 1 55 2916 1 55 2917 1 55 2920 1 55 2922 1 55 2923 1 55 2925 1 55 2926 1 55 2927 1 55 2931 1 55 2934 1 55 2936 1 55 2937 1 55 2940 1 55 2942 1 55 2943 1 55 2945 1 55 2946 1 55 2947 1 55 2950 1 55 2952 1 55 2953 1 55 2955 1 55 2956 1 55 2957 1 55 2959 1 55 2960 1 55 2961 1 55 2962 1 55 2966 1 55 2969 1 55 2971 1 55 2972 1 55 2975 1 55 2977 1 55 2978 1 55 2980 1 55 2981 1 55 2982 1 55 2985 1 55 2987 1 55 2988 1 55 2990 1 55 2991 1 55 2992 1 55 2994 1 55 2995 1 55 2996 1 55 2997 1 55 3000 1 55 3002 1 55 3003 1 55 3005 1 55 3006 1 55 3007 1 55 3009 1 55 3010 1 55 3011 1 55 3012 1 55 3014 1 55 3015 1 55 3016 1 55 3017 1 55 3018 1 55 3107 1 55 3111 1 55 3114 1 55 3116 1 55 3117 1 55 3121 1 55 3124 1 55 3126 1 55 3127 1 55 3130 1 55 3132 1 55 3133 1 55 3135 1 55 3136 1 55 3137 1 55 3141 1 55 3144 1 55 3146 1 55 3147 1 55 3150 1 55 3152 1 55 3153 1 55 3155 1 55 3156 1 55 3157 1 55 3160 1 55 3162 1 55 3163 1 55 3165 1 55 3166 1 55 3167 1 55 3169 1 55 3170 1 55 3171 1 55 3172 1 55 3176 1 55 3179 1 55 3181 1 55 3182 1 55 3185 1 55 3187 1 55 3188 1 55 3190 1 55 3191 1 55 3192 1 55 3195 1 55 3197 1 55 3198 1 55 3200 1 55 3201 1 55 3202 1 55 3204 1 55 3205 1 55 3206 1 55 3207 1 55 3210 1 55 3212 1 55 3213 1 55 3215 1 55 3216 1 55 3217 1 55 3219 1 55 3220 1 55 3221 1 55 3222 1 55 3224 1 55 3225 1 55 3226 1 55 3227 1 55 3228 1 55 3316 1 55 3319 1 55 3321 1 55 3322 1 55 3325 1 55 3327 1 55 3328 1 55 3330 1 55 3331 1 55 3332 1 55 3335 1 55 3337 1 55 3338 1 55 3340 1 55 3341 1 55 3342 1 55 3344 1 55 3345 1 55 3346 1 55 3347 1 55 3350 1 55 3352 1 55 3353 1 55 3355 1 55 3356 1 55 3357 1 55 3359 1 55 3360 1 55 3361 1 55 3362 1 55 3364 1 55 3365 1 55 3366 1 55 3367 1 55 3368 1 55 3371 1 55 3373 1 55 3374 1 55 3376 1 55 3377 1 55 3378 1 55 3380 1 55 3381 1 55 3382 1 55 3383 1 55 3385 1 55 3386 1 55 3387 1 55 3388 1 55 3389 1 55 3391 1 55 3392 1 55 3393 1 55 3394 1 55 3395 1 55 3396 1 56 1 1 56 37 1 56 38 1 56 39 1 56 40 1 56 41 1 56 42 1 56 43 1 56 121 1 56 122 1 56 123 1 56 124 1 56 125 1 56 126 1 56 127 1 56 205 1 56 206 1 56 207 1 56 208 1 56 209 1 56 210 1 56 211 1 56 212 1 56 213 1 56 214 1 56 215 1 56 216 1 56 217 1 56 218 1 56 219 1 56 220 1 56 221 1 56 222 1 56 223 1 56 224 1 56 225 1 56 331 1 56 332 1 56 333 1 56 334 1 56 335 1 56 336 1 56 337 1 56 415 1 56 416 1 56 417 1 56 418 1 56 419 1 56 420 1 56 421 1 56 422 1 56 423 1 56 424 1 56 425 1 56 426 1 56 427 1 56 428 1 56 429 1 56 430 1 56 431 1 56 432 1 56 433 1 56 434 1 56 435 1 56 541 1 56 542 1 56 543 1 56 544 1 56 545 1 56 546 1 56 547 1 56 548 1 56 549 1 56 550 1 56 551 1 56 552 1 56 553 1 56 554 1 56 555 1 56 556 1 56 557 1 56 558 1 56 559 1 56 560 1 56 561 1 56 667 1 56 668 1 56 669 1 56 670 1 56 671 1 56 672 1 56 673 1 56 674 1 56 675 1 56 676 1 56 677 1 56 678 1 56 679 1 56 680 1 56 681 1 56 682 1 56 683 1 56 684 1 56 685 1 56 686 1 56 687 1 56 688 1 56 689 1 56 690 1 56 691 1 56 692 1 56 693 1 56 694 1 56 695 1 56 696 1 56 697 1 56 698 1 56 699 1 56 700 1 56 701 1 56 793 1 56 794 1 56 795 1 56 796 1 56 797 1 56 798 1 56 799 1 56 877 1 56 878 1 56 879 1 56 880 1 56 881 1 56 882 1 56 883 1 56 884 1 56 885 1 56 886 1 56 887 1 56 888 1 56 889 1 56 890 1 56 891 1 56 892 1 56 893 1 56 894 1 56 895 1 56 896 1 56 897 1 56 1003 1 56 1004 1 56 1005 1 56 1006 1 56 1007 1 56 1008 1 56 1009 1 56 1010 1 56 1011 1 56 1012 1 56 1013 1 56 1014 1 56 1015 1 56 1016 1 56 1017 1 56 1018 1 56 1019 1 56 1020 1 56 1021 1 56 1022 1 56 1023 1 56 1129 1 56 1130 1 56 1131 1 56 1132 1 56 1133 1 56 1134 1 56 1135 1 56 1136 1 56 1137 1 56 1138 1 56 1139 1 56 1140 1 56 1141 1 56 1142 1 56 1143 1 56 1144 1 56 1145 1 56 1146 1 56 1147 1 56 1148 1 56 1149 1 56 1150 1 56 1151 1 56 1152 1 56 1153 1 56 1154 1 56 1155 1 56 1156 1 56 1157 1 56 1158 1 56 1159 1 56 1160 1 56 1161 1 56 1162 1 56 1163 1 56 1255 1 56 1256 1 56 1257 1 56 1258 1 56 1259 1 56 1260 1 56 1261 1 56 1262 1 56 1263 1 56 1264 1 56 1265 1 56 1266 1 56 1267 1 56 1268 1 56 1269 1 56 1270 1 56 1271 1 56 1272 1 56 1273 1 56 1274 1 56 1275 1 56 1381 1 56 1382 1 56 1383 1 56 1384 1 56 1385 1 56 1386 1 56 1387 1 56 1388 1 56 1389 1 56 1390 1 56 1391 1 56 1392 1 56 1393 1 56 1394 1 56 1395 1 56 1396 1 56 1397 1 56 1398 1 56 1399 1 56 1400 1 56 1401 1 56 1402 1 56 1403 1 56 1404 1 56 1405 1 56 1406 1 56 1407 1 56 1408 1 56 1409 1 56 1410 1 56 1411 1 56 1412 1 56 1413 1 56 1414 1 56 1415 1 56 1507 1 56 1508 1 56 1509 1 56 1510 1 56 1511 1 56 1512 1 56 1513 1 56 1514 1 56 1515 1 56 1516 1 56 1517 1 56 1518 1 56 1519 1 56 1520 1 56 1521 1 56 1522 1 56 1523 1 56 1524 1 56 1525 1 56 1526 1 56 1527 1 56 1528 1 56 1529 1 56 1530 1 56 1531 1 56 1532 1 56 1533 1 56 1534 1 56 1535 1 56 1536 1 56 1537 1 56 1538 1 56 1539 1 56 1540 1 56 1541 1 56 1633 1 56 1634 1 56 1635 1 56 1636 1 56 1637 1 56 1638 1 56 1639 1 56 1640 1 56 1641 1 56 1642 1 56 1643 1 56 1644 1 56 1645 1 56 1646 1 56 1647 1 56 1648 1 56 1649 1 56 1650 1 56 1651 1 56 1652 1 56 1653 1 56 1654 1 56 1655 1 56 1656 1 56 1657 1 56 1658 1 56 1659 1 56 1660 1 56 1661 1 56 1662 1 56 1663 1 56 1664 1 56 1665 1 56 1666 1 56 1667 1 56 1717 1 56 1718 1 56 1719 1 56 1720 1 56 1721 1 56 1722 1 56 1723 1 56 1801 1 56 1802 1 56 1803 1 56 1804 1 56 1805 1 56 1806 1 56 1807 1 56 1808 1 56 1809 1 56 1810 1 56 1811 1 56 1812 1 56 1813 1 56 1814 1 56 1815 1 56 1816 1 56 1817 1 56 1818 1 56 1819 1 56 1820 1 56 1821 1 56 1927 1 56 1928 1 56 1929 1 56 1930 1 56 1931 1 56 1932 1 56 1933 1 56 1934 1 56 1935 1 56 1936 1 56 1937 1 56 1938 1 56 1939 1 56 1940 1 56 1941 1 56 1942 1 56 1943 1 56 1944 1 56 1945 1 56 1946 1 56 1947 1 56 2053 1 56 2054 1 56 2055 1 56 2056 1 56 2057 1 56 2058 1 56 2059 1 56 2060 1 56 2061 1 56 2062 1 56 2063 1 56 2064 1 56 2065 1 56 2066 1 56 2067 1 56 2068 1 56 2069 1 56 2070 1 56 2071 1 56 2072 1 56 2073 1 56 2074 1 56 2075 1 56 2076 1 56 2077 1 56 2078 1 56 2079 1 56 2080 1 56 2081 1 56 2082 1 56 2083 1 56 2084 1 56 2085 1 56 2086 1 56 2087 1 56 2179 1 56 2180 1 56 2181 1 56 2182 1 56 2183 1 56 2184 1 56 2185 1 56 2186 1 56 2187 1 56 2188 1 56 2189 1 56 2190 1 56 2191 1 56 2192 1 56 2193 1 56 2194 1 56 2195 1 56 2196 1 56 2197 1 56 2198 1 56 2199 1 56 2305 1 56 2306 1 56 2307 1 56 2308 1 56 2309 1 56 2310 1 56 2311 1 56 2312 1 56 2313 1 56 2314 1 56 2315 1 56 2316 1 56 2317 1 56 2318 1 56 2319 1 56 2320 1 56 2321 1 56 2322 1 56 2323 1 56 2324 1 56 2325 1 56 2326 1 56 2327 1 56 2328 1 56 2329 1 56 2330 1 56 2331 1 56 2332 1 56 2333 1 56 2334 1 56 2335 1 56 2336 1 56 2337 1 56 2338 1 56 2339 1 56 2431 1 56 2432 1 56 2433 1 56 2434 1 56 2435 1 56 2436 1 56 2437 1 56 2438 1 56 2439 1 56 2440 1 56 2441 1 56 2442 1 56 2443 1 56 2444 1 56 2445 1 56 2446 1 56 2447 1 56 2448 1 56 2449 1 56 2450 1 56 2451 1 56 2452 1 56 2453 1 56 2454 1 56 2455 1 56 2456 1 56 2457 1 56 2458 1 56 2459 1 56 2460 1 56 2461 1 56 2462 1 56 2463 1 56 2464 1 56 2465 1 56 2557 1 56 2558 1 56 2559 1 56 2560 1 56 2561 1 56 2562 1 56 2563 1 56 2564 1 56 2565 1 56 2566 1 56 2567 1 56 2568 1 56 2569 1 56 2570 1 56 2571 1 56 2572 1 56 2573 1 56 2574 1 56 2575 1 56 2576 1 56 2577 1 56 2578 1 56 2579 1 56 2580 1 56 2581 1 56 2582 1 56 2583 1 56 2584 1 56 2585 1 56 2586 1 56 2587 1 56 2588 1 56 2589 1 56 2590 1 56 2591 1 56 2641 1 56 2642 1 56 2643 1 56 2644 1 56 2645 1 56 2646 1 56 2647 1 56 2648 1 56 2649 1 56 2650 1 56 2651 1 56 2652 1 56 2653 1 56 2654 1 56 2655 1 56 2656 1 56 2657 1 56 2658 1 56 2659 1 56 2660 1 56 2661 1 56 2767 1 56 2768 1 56 2769 1 56 2770 1 56 2771 1 56 2772 1 56 2773 1 56 2774 1 56 2775 1 56 2776 1 56 2777 1 56 2778 1 56 2779 1 56 2780 1 56 2781 1 56 2782 1 56 2783 1 56 2784 1 56 2785 1 56 2786 1 56 2787 1 56 2788 1 56 2789 1 56 2790 1 56 2791 1 56 2792 1 56 2793 1 56 2794 1 56 2795 1 56 2796 1 56 2797 1 56 2798 1 56 2799 1 56 2800 1 56 2801 1 56 2893 1 56 2894 1 56 2895 1 56 2896 1 56 2897 1 56 2898 1 56 2899 1 56 2900 1 56 2901 1 56 2902 1 56 2903 1 56 2904 1 56 2905 1 56 2906 1 56 2907 1 56 2908 1 56 2909 1 56 2910 1 56 2911 1 56 2912 1 56 2913 1 56 2914 1 56 2915 1 56 2916 1 56 2917 1 56 2918 1 56 2919 1 56 2920 1 56 2921 1 56 2922 1 56 2923 1 56 2924 1 56 2925 1 56 2926 1 56 2927 1 56 3019 1 56 3020 1 56 3021 1 56 3022 1 56 3023 1 56 3024 1 56 3025 1 56 3026 1 56 3027 1 56 3028 1 56 3029 1 56 3030 1 56 3031 1 56 3032 1 56 3033 1 56 3034 1 56 3035 1 56 3036 1 56 3037 1 56 3038 1 56 3039 1 56 3040 1 56 3041 1 56 3042 1 56 3043 1 56 3044 1 56 3045 1 56 3046 1 56 3047 1 56 3048 1 56 3049 1 56 3050 1 56 3051 1 56 3052 1 56 3053 1 56 3103 1 56 3104 1 56 3105 1 56 3106 1 56 3107 1 56 3108 1 56 3109 1 56 3110 1 56 3111 1 56 3112 1 56 3113 1 56 3114 1 56 3115 1 56 3116 1 56 3117 1 56 3118 1 56 3119 1 56 3120 1 56 3121 1 56 3122 1 56 3123 1 56 3124 1 56 3125 1 56 3126 1 56 3127 1 56 3128 1 56 3129 1 56 3130 1 56 3131 1 56 3132 1 56 3133 1 56 3134 1 56 3135 1 56 3136 1 56 3137 1 56 3229 1 56 3230 1 56 3231 1 56 3232 1 56 3233 1 56 3234 1 56 3235 1 56 3236 1 56 3237 1 56 3238 1 56 3239 1 56 3240 1 56 3241 1 56 3242 1 56 3243 1 56 3244 1 56 3245 1 56 3246 1 56 3247 1 56 3248 1 56 3249 1 56 3250 1 56 3251 1 56 3252 1 56 3253 1 56 3254 1 56 3255 1 56 3256 1 56 3257 1 56 3258 1 56 3259 1 56 3260 1 56 3261 1 56 3262 1 56 3263 1 56 3313 1 56 3314 1 56 3315 1 56 3316 1 56 3317 1 56 3318 1 56 3319 1 56 3320 1 56 3321 1 56 3322 1 56 3323 1 56 3324 1 56 3325 1 56 3326 1 56 3327 1 56 3328 1 56 3329 1 56 3330 1 56 3331 1 56 3332 1 56 3333 1 56 3334 1 56 3335 1 56 3336 1 56 3337 1 56 3338 1 56 3339 1 56 3340 1 56 3341 1 56 3342 1 56 3343 1 56 3344 1 56 3345 1 56 3346 1 56 3347 1 56 3397 1 56 3398 1 56 3399 1 56 3400 1 56 3401 1 56 3402 1 56 3403 1 56 3404 1 56 3405 1 56 3406 1 56 3407 1 56 3408 1 56 3409 1 56 3410 1 56 3411 1 56 3412 1 56 3413 1 56 3414 1 56 3415 1 56 3416 1 56 3417 1 57 2 1 57 37 1 57 44 1 57 45 1 57 46 1 57 47 1 57 48 1 57 49 1 57 121 1 57 128 1 57 129 1 57 130 1 57 131 1 57 132 1 57 133 1 57 205 1 57 206 1 57 207 1 57 208 1 57 209 1 57 210 1 57 226 1 57 227 1 57 228 1 57 229 1 57 230 1 57 231 1 57 232 1 57 233 1 57 234 1 57 235 1 57 236 1 57 237 1 57 238 1 57 239 1 57 240 1 57 331 1 57 338 1 57 339 1 57 340 1 57 341 1 57 342 1 57 343 1 57 415 1 57 416 1 57 417 1 57 418 1 57 419 1 57 420 1 57 436 1 57 437 1 57 438 1 57 439 1 57 440 1 57 441 1 57 442 1 57 443 1 57 444 1 57 445 1 57 446 1 57 447 1 57 448 1 57 449 1 57 450 1 57 541 1 57 542 1 57 543 1 57 544 1 57 545 1 57 546 1 57 562 1 57 563 1 57 564 1 57 565 1 57 566 1 57 567 1 57 568 1 57 569 1 57 570 1 57 571 1 57 572 1 57 573 1 57 574 1 57 575 1 57 576 1 57 667 1 57 668 1 57 669 1 57 670 1 57 671 1 57 672 1 57 673 1 57 674 1 57 675 1 57 676 1 57 677 1 57 678 1 57 679 1 57 680 1 57 681 1 57 702 1 57 703 1 57 704 1 57 705 1 57 706 1 57 707 1 57 708 1 57 709 1 57 710 1 57 711 1 57 712 1 57 713 1 57 714 1 57 715 1 57 716 1 57 717 1 57 718 1 57 719 1 57 720 1 57 721 1 57 793 1 57 800 1 57 801 1 57 802 1 57 803 1 57 804 1 57 805 1 57 877 1 57 878 1 57 879 1 57 880 1 57 881 1 57 882 1 57 898 1 57 899 1 57 900 1 57 901 1 57 902 1 57 903 1 57 904 1 57 905 1 57 906 1 57 907 1 57 908 1 57 909 1 57 910 1 57 911 1 57 912 1 57 1003 1 57 1004 1 57 1005 1 57 1006 1 57 1007 1 57 1008 1 57 1024 1 57 1025 1 57 1026 1 57 1027 1 57 1028 1 57 1029 1 57 1030 1 57 1031 1 57 1032 1 57 1033 1 57 1034 1 57 1035 1 57 1036 1 57 1037 1 57 1038 1 57 1129 1 57 1130 1 57 1131 1 57 1132 1 57 1133 1 57 1134 1 57 1135 1 57 1136 1 57 1137 1 57 1138 1 57 1139 1 57 1140 1 57 1141 1 57 1142 1 57 1143 1 57 1164 1 57 1165 1 57 1166 1 57 1167 1 57 1168 1 57 1169 1 57 1170 1 57 1171 1 57 1172 1 57 1173 1 57 1174 1 57 1175 1 57 1176 1 57 1177 1 57 1178 1 57 1179 1 57 1180 1 57 1181 1 57 1182 1 57 1183 1 57 1255 1 57 1256 1 57 1257 1 57 1258 1 57 1259 1 57 1260 1 57 1276 1 57 1277 1 57 1278 1 57 1279 1 57 1280 1 57 1281 1 57 1282 1 57 1283 1 57 1284 1 57 1285 1 57 1286 1 57 1287 1 57 1288 1 57 1289 1 57 1290 1 57 1381 1 57 1382 1 57 1383 1 57 1384 1 57 1385 1 57 1386 1 57 1387 1 57 1388 1 57 1389 1 57 1390 1 57 1391 1 57 1392 1 57 1393 1 57 1394 1 57 1395 1 57 1416 1 57 1417 1 57 1418 1 57 1419 1 57 1420 1 57 1421 1 57 1422 1 57 1423 1 57 1424 1 57 1425 1 57 1426 1 57 1427 1 57 1428 1 57 1429 1 57 1430 1 57 1431 1 57 1432 1 57 1433 1 57 1434 1 57 1435 1 57 1507 1 57 1508 1 57 1509 1 57 1510 1 57 1511 1 57 1512 1 57 1513 1 57 1514 1 57 1515 1 57 1516 1 57 1517 1 57 1518 1 57 1519 1 57 1520 1 57 1521 1 57 1542 1 57 1543 1 57 1544 1 57 1545 1 57 1546 1 57 1547 1 57 1548 1 57 1549 1 57 1550 1 57 1551 1 57 1552 1 57 1553 1 57 1554 1 57 1555 1 57 1556 1 57 1557 1 57 1558 1 57 1559 1 57 1560 1 57 1561 1 57 1633 1 57 1634 1 57 1635 1 57 1636 1 57 1637 1 57 1638 1 57 1639 1 57 1640 1 57 1641 1 57 1642 1 57 1643 1 57 1644 1 57 1645 1 57 1646 1 57 1647 1 57 1648 1 57 1649 1 57 1650 1 57 1651 1 57 1652 1 57 1668 1 57 1669 1 57 1670 1 57 1671 1 57 1672 1 57 1673 1 57 1674 1 57 1675 1 57 1676 1 57 1677 1 57 1678 1 57 1679 1 57 1680 1 57 1681 1 57 1682 1 57 1717 1 57 1724 1 57 1725 1 57 1726 1 57 1727 1 57 1728 1 57 1729 1 57 1801 1 57 1802 1 57 1803 1 57 1804 1 57 1805 1 57 1806 1 57 1822 1 57 1823 1 57 1824 1 57 1825 1 57 1826 1 57 1827 1 57 1828 1 57 1829 1 57 1830 1 57 1831 1 57 1832 1 57 1833 1 57 1834 1 57 1835 1 57 1836 1 57 1927 1 57 1928 1 57 1929 1 57 1930 1 57 1931 1 57 1932 1 57 1948 1 57 1949 1 57 1950 1 57 1951 1 57 1952 1 57 1953 1 57 1954 1 57 1955 1 57 1956 1 57 1957 1 57 1958 1 57 1959 1 57 1960 1 57 1961 1 57 1962 1 57 2053 1 57 2054 1 57 2055 1 57 2056 1 57 2057 1 57 2058 1 57 2059 1 57 2060 1 57 2061 1 57 2062 1 57 2063 1 57 2064 1 57 2065 1 57 2066 1 57 2067 1 57 2088 1 57 2089 1 57 2090 1 57 2091 1 57 2092 1 57 2093 1 57 2094 1 57 2095 1 57 2096 1 57 2097 1 57 2098 1 57 2099 1 57 2100 1 57 2101 1 57 2102 1 57 2103 1 57 2104 1 57 2105 1 57 2106 1 57 2107 1 57 2179 1 57 2180 1 57 2181 1 57 2182 1 57 2183 1 57 2184 1 57 2200 1 57 2201 1 57 2202 1 57 2203 1 57 2204 1 57 2205 1 57 2206 1 57 2207 1 57 2208 1 57 2209 1 57 2210 1 57 2211 1 57 2212 1 57 2213 1 57 2214 1 57 2305 1 57 2306 1 57 2307 1 57 2308 1 57 2309 1 57 2310 1 57 2311 1 57 2312 1 57 2313 1 57 2314 1 57 2315 1 57 2316 1 57 2317 1 57 2318 1 57 2319 1 57 2340 1 57 2341 1 57 2342 1 57 2343 1 57 2344 1 57 2345 1 57 2346 1 57 2347 1 57 2348 1 57 2349 1 57 2350 1 57 2351 1 57 2352 1 57 2353 1 57 2354 1 57 2355 1 57 2356 1 57 2357 1 57 2358 1 57 2359 1 57 2431 1 57 2432 1 57 2433 1 57 2434 1 57 2435 1 57 2436 1 57 2437 1 57 2438 1 57 2439 1 57 2440 1 57 2441 1 57 2442 1 57 2443 1 57 2444 1 57 2445 1 57 2466 1 57 2467 1 57 2468 1 57 2469 1 57 2470 1 57 2471 1 57 2472 1 57 2473 1 57 2474 1 57 2475 1 57 2476 1 57 2477 1 57 2478 1 57 2479 1 57 2480 1 57 2481 1 57 2482 1 57 2483 1 57 2484 1 57 2485 1 57 2557 1 57 2558 1 57 2559 1 57 2560 1 57 2561 1 57 2562 1 57 2563 1 57 2564 1 57 2565 1 57 2566 1 57 2567 1 57 2568 1 57 2569 1 57 2570 1 57 2571 1 57 2572 1 57 2573 1 57 2574 1 57 2575 1 57 2576 1 57 2592 1 57 2593 1 57 2594 1 57 2595 1 57 2596 1 57 2597 1 57 2598 1 57 2599 1 57 2600 1 57 2601 1 57 2602 1 57 2603 1 57 2604 1 57 2605 1 57 2606 1 57 2641 1 57 2642 1 57 2643 1 57 2644 1 57 2645 1 57 2646 1 57 2662 1 57 2663 1 57 2664 1 57 2665 1 57 2666 1 57 2667 1 57 2668 1 57 2669 1 57 2670 1 57 2671 1 57 2672 1 57 2673 1 57 2674 1 57 2675 1 57 2676 1 57 2767 1 57 2768 1 57 2769 1 57 2770 1 57 2771 1 57 2772 1 57 2773 1 57 2774 1 57 2775 1 57 2776 1 57 2777 1 57 2778 1 57 2779 1 57 2780 1 57 2781 1 57 2802 1 57 2803 1 57 2804 1 57 2805 1 57 2806 1 57 2807 1 57 2808 1 57 2809 1 57 2810 1 57 2811 1 57 2812 1 57 2813 1 57 2814 1 57 2815 1 57 2816 1 57 2817 1 57 2818 1 57 2819 1 57 2820 1 57 2821 1 57 2893 1 57 2894 1 57 2895 1 57 2896 1 57 2897 1 57 2898 1 57 2899 1 57 2900 1 57 2901 1 57 2902 1 57 2903 1 57 2904 1 57 2905 1 57 2906 1 57 2907 1 57 2928 1 57 2929 1 57 2930 1 57 2931 1 57 2932 1 57 2933 1 57 2934 1 57 2935 1 57 2936 1 57 2937 1 57 2938 1 57 2939 1 57 2940 1 57 2941 1 57 2942 1 57 2943 1 57 2944 1 57 2945 1 57 2946 1 57 2947 1 57 3019 1 57 3020 1 57 3021 1 57 3022 1 57 3023 1 57 3024 1 57 3025 1 57 3026 1 57 3027 1 57 3028 1 57 3029 1 57 3030 1 57 3031 1 57 3032 1 57 3033 1 57 3034 1 57 3035 1 57 3036 1 57 3037 1 57 3038 1 57 3054 1 57 3055 1 57 3056 1 57 3057 1 57 3058 1 57 3059 1 57 3060 1 57 3061 1 57 3062 1 57 3063 1 57 3064 1 57 3065 1 57 3066 1 57 3067 1 57 3068 1 57 3103 1 57 3104 1 57 3105 1 57 3106 1 57 3107 1 57 3108 1 57 3109 1 57 3110 1 57 3111 1 57 3112 1 57 3113 1 57 3114 1 57 3115 1 57 3116 1 57 3117 1 57 3138 1 57 3139 1 57 3140 1 57 3141 1 57 3142 1 57 3143 1 57 3144 1 57 3145 1 57 3146 1 57 3147 1 57 3148 1 57 3149 1 57 3150 1 57 3151 1 57 3152 1 57 3153 1 57 3154 1 57 3155 1 57 3156 1 57 3157 1 57 3229 1 57 3230 1 57 3231 1 57 3232 1 57 3233 1 57 3234 1 57 3235 1 57 3236 1 57 3237 1 57 3238 1 57 3239 1 57 3240 1 57 3241 1 57 3242 1 57 3243 1 57 3244 1 57 3245 1 57 3246 1 57 3247 1 57 3248 1 57 3264 1 57 3265 1 57 3266 1 57 3267 1 57 3268 1 57 3269 1 57 3270 1 57 3271 1 57 3272 1 57 3273 1 57 3274 1 57 3275 1 57 3276 1 57 3277 1 57 3278 1 57 3313 1 57 3314 1 57 3315 1 57 3316 1 57 3317 1 57 3318 1 57 3319 1 57 3320 1 57 3321 1 57 3322 1 57 3323 1 57 3324 1 57 3325 1 57 3326 1 57 3327 1 57 3328 1 57 3329 1 57 3330 1 57 3331 1 57 3332 1 57 3348 1 57 3349 1 57 3350 1 57 3351 1 57 3352 1 57 3353 1 57 3354 1 57 3355 1 57 3356 1 57 3357 1 57 3358 1 57 3359 1 57 3360 1 57 3361 1 57 3362 1 57 3397 1 57 3398 1 57 3399 1 57 3400 1 57 3401 1 57 3402 1 57 3403 1 57 3404 1 57 3405 1 57 3406 1 57 3407 1 57 3408 1 57 3409 1 57 3410 1 57 3411 1 57 3418 1 57 3419 1 57 3420 1 57 3421 1 57 3422 1 57 3423 1 58 3 1 58 38 1 58 44 1 58 50 1 58 51 1 58 52 1 58 53 1 58 54 1 58 122 1 58 128 1 58 134 1 58 135 1 58 136 1 58 137 1 58 138 1 58 205 1 58 211 1 58 212 1 58 213 1 58 214 1 58 215 1 58 226 1 58 227 1 58 228 1 58 229 1 58 230 1 58 241 1 58 242 1 58 243 1 58 244 1 58 245 1 58 246 1 58 247 1 58 248 1 58 249 1 58 250 1 58 332 1 58 338 1 58 344 1 58 345 1 58 346 1 58 347 1 58 348 1 58 415 1 58 421 1 58 422 1 58 423 1 58 424 1 58 425 1 58 436 1 58 437 1 58 438 1 58 439 1 58 440 1 58 451 1 58 452 1 58 453 1 58 454 1 58 455 1 58 456 1 58 457 1 58 458 1 58 459 1 58 460 1 58 541 1 58 547 1 58 548 1 58 549 1 58 550 1 58 551 1 58 562 1 58 563 1 58 564 1 58 565 1 58 566 1 58 577 1 58 578 1 58 579 1 58 580 1 58 581 1 58 582 1 58 583 1 58 584 1 58 585 1 58 586 1 58 667 1 58 668 1 58 669 1 58 670 1 58 671 1 58 682 1 58 683 1 58 684 1 58 685 1 58 686 1 58 687 1 58 688 1 58 689 1 58 690 1 58 691 1 58 702 1 58 703 1 58 704 1 58 705 1 58 706 1 58 707 1 58 708 1 58 709 1 58 710 1 58 711 1 58 722 1 58 723 1 58 724 1 58 725 1 58 726 1 58 727 1 58 728 1 58 729 1 58 730 1 58 731 1 58 794 1 58 800 1 58 806 1 58 807 1 58 808 1 58 809 1 58 810 1 58 877 1 58 883 1 58 884 1 58 885 1 58 886 1 58 887 1 58 898 1 58 899 1 58 900 1 58 901 1 58 902 1 58 913 1 58 914 1 58 915 1 58 916 1 58 917 1 58 918 1 58 919 1 58 920 1 58 921 1 58 922 1 58 1003 1 58 1009 1 58 1010 1 58 1011 1 58 1012 1 58 1013 1 58 1024 1 58 1025 1 58 1026 1 58 1027 1 58 1028 1 58 1039 1 58 1040 1 58 1041 1 58 1042 1 58 1043 1 58 1044 1 58 1045 1 58 1046 1 58 1047 1 58 1048 1 58 1129 1 58 1130 1 58 1131 1 58 1132 1 58 1133 1 58 1144 1 58 1145 1 58 1146 1 58 1147 1 58 1148 1 58 1149 1 58 1150 1 58 1151 1 58 1152 1 58 1153 1 58 1164 1 58 1165 1 58 1166 1 58 1167 1 58 1168 1 58 1169 1 58 1170 1 58 1171 1 58 1172 1 58 1173 1 58 1184 1 58 1185 1 58 1186 1 58 1187 1 58 1188 1 58 1189 1 58 1190 1 58 1191 1 58 1192 1 58 1193 1 58 1255 1 58 1261 1 58 1262 1 58 1263 1 58 1264 1 58 1265 1 58 1276 1 58 1277 1 58 1278 1 58 1279 1 58 1280 1 58 1291 1 58 1292 1 58 1293 1 58 1294 1 58 1295 1 58 1296 1 58 1297 1 58 1298 1 58 1299 1 58 1300 1 58 1381 1 58 1382 1 58 1383 1 58 1384 1 58 1385 1 58 1396 1 58 1397 1 58 1398 1 58 1399 1 58 1400 1 58 1401 1 58 1402 1 58 1403 1 58 1404 1 58 1405 1 58 1416 1 58 1417 1 58 1418 1 58 1419 1 58 1420 1 58 1421 1 58 1422 1 58 1423 1 58 1424 1 58 1425 1 58 1436 1 58 1437 1 58 1438 1 58 1439 1 58 1440 1 58 1441 1 58 1442 1 58 1443 1 58 1444 1 58 1445 1 58 1507 1 58 1508 1 58 1509 1 58 1510 1 58 1511 1 58 1522 1 58 1523 1 58 1524 1 58 1525 1 58 1526 1 58 1527 1 58 1528 1 58 1529 1 58 1530 1 58 1531 1 58 1542 1 58 1543 1 58 1544 1 58 1545 1 58 1546 1 58 1547 1 58 1548 1 58 1549 1 58 1550 1 58 1551 1 58 1562 1 58 1563 1 58 1564 1 58 1565 1 58 1566 1 58 1567 1 58 1568 1 58 1569 1 58 1570 1 58 1571 1 58 1633 1 58 1634 1 58 1635 1 58 1636 1 58 1637 1 58 1638 1 58 1639 1 58 1640 1 58 1641 1 58 1642 1 58 1653 1 58 1654 1 58 1655 1 58 1656 1 58 1657 1 58 1658 1 58 1659 1 58 1660 1 58 1661 1 58 1662 1 58 1668 1 58 1669 1 58 1670 1 58 1671 1 58 1672 1 58 1673 1 58 1674 1 58 1675 1 58 1676 1 58 1677 1 58 1683 1 58 1684 1 58 1685 1 58 1686 1 58 1687 1 58 1718 1 58 1724 1 58 1730 1 58 1731 1 58 1732 1 58 1733 1 58 1734 1 58 1801 1 58 1807 1 58 1808 1 58 1809 1 58 1810 1 58 1811 1 58 1822 1 58 1823 1 58 1824 1 58 1825 1 58 1826 1 58 1837 1 58 1838 1 58 1839 1 58 1840 1 58 1841 1 58 1842 1 58 1843 1 58 1844 1 58 1845 1 58 1846 1 58 1927 1 58 1933 1 58 1934 1 58 1935 1 58 1936 1 58 1937 1 58 1948 1 58 1949 1 58 1950 1 58 1951 1 58 1952 1 58 1963 1 58 1964 1 58 1965 1 58 1966 1 58 1967 1 58 1968 1 58 1969 1 58 1970 1 58 1971 1 58 1972 1 58 2053 1 58 2054 1 58 2055 1 58 2056 1 58 2057 1 58 2068 1 58 2069 1 58 2070 1 58 2071 1 58 2072 1 58 2073 1 58 2074 1 58 2075 1 58 2076 1 58 2077 1 58 2088 1 58 2089 1 58 2090 1 58 2091 1 58 2092 1 58 2093 1 58 2094 1 58 2095 1 58 2096 1 58 2097 1 58 2108 1 58 2109 1 58 2110 1 58 2111 1 58 2112 1 58 2113 1 58 2114 1 58 2115 1 58 2116 1 58 2117 1 58 2179 1 58 2185 1 58 2186 1 58 2187 1 58 2188 1 58 2189 1 58 2200 1 58 2201 1 58 2202 1 58 2203 1 58 2204 1 58 2215 1 58 2216 1 58 2217 1 58 2218 1 58 2219 1 58 2220 1 58 2221 1 58 2222 1 58 2223 1 58 2224 1 58 2305 1 58 2306 1 58 2307 1 58 2308 1 58 2309 1 58 2320 1 58 2321 1 58 2322 1 58 2323 1 58 2324 1 58 2325 1 58 2326 1 58 2327 1 58 2328 1 58 2329 1 58 2340 1 58 2341 1 58 2342 1 58 2343 1 58 2344 1 58 2345 1 58 2346 1 58 2347 1 58 2348 1 58 2349 1 58 2360 1 58 2361 1 58 2362 1 58 2363 1 58 2364 1 58 2365 1 58 2366 1 58 2367 1 58 2368 1 58 2369 1 58 2431 1 58 2432 1 58 2433 1 58 2434 1 58 2435 1 58 2446 1 58 2447 1 58 2448 1 58 2449 1 58 2450 1 58 2451 1 58 2452 1 58 2453 1 58 2454 1 58 2455 1 58 2466 1 58 2467 1 58 2468 1 58 2469 1 58 2470 1 58 2471 1 58 2472 1 58 2473 1 58 2474 1 58 2475 1 58 2486 1 58 2487 1 58 2488 1 58 2489 1 58 2490 1 58 2491 1 58 2492 1 58 2493 1 58 2494 1 58 2495 1 58 2557 1 58 2558 1 58 2559 1 58 2560 1 58 2561 1 58 2562 1 58 2563 1 58 2564 1 58 2565 1 58 2566 1 58 2577 1 58 2578 1 58 2579 1 58 2580 1 58 2581 1 58 2582 1 58 2583 1 58 2584 1 58 2585 1 58 2586 1 58 2592 1 58 2593 1 58 2594 1 58 2595 1 58 2596 1 58 2597 1 58 2598 1 58 2599 1 58 2600 1 58 2601 1 58 2607 1 58 2608 1 58 2609 1 58 2610 1 58 2611 1 58 2641 1 58 2647 1 58 2648 1 58 2649 1 58 2650 1 58 2651 1 58 2662 1 58 2663 1 58 2664 1 58 2665 1 58 2666 1 58 2677 1 58 2678 1 58 2679 1 58 2680 1 58 2681 1 58 2682 1 58 2683 1 58 2684 1 58 2685 1 58 2686 1 58 2767 1 58 2768 1 58 2769 1 58 2770 1 58 2771 1 58 2782 1 58 2783 1 58 2784 1 58 2785 1 58 2786 1 58 2787 1 58 2788 1 58 2789 1 58 2790 1 58 2791 1 58 2802 1 58 2803 1 58 2804 1 58 2805 1 58 2806 1 58 2807 1 58 2808 1 58 2809 1 58 2810 1 58 2811 1 58 2822 1 58 2823 1 58 2824 1 58 2825 1 58 2826 1 58 2827 1 58 2828 1 58 2829 1 58 2830 1 58 2831 1 58 2893 1 58 2894 1 58 2895 1 58 2896 1 58 2897 1 58 2908 1 58 2909 1 58 2910 1 58 2911 1 58 2912 1 58 2913 1 58 2914 1 58 2915 1 58 2916 1 58 2917 1 58 2928 1 58 2929 1 58 2930 1 58 2931 1 58 2932 1 58 2933 1 58 2934 1 58 2935 1 58 2936 1 58 2937 1 58 2948 1 58 2949 1 58 2950 1 58 2951 1 58 2952 1 58 2953 1 58 2954 1 58 2955 1 58 2956 1 58 2957 1 58 3019 1 58 3020 1 58 3021 1 58 3022 1 58 3023 1 58 3024 1 58 3025 1 58 3026 1 58 3027 1 58 3028 1 58 3039 1 58 3040 1 58 3041 1 58 3042 1 58 3043 1 58 3044 1 58 3045 1 58 3046 1 58 3047 1 58 3048 1 58 3054 1 58 3055 1 58 3056 1 58 3057 1 58 3058 1 58 3059 1 58 3060 1 58 3061 1 58 3062 1 58 3063 1 58 3069 1 58 3070 1 58 3071 1 58 3072 1 58 3073 1 58 3103 1 58 3104 1 58 3105 1 58 3106 1 58 3107 1 58 3118 1 58 3119 1 58 3120 1 58 3121 1 58 3122 1 58 3123 1 58 3124 1 58 3125 1 58 3126 1 58 3127 1 58 3138 1 58 3139 1 58 3140 1 58 3141 1 58 3142 1 58 3143 1 58 3144 1 58 3145 1 58 3146 1 58 3147 1 58 3158 1 58 3159 1 58 3160 1 58 3161 1 58 3162 1 58 3163 1 58 3164 1 58 3165 1 58 3166 1 58 3167 1 58 3229 1 58 3230 1 58 3231 1 58 3232 1 58 3233 1 58 3234 1 58 3235 1 58 3236 1 58 3237 1 58 3238 1 58 3249 1 58 3250 1 58 3251 1 58 3252 1 58 3253 1 58 3254 1 58 3255 1 58 3256 1 58 3257 1 58 3258 1 58 3264 1 58 3265 1 58 3266 1 58 3267 1 58 3268 1 58 3269 1 58 3270 1 58 3271 1 58 3272 1 58 3273 1 58 3279 1 58 3280 1 58 3281 1 58 3282 1 58 3283 1 58 3313 1 58 3314 1 58 3315 1 58 3316 1 58 3317 1 58 3318 1 58 3319 1 58 3320 1 58 3321 1 58 3322 1 58 3333 1 58 3334 1 58 3335 1 58 3336 1 58 3337 1 58 3338 1 58 3339 1 58 3340 1 58 3341 1 58 3342 1 58 3348 1 58 3349 1 58 3350 1 58 3351 1 58 3352 1 58 3353 1 58 3354 1 58 3355 1 58 3356 1 58 3357 1 58 3363 1 58 3364 1 58 3365 1 58 3366 1 58 3367 1 58 3397 1 58 3398 1 58 3399 1 58 3400 1 58 3401 1 58 3402 1 58 3403 1 58 3404 1 58 3405 1 58 3406 1 58 3412 1 58 3413 1 58 3414 1 58 3415 1 58 3416 1 58 3418 1 58 3419 1 58 3420 1 58 3421 1 58 3422 1 58 3424 1 59 4 1 59 39 1 59 45 1 59 50 1 59 55 1 59 56 1 59 57 1 59 58 1 59 123 1 59 129 1 59 134 1 59 139 1 59 140 1 59 141 1 59 142 1 59 206 1 59 211 1 59 216 1 59 217 1 59 218 1 59 219 1 59 226 1 59 231 1 59 232 1 59 233 1 59 234 1 59 241 1 59 242 1 59 243 1 59 244 1 59 251 1 59 252 1 59 253 1 59 254 1 59 255 1 59 256 1 59 333 1 59 339 1 59 344 1 59 349 1 59 350 1 59 351 1 59 352 1 59 416 1 59 421 1 59 426 1 59 427 1 59 428 1 59 429 1 59 436 1 59 441 1 59 442 1 59 443 1 59 444 1 59 451 1 59 452 1 59 453 1 59 454 1 59 461 1 59 462 1 59 463 1 59 464 1 59 465 1 59 466 1 59 542 1 59 547 1 59 552 1 59 553 1 59 554 1 59 555 1 59 562 1 59 567 1 59 568 1 59 569 1 59 570 1 59 577 1 59 578 1 59 579 1 59 580 1 59 587 1 59 588 1 59 589 1 59 590 1 59 591 1 59 592 1 59 667 1 59 672 1 59 673 1 59 674 1 59 675 1 59 682 1 59 683 1 59 684 1 59 685 1 59 692 1 59 693 1 59 694 1 59 695 1 59 696 1 59 697 1 59 702 1 59 703 1 59 704 1 59 705 1 59 712 1 59 713 1 59 714 1 59 715 1 59 716 1 59 717 1 59 722 1 59 723 1 59 724 1 59 725 1 59 726 1 59 727 1 59 732 1 59 733 1 59 734 1 59 735 1 59 795 1 59 801 1 59 806 1 59 811 1 59 812 1 59 813 1 59 814 1 59 878 1 59 883 1 59 888 1 59 889 1 59 890 1 59 891 1 59 898 1 59 903 1 59 904 1 59 905 1 59 906 1 59 913 1 59 914 1 59 915 1 59 916 1 59 923 1 59 924 1 59 925 1 59 926 1 59 927 1 59 928 1 59 1004 1 59 1009 1 59 1014 1 59 1015 1 59 1016 1 59 1017 1 59 1024 1 59 1029 1 59 1030 1 59 1031 1 59 1032 1 59 1039 1 59 1040 1 59 1041 1 59 1042 1 59 1049 1 59 1050 1 59 1051 1 59 1052 1 59 1053 1 59 1054 1 59 1129 1 59 1134 1 59 1135 1 59 1136 1 59 1137 1 59 1144 1 59 1145 1 59 1146 1 59 1147 1 59 1154 1 59 1155 1 59 1156 1 59 1157 1 59 1158 1 59 1159 1 59 1164 1 59 1165 1 59 1166 1 59 1167 1 59 1174 1 59 1175 1 59 1176 1 59 1177 1 59 1178 1 59 1179 1 59 1184 1 59 1185 1 59 1186 1 59 1187 1 59 1188 1 59 1189 1 59 1194 1 59 1195 1 59 1196 1 59 1197 1 59 1256 1 59 1261 1 59 1266 1 59 1267 1 59 1268 1 59 1269 1 59 1276 1 59 1281 1 59 1282 1 59 1283 1 59 1284 1 59 1291 1 59 1292 1 59 1293 1 59 1294 1 59 1301 1 59 1302 1 59 1303 1 59 1304 1 59 1305 1 59 1306 1 59 1381 1 59 1386 1 59 1387 1 59 1388 1 59 1389 1 59 1396 1 59 1397 1 59 1398 1 59 1399 1 59 1406 1 59 1407 1 59 1408 1 59 1409 1 59 1410 1 59 1411 1 59 1416 1 59 1417 1 59 1418 1 59 1419 1 59 1426 1 59 1427 1 59 1428 1 59 1429 1 59 1430 1 59 1431 1 59 1436 1 59 1437 1 59 1438 1 59 1439 1 59 1440 1 59 1441 1 59 1446 1 59 1447 1 59 1448 1 59 1449 1 59 1507 1 59 1512 1 59 1513 1 59 1514 1 59 1515 1 59 1522 1 59 1523 1 59 1524 1 59 1525 1 59 1532 1 59 1533 1 59 1534 1 59 1535 1 59 1536 1 59 1537 1 59 1542 1 59 1543 1 59 1544 1 59 1545 1 59 1552 1 59 1553 1 59 1554 1 59 1555 1 59 1556 1 59 1557 1 59 1562 1 59 1563 1 59 1564 1 59 1565 1 59 1566 1 59 1567 1 59 1572 1 59 1573 1 59 1574 1 59 1575 1 59 1633 1 59 1634 1 59 1635 1 59 1636 1 59 1643 1 59 1644 1 59 1645 1 59 1646 1 59 1647 1 59 1648 1 59 1653 1 59 1654 1 59 1655 1 59 1656 1 59 1657 1 59 1658 1 59 1663 1 59 1664 1 59 1665 1 59 1666 1 59 1668 1 59 1669 1 59 1670 1 59 1671 1 59 1672 1 59 1673 1 59 1678 1 59 1679 1 59 1680 1 59 1681 1 59 1683 1 59 1684 1 59 1685 1 59 1686 1 59 1688 1 59 1719 1 59 1725 1 59 1730 1 59 1735 1 59 1736 1 59 1737 1 59 1738 1 59 1802 1 59 1807 1 59 1812 1 59 1813 1 59 1814 1 59 1815 1 59 1822 1 59 1827 1 59 1828 1 59 1829 1 59 1830 1 59 1837 1 59 1838 1 59 1839 1 59 1840 1 59 1847 1 59 1848 1 59 1849 1 59 1850 1 59 1851 1 59 1852 1 59 1928 1 59 1933 1 59 1938 1 59 1939 1 59 1940 1 59 1941 1 59 1948 1 59 1953 1 59 1954 1 59 1955 1 59 1956 1 59 1963 1 59 1964 1 59 1965 1 59 1966 1 59 1973 1 59 1974 1 59 1975 1 59 1976 1 59 1977 1 59 1978 1 59 2053 1 59 2058 1 59 2059 1 59 2060 1 59 2061 1 59 2068 1 59 2069 1 59 2070 1 59 2071 1 59 2078 1 59 2079 1 59 2080 1 59 2081 1 59 2082 1 59 2083 1 59 2088 1 59 2089 1 59 2090 1 59 2091 1 59 2098 1 59 2099 1 59 2100 1 59 2101 1 59 2102 1 59 2103 1 59 2108 1 59 2109 1 59 2110 1 59 2111 1 59 2112 1 59 2113 1 59 2118 1 59 2119 1 59 2120 1 59 2121 1 59 2180 1 59 2185 1 59 2190 1 59 2191 1 59 2192 1 59 2193 1 59 2200 1 59 2205 1 59 2206 1 59 2207 1 59 2208 1 59 2215 1 59 2216 1 59 2217 1 59 2218 1 59 2225 1 59 2226 1 59 2227 1 59 2228 1 59 2229 1 59 2230 1 59 2305 1 59 2310 1 59 2311 1 59 2312 1 59 2313 1 59 2320 1 59 2321 1 59 2322 1 59 2323 1 59 2330 1 59 2331 1 59 2332 1 59 2333 1 59 2334 1 59 2335 1 59 2340 1 59 2341 1 59 2342 1 59 2343 1 59 2350 1 59 2351 1 59 2352 1 59 2353 1 59 2354 1 59 2355 1 59 2360 1 59 2361 1 59 2362 1 59 2363 1 59 2364 1 59 2365 1 59 2370 1 59 2371 1 59 2372 1 59 2373 1 59 2431 1 59 2436 1 59 2437 1 59 2438 1 59 2439 1 59 2446 1 59 2447 1 59 2448 1 59 2449 1 59 2456 1 59 2457 1 59 2458 1 59 2459 1 59 2460 1 59 2461 1 59 2466 1 59 2467 1 59 2468 1 59 2469 1 59 2476 1 59 2477 1 59 2478 1 59 2479 1 59 2480 1 59 2481 1 59 2486 1 59 2487 1 59 2488 1 59 2489 1 59 2490 1 59 2491 1 59 2496 1 59 2497 1 59 2498 1 59 2499 1 59 2557 1 59 2558 1 59 2559 1 59 2560 1 59 2567 1 59 2568 1 59 2569 1 59 2570 1 59 2571 1 59 2572 1 59 2577 1 59 2578 1 59 2579 1 59 2580 1 59 2581 1 59 2582 1 59 2587 1 59 2588 1 59 2589 1 59 2590 1 59 2592 1 59 2593 1 59 2594 1 59 2595 1 59 2596 1 59 2597 1 59 2602 1 59 2603 1 59 2604 1 59 2605 1 59 2607 1 59 2608 1 59 2609 1 59 2610 1 59 2612 1 59 2642 1 59 2647 1 59 2652 1 59 2653 1 59 2654 1 59 2655 1 59 2662 1 59 2667 1 59 2668 1 59 2669 1 59 2670 1 59 2677 1 59 2678 1 59 2679 1 59 2680 1 59 2687 1 59 2688 1 59 2689 1 59 2690 1 59 2691 1 59 2692 1 59 2767 1 59 2772 1 59 2773 1 59 2774 1 59 2775 1 59 2782 1 59 2783 1 59 2784 1 59 2785 1 59 2792 1 59 2793 1 59 2794 1 59 2795 1 59 2796 1 59 2797 1 59 2802 1 59 2803 1 59 2804 1 59 2805 1 59 2812 1 59 2813 1 59 2814 1 59 2815 1 59 2816 1 59 2817 1 59 2822 1 59 2823 1 59 2824 1 59 2825 1 59 2826 1 59 2827 1 59 2832 1 59 2833 1 59 2834 1 59 2835 1 59 2893 1 59 2898 1 59 2899 1 59 2900 1 59 2901 1 59 2908 1 59 2909 1 59 2910 1 59 2911 1 59 2918 1 59 2919 1 59 2920 1 59 2921 1 59 2922 1 59 2923 1 59 2928 1 59 2929 1 59 2930 1 59 2931 1 59 2938 1 59 2939 1 59 2940 1 59 2941 1 59 2942 1 59 2943 1 59 2948 1 59 2949 1 59 2950 1 59 2951 1 59 2952 1 59 2953 1 59 2958 1 59 2959 1 59 2960 1 59 2961 1 59 3019 1 59 3020 1 59 3021 1 59 3022 1 59 3029 1 59 3030 1 59 3031 1 59 3032 1 59 3033 1 59 3034 1 59 3039 1 59 3040 1 59 3041 1 59 3042 1 59 3043 1 59 3044 1 59 3049 1 59 3050 1 59 3051 1 59 3052 1 59 3054 1 59 3055 1 59 3056 1 59 3057 1 59 3058 1 59 3059 1 59 3064 1 59 3065 1 59 3066 1 59 3067 1 59 3069 1 59 3070 1 59 3071 1 59 3072 1 59 3074 1 59 3103 1 59 3108 1 59 3109 1 59 3110 1 59 3111 1 59 3118 1 59 3119 1 59 3120 1 59 3121 1 59 3128 1 59 3129 1 59 3130 1 59 3131 1 59 3132 1 59 3133 1 59 3138 1 59 3139 1 59 3140 1 59 3141 1 59 3148 1 59 3149 1 59 3150 1 59 3151 1 59 3152 1 59 3153 1 59 3158 1 59 3159 1 59 3160 1 59 3161 1 59 3162 1 59 3163 1 59 3168 1 59 3169 1 59 3170 1 59 3171 1 59 3229 1 59 3230 1 59 3231 1 59 3232 1 59 3239 1 59 3240 1 59 3241 1 59 3242 1 59 3243 1 59 3244 1 59 3249 1 59 3250 1 59 3251 1 59 3252 1 59 3253 1 59 3254 1 59 3259 1 59 3260 1 59 3261 1 59 3262 1 59 3264 1 59 3265 1 59 3266 1 59 3267 1 59 3268 1 59 3269 1 59 3274 1 59 3275 1 59 3276 1 59 3277 1 59 3279 1 59 3280 1 59 3281 1 59 3282 1 59 3284 1 59 3313 1 59 3314 1 59 3315 1 59 3316 1 59 3323 1 59 3324 1 59 3325 1 59 3326 1 59 3327 1 59 3328 1 59 3333 1 59 3334 1 59 3335 1 59 3336 1 59 3337 1 59 3338 1 59 3343 1 59 3344 1 59 3345 1 59 3346 1 59 3348 1 59 3349 1 59 3350 1 59 3351 1 59 3352 1 59 3353 1 59 3358 1 59 3359 1 59 3360 1 59 3361 1 59 3363 1 59 3364 1 59 3365 1 59 3366 1 59 3368 1 59 3397 1 59 3398 1 59 3399 1 59 3400 1 59 3401 1 59 3402 1 59 3407 1 59 3408 1 59 3409 1 59 3410 1 59 3412 1 59 3413 1 59 3414 1 59 3415 1 59 3417 1 59 3418 1 59 3419 1 59 3420 1 59 3421 1 59 3423 1 59 3424 1 60 5 1 60 40 1 60 46 1 60 51 1 60 55 1 60 59 1 60 60 1 60 61 1 60 124 1 60 130 1 60 135 1 60 139 1 60 143 1 60 144 1 60 145 1 60 207 1 60 212 1 60 216 1 60 220 1 60 221 1 60 222 1 60 227 1 60 231 1 60 235 1 60 236 1 60 237 1 60 241 1 60 245 1 60 246 1 60 247 1 60 251 1 60 252 1 60 253 1 60 257 1 60 258 1 60 259 1 60 334 1 60 340 1 60 345 1 60 349 1 60 353 1 60 354 1 60 355 1 60 417 1 60 422 1 60 426 1 60 430 1 60 431 1 60 432 1 60 437 1 60 441 1 60 445 1 60 446 1 60 447 1 60 451 1 60 455 1 60 456 1 60 457 1 60 461 1 60 462 1 60 463 1 60 467 1 60 468 1 60 469 1 60 543 1 60 548 1 60 552 1 60 556 1 60 557 1 60 558 1 60 563 1 60 567 1 60 571 1 60 572 1 60 573 1 60 577 1 60 581 1 60 582 1 60 583 1 60 587 1 60 588 1 60 589 1 60 593 1 60 594 1 60 595 1 60 668 1 60 672 1 60 676 1 60 677 1 60 678 1 60 682 1 60 686 1 60 687 1 60 688 1 60 692 1 60 693 1 60 694 1 60 698 1 60 699 1 60 700 1 60 702 1 60 706 1 60 707 1 60 708 1 60 712 1 60 713 1 60 714 1 60 718 1 60 719 1 60 720 1 60 722 1 60 723 1 60 724 1 60 728 1 60 729 1 60 730 1 60 732 1 60 733 1 60 734 1 60 736 1 60 796 1 60 802 1 60 807 1 60 811 1 60 815 1 60 816 1 60 817 1 60 879 1 60 884 1 60 888 1 60 892 1 60 893 1 60 894 1 60 899 1 60 903 1 60 907 1 60 908 1 60 909 1 60 913 1 60 917 1 60 918 1 60 919 1 60 923 1 60 924 1 60 925 1 60 929 1 60 930 1 60 931 1 60 1005 1 60 1010 1 60 1014 1 60 1018 1 60 1019 1 60 1020 1 60 1025 1 60 1029 1 60 1033 1 60 1034 1 60 1035 1 60 1039 1 60 1043 1 60 1044 1 60 1045 1 60 1049 1 60 1050 1 60 1051 1 60 1055 1 60 1056 1 60 1057 1 60 1130 1 60 1134 1 60 1138 1 60 1139 1 60 1140 1 60 1144 1 60 1148 1 60 1149 1 60 1150 1 60 1154 1 60 1155 1 60 1156 1 60 1160 1 60 1161 1 60 1162 1 60 1164 1 60 1168 1 60 1169 1 60 1170 1 60 1174 1 60 1175 1 60 1176 1 60 1180 1 60 1181 1 60 1182 1 60 1184 1 60 1185 1 60 1186 1 60 1190 1 60 1191 1 60 1192 1 60 1194 1 60 1195 1 60 1196 1 60 1198 1 60 1257 1 60 1262 1 60 1266 1 60 1270 1 60 1271 1 60 1272 1 60 1277 1 60 1281 1 60 1285 1 60 1286 1 60 1287 1 60 1291 1 60 1295 1 60 1296 1 60 1297 1 60 1301 1 60 1302 1 60 1303 1 60 1307 1 60 1308 1 60 1309 1 60 1382 1 60 1386 1 60 1390 1 60 1391 1 60 1392 1 60 1396 1 60 1400 1 60 1401 1 60 1402 1 60 1406 1 60 1407 1 60 1408 1 60 1412 1 60 1413 1 60 1414 1 60 1416 1 60 1420 1 60 1421 1 60 1422 1 60 1426 1 60 1427 1 60 1428 1 60 1432 1 60 1433 1 60 1434 1 60 1436 1 60 1437 1 60 1438 1 60 1442 1 60 1443 1 60 1444 1 60 1446 1 60 1447 1 60 1448 1 60 1450 1 60 1508 1 60 1512 1 60 1516 1 60 1517 1 60 1518 1 60 1522 1 60 1526 1 60 1527 1 60 1528 1 60 1532 1 60 1533 1 60 1534 1 60 1538 1 60 1539 1 60 1540 1 60 1542 1 60 1546 1 60 1547 1 60 1548 1 60 1552 1 60 1553 1 60 1554 1 60 1558 1 60 1559 1 60 1560 1 60 1562 1 60 1563 1 60 1564 1 60 1568 1 60 1569 1 60 1570 1 60 1572 1 60 1573 1 60 1574 1 60 1576 1 60 1633 1 60 1637 1 60 1638 1 60 1639 1 60 1643 1 60 1644 1 60 1645 1 60 1649 1 60 1650 1 60 1651 1 60 1653 1 60 1654 1 60 1655 1 60 1659 1 60 1660 1 60 1661 1 60 1663 1 60 1664 1 60 1665 1 60 1667 1 60 1668 1 60 1669 1 60 1670 1 60 1674 1 60 1675 1 60 1676 1 60 1678 1 60 1679 1 60 1680 1 60 1682 1 60 1683 1 60 1684 1 60 1685 1 60 1687 1 60 1688 1 60 1720 1 60 1726 1 60 1731 1 60 1735 1 60 1739 1 60 1740 1 60 1741 1 60 1803 1 60 1808 1 60 1812 1 60 1816 1 60 1817 1 60 1818 1 60 1823 1 60 1827 1 60 1831 1 60 1832 1 60 1833 1 60 1837 1 60 1841 1 60 1842 1 60 1843 1 60 1847 1 60 1848 1 60 1849 1 60 1853 1 60 1854 1 60 1855 1 60 1929 1 60 1934 1 60 1938 1 60 1942 1 60 1943 1 60 1944 1 60 1949 1 60 1953 1 60 1957 1 60 1958 1 60 1959 1 60 1963 1 60 1967 1 60 1968 1 60 1969 1 60 1973 1 60 1974 1 60 1975 1 60 1979 1 60 1980 1 60 1981 1 60 2054 1 60 2058 1 60 2062 1 60 2063 1 60 2064 1 60 2068 1 60 2072 1 60 2073 1 60 2074 1 60 2078 1 60 2079 1 60 2080 1 60 2084 1 60 2085 1 60 2086 1 60 2088 1 60 2092 1 60 2093 1 60 2094 1 60 2098 1 60 2099 1 60 2100 1 60 2104 1 60 2105 1 60 2106 1 60 2108 1 60 2109 1 60 2110 1 60 2114 1 60 2115 1 60 2116 1 60 2118 1 60 2119 1 60 2120 1 60 2122 1 60 2181 1 60 2186 1 60 2190 1 60 2194 1 60 2195 1 60 2196 1 60 2201 1 60 2205 1 60 2209 1 60 2210 1 60 2211 1 60 2215 1 60 2219 1 60 2220 1 60 2221 1 60 2225 1 60 2226 1 60 2227 1 60 2231 1 60 2232 1 60 2233 1 60 2306 1 60 2310 1 60 2314 1 60 2315 1 60 2316 1 60 2320 1 60 2324 1 60 2325 1 60 2326 1 60 2330 1 60 2331 1 60 2332 1 60 2336 1 60 2337 1 60 2338 1 60 2340 1 60 2344 1 60 2345 1 60 2346 1 60 2350 1 60 2351 1 60 2352 1 60 2356 1 60 2357 1 60 2358 1 60 2360 1 60 2361 1 60 2362 1 60 2366 1 60 2367 1 60 2368 1 60 2370 1 60 2371 1 60 2372 1 60 2374 1 60 2432 1 60 2436 1 60 2440 1 60 2441 1 60 2442 1 60 2446 1 60 2450 1 60 2451 1 60 2452 1 60 2456 1 60 2457 1 60 2458 1 60 2462 1 60 2463 1 60 2464 1 60 2466 1 60 2470 1 60 2471 1 60 2472 1 60 2476 1 60 2477 1 60 2478 1 60 2482 1 60 2483 1 60 2484 1 60 2486 1 60 2487 1 60 2488 1 60 2492 1 60 2493 1 60 2494 1 60 2496 1 60 2497 1 60 2498 1 60 2500 1 60 2557 1 60 2561 1 60 2562 1 60 2563 1 60 2567 1 60 2568 1 60 2569 1 60 2573 1 60 2574 1 60 2575 1 60 2577 1 60 2578 1 60 2579 1 60 2583 1 60 2584 1 60 2585 1 60 2587 1 60 2588 1 60 2589 1 60 2591 1 60 2592 1 60 2593 1 60 2594 1 60 2598 1 60 2599 1 60 2600 1 60 2602 1 60 2603 1 60 2604 1 60 2606 1 60 2607 1 60 2608 1 60 2609 1 60 2611 1 60 2612 1 60 2643 1 60 2648 1 60 2652 1 60 2656 1 60 2657 1 60 2658 1 60 2663 1 60 2667 1 60 2671 1 60 2672 1 60 2673 1 60 2677 1 60 2681 1 60 2682 1 60 2683 1 60 2687 1 60 2688 1 60 2689 1 60 2693 1 60 2694 1 60 2695 1 60 2768 1 60 2772 1 60 2776 1 60 2777 1 60 2778 1 60 2782 1 60 2786 1 60 2787 1 60 2788 1 60 2792 1 60 2793 1 60 2794 1 60 2798 1 60 2799 1 60 2800 1 60 2802 1 60 2806 1 60 2807 1 60 2808 1 60 2812 1 60 2813 1 60 2814 1 60 2818 1 60 2819 1 60 2820 1 60 2822 1 60 2823 1 60 2824 1 60 2828 1 60 2829 1 60 2830 1 60 2832 1 60 2833 1 60 2834 1 60 2836 1 60 2894 1 60 2898 1 60 2902 1 60 2903 1 60 2904 1 60 2908 1 60 2912 1 60 2913 1 60 2914 1 60 2918 1 60 2919 1 60 2920 1 60 2924 1 60 2925 1 60 2926 1 60 2928 1 60 2932 1 60 2933 1 60 2934 1 60 2938 1 60 2939 1 60 2940 1 60 2944 1 60 2945 1 60 2946 1 60 2948 1 60 2949 1 60 2950 1 60 2954 1 60 2955 1 60 2956 1 60 2958 1 60 2959 1 60 2960 1 60 2962 1 60 3019 1 60 3023 1 60 3024 1 60 3025 1 60 3029 1 60 3030 1 60 3031 1 60 3035 1 60 3036 1 60 3037 1 60 3039 1 60 3040 1 60 3041 1 60 3045 1 60 3046 1 60 3047 1 60 3049 1 60 3050 1 60 3051 1 60 3053 1 60 3054 1 60 3055 1 60 3056 1 60 3060 1 60 3061 1 60 3062 1 60 3064 1 60 3065 1 60 3066 1 60 3068 1 60 3069 1 60 3070 1 60 3071 1 60 3073 1 60 3074 1 60 3104 1 60 3108 1 60 3112 1 60 3113 1 60 3114 1 60 3118 1 60 3122 1 60 3123 1 60 3124 1 60 3128 1 60 3129 1 60 3130 1 60 3134 1 60 3135 1 60 3136 1 60 3138 1 60 3142 1 60 3143 1 60 3144 1 60 3148 1 60 3149 1 60 3150 1 60 3154 1 60 3155 1 60 3156 1 60 3158 1 60 3159 1 60 3160 1 60 3164 1 60 3165 1 60 3166 1 60 3168 1 60 3169 1 60 3170 1 60 3172 1 60 3229 1 60 3233 1 60 3234 1 60 3235 1 60 3239 1 60 3240 1 60 3241 1 60 3245 1 60 3246 1 60 3247 1 60 3249 1 60 3250 1 60 3251 1 60 3255 1 60 3256 1 60 3257 1 60 3259 1 60 3260 1 60 3261 1 60 3263 1 60 3264 1 60 3265 1 60 3266 1 60 3270 1 60 3271 1 60 3272 1 60 3274 1 60 3275 1 60 3276 1 60 3278 1 60 3279 1 60 3280 1 60 3281 1 60 3283 1 60 3284 1 60 3313 1 60 3317 1 60 3318 1 60 3319 1 60 3323 1 60 3324 1 60 3325 1 60 3329 1 60 3330 1 60 3331 1 60 3333 1 60 3334 1 60 3335 1 60 3339 1 60 3340 1 60 3341 1 60 3343 1 60 3344 1 60 3345 1 60 3347 1 60 3348 1 60 3349 1 60 3350 1 60 3354 1 60 3355 1 60 3356 1 60 3358 1 60 3359 1 60 3360 1 60 3362 1 60 3363 1 60 3364 1 60 3365 1 60 3367 1 60 3368 1 60 3397 1 60 3398 1 60 3399 1 60 3403 1 60 3404 1 60 3405 1 60 3407 1 60 3408 1 60 3409 1 60 3411 1 60 3412 1 60 3413 1 60 3414 1 60 3416 1 60 3417 1 60 3418 1 60 3419 1 60 3420 1 60 3422 1 60 3423 1 60 3424 1 61 6 1 61 41 1 61 47 1 61 52 1 61 56 1 61 59 1 61 62 1 61 63 1 61 125 1 61 131 1 61 136 1 61 140 1 61 143 1 61 146 1 61 147 1 61 208 1 61 213 1 61 217 1 61 220 1 61 223 1 61 224 1 61 228 1 61 232 1 61 235 1 61 238 1 61 239 1 61 242 1 61 245 1 61 248 1 61 249 1 61 251 1 61 254 1 61 255 1 61 257 1 61 258 1 61 260 1 61 335 1 61 341 1 61 346 1 61 350 1 61 353 1 61 356 1 61 357 1 61 418 1 61 423 1 61 427 1 61 430 1 61 433 1 61 434 1 61 438 1 61 442 1 61 445 1 61 448 1 61 449 1 61 452 1 61 455 1 61 458 1 61 459 1 61 461 1 61 464 1 61 465 1 61 467 1 61 468 1 61 470 1 61 544 1 61 549 1 61 553 1 61 556 1 61 559 1 61 560 1 61 564 1 61 568 1 61 571 1 61 574 1 61 575 1 61 578 1 61 581 1 61 584 1 61 585 1 61 587 1 61 590 1 61 591 1 61 593 1 61 594 1 61 596 1 61 669 1 61 673 1 61 676 1 61 679 1 61 680 1 61 683 1 61 686 1 61 689 1 61 690 1 61 692 1 61 695 1 61 696 1 61 698 1 61 699 1 61 701 1 61 703 1 61 706 1 61 709 1 61 710 1 61 712 1 61 715 1 61 716 1 61 718 1 61 719 1 61 721 1 61 722 1 61 725 1 61 726 1 61 728 1 61 729 1 61 731 1 61 732 1 61 733 1 61 735 1 61 736 1 61 797 1 61 803 1 61 808 1 61 812 1 61 815 1 61 818 1 61 819 1 61 880 1 61 885 1 61 889 1 61 892 1 61 895 1 61 896 1 61 900 1 61 904 1 61 907 1 61 910 1 61 911 1 61 914 1 61 917 1 61 920 1 61 921 1 61 923 1 61 926 1 61 927 1 61 929 1 61 930 1 61 932 1 61 1006 1 61 1011 1 61 1015 1 61 1018 1 61 1021 1 61 1022 1 61 1026 1 61 1030 1 61 1033 1 61 1036 1 61 1037 1 61 1040 1 61 1043 1 61 1046 1 61 1047 1 61 1049 1 61 1052 1 61 1053 1 61 1055 1 61 1056 1 61 1058 1 61 1131 1 61 1135 1 61 1138 1 61 1141 1 61 1142 1 61 1145 1 61 1148 1 61 1151 1 61 1152 1 61 1154 1 61 1157 1 61 1158 1 61 1160 1 61 1161 1 61 1163 1 61 1165 1 61 1168 1 61 1171 1 61 1172 1 61 1174 1 61 1177 1 61 1178 1 61 1180 1 61 1181 1 61 1183 1 61 1184 1 61 1187 1 61 1188 1 61 1190 1 61 1191 1 61 1193 1 61 1194 1 61 1195 1 61 1197 1 61 1198 1 61 1258 1 61 1263 1 61 1267 1 61 1270 1 61 1273 1 61 1274 1 61 1278 1 61 1282 1 61 1285 1 61 1288 1 61 1289 1 61 1292 1 61 1295 1 61 1298 1 61 1299 1 61 1301 1 61 1304 1 61 1305 1 61 1307 1 61 1308 1 61 1310 1 61 1383 1 61 1387 1 61 1390 1 61 1393 1 61 1394 1 61 1397 1 61 1400 1 61 1403 1 61 1404 1 61 1406 1 61 1409 1 61 1410 1 61 1412 1 61 1413 1 61 1415 1 61 1417 1 61 1420 1 61 1423 1 61 1424 1 61 1426 1 61 1429 1 61 1430 1 61 1432 1 61 1433 1 61 1435 1 61 1436 1 61 1439 1 61 1440 1 61 1442 1 61 1443 1 61 1445 1 61 1446 1 61 1447 1 61 1449 1 61 1450 1 61 1509 1 61 1513 1 61 1516 1 61 1519 1 61 1520 1 61 1523 1 61 1526 1 61 1529 1 61 1530 1 61 1532 1 61 1535 1 61 1536 1 61 1538 1 61 1539 1 61 1541 1 61 1543 1 61 1546 1 61 1549 1 61 1550 1 61 1552 1 61 1555 1 61 1556 1 61 1558 1 61 1559 1 61 1561 1 61 1562 1 61 1565 1 61 1566 1 61 1568 1 61 1569 1 61 1571 1 61 1572 1 61 1573 1 61 1575 1 61 1576 1 61 1634 1 61 1637 1 61 1640 1 61 1641 1 61 1643 1 61 1646 1 61 1647 1 61 1649 1 61 1650 1 61 1652 1 61 1653 1 61 1656 1 61 1657 1 61 1659 1 61 1660 1 61 1662 1 61 1663 1 61 1664 1 61 1666 1 61 1667 1 61 1668 1 61 1671 1 61 1672 1 61 1674 1 61 1675 1 61 1677 1 61 1678 1 61 1679 1 61 1681 1 61 1682 1 61 1683 1 61 1684 1 61 1686 1 61 1687 1 61 1688 1 61 1721 1 61 1727 1 61 1732 1 61 1736 1 61 1739 1 61 1742 1 61 1743 1 61 1804 1 61 1809 1 61 1813 1 61 1816 1 61 1819 1 61 1820 1 61 1824 1 61 1828 1 61 1831 1 61 1834 1 61 1835 1 61 1838 1 61 1841 1 61 1844 1 61 1845 1 61 1847 1 61 1850 1 61 1851 1 61 1853 1 61 1854 1 61 1856 1 61 1930 1 61 1935 1 61 1939 1 61 1942 1 61 1945 1 61 1946 1 61 1950 1 61 1954 1 61 1957 1 61 1960 1 61 1961 1 61 1964 1 61 1967 1 61 1970 1 61 1971 1 61 1973 1 61 1976 1 61 1977 1 61 1979 1 61 1980 1 61 1982 1 61 2055 1 61 2059 1 61 2062 1 61 2065 1 61 2066 1 61 2069 1 61 2072 1 61 2075 1 61 2076 1 61 2078 1 61 2081 1 61 2082 1 61 2084 1 61 2085 1 61 2087 1 61 2089 1 61 2092 1 61 2095 1 61 2096 1 61 2098 1 61 2101 1 61 2102 1 61 2104 1 61 2105 1 61 2107 1 61 2108 1 61 2111 1 61 2112 1 61 2114 1 61 2115 1 61 2117 1 61 2118 1 61 2119 1 61 2121 1 61 2122 1 61 2182 1 61 2187 1 61 2191 1 61 2194 1 61 2197 1 61 2198 1 61 2202 1 61 2206 1 61 2209 1 61 2212 1 61 2213 1 61 2216 1 61 2219 1 61 2222 1 61 2223 1 61 2225 1 61 2228 1 61 2229 1 61 2231 1 61 2232 1 61 2234 1 61 2307 1 61 2311 1 61 2314 1 61 2317 1 61 2318 1 61 2321 1 61 2324 1 61 2327 1 61 2328 1 61 2330 1 61 2333 1 61 2334 1 61 2336 1 61 2337 1 61 2339 1 61 2341 1 61 2344 1 61 2347 1 61 2348 1 61 2350 1 61 2353 1 61 2354 1 61 2356 1 61 2357 1 61 2359 1 61 2360 1 61 2363 1 61 2364 1 61 2366 1 61 2367 1 61 2369 1 61 2370 1 61 2371 1 61 2373 1 61 2374 1 61 2433 1 61 2437 1 61 2440 1 61 2443 1 61 2444 1 61 2447 1 61 2450 1 61 2453 1 61 2454 1 61 2456 1 61 2459 1 61 2460 1 61 2462 1 61 2463 1 61 2465 1 61 2467 1 61 2470 1 61 2473 1 61 2474 1 61 2476 1 61 2479 1 61 2480 1 61 2482 1 61 2483 1 61 2485 1 61 2486 1 61 2489 1 61 2490 1 61 2492 1 61 2493 1 61 2495 1 61 2496 1 61 2497 1 61 2499 1 61 2500 1 61 2558 1 61 2561 1 61 2564 1 61 2565 1 61 2567 1 61 2570 1 61 2571 1 61 2573 1 61 2574 1 61 2576 1 61 2577 1 61 2580 1 61 2581 1 61 2583 1 61 2584 1 61 2586 1 61 2587 1 61 2588 1 61 2590 1 61 2591 1 61 2592 1 61 2595 1 61 2596 1 61 2598 1 61 2599 1 61 2601 1 61 2602 1 61 2603 1 61 2605 1 61 2606 1 61 2607 1 61 2608 1 61 2610 1 61 2611 1 61 2612 1 61 2644 1 61 2649 1 61 2653 1 61 2656 1 61 2659 1 61 2660 1 61 2664 1 61 2668 1 61 2671 1 61 2674 1 61 2675 1 61 2678 1 61 2681 1 61 2684 1 61 2685 1 61 2687 1 61 2690 1 61 2691 1 61 2693 1 61 2694 1 61 2696 1 61 2769 1 61 2773 1 61 2776 1 61 2779 1 61 2780 1 61 2783 1 61 2786 1 61 2789 1 61 2790 1 61 2792 1 61 2795 1 61 2796 1 61 2798 1 61 2799 1 61 2801 1 61 2803 1 61 2806 1 61 2809 1 61 2810 1 61 2812 1 61 2815 1 61 2816 1 61 2818 1 61 2819 1 61 2821 1 61 2822 1 61 2825 1 61 2826 1 61 2828 1 61 2829 1 61 2831 1 61 2832 1 61 2833 1 61 2835 1 61 2836 1 61 2895 1 61 2899 1 61 2902 1 61 2905 1 61 2906 1 61 2909 1 61 2912 1 61 2915 1 61 2916 1 61 2918 1 61 2921 1 61 2922 1 61 2924 1 61 2925 1 61 2927 1 61 2929 1 61 2932 1 61 2935 1 61 2936 1 61 2938 1 61 2941 1 61 2942 1 61 2944 1 61 2945 1 61 2947 1 61 2948 1 61 2951 1 61 2952 1 61 2954 1 61 2955 1 61 2957 1 61 2958 1 61 2959 1 61 2961 1 61 2962 1 61 3020 1 61 3023 1 61 3026 1 61 3027 1 61 3029 1 61 3032 1 61 3033 1 61 3035 1 61 3036 1 61 3038 1 61 3039 1 61 3042 1 61 3043 1 61 3045 1 61 3046 1 61 3048 1 61 3049 1 61 3050 1 61 3052 1 61 3053 1 61 3054 1 61 3057 1 61 3058 1 61 3060 1 61 3061 1 61 3063 1 61 3064 1 61 3065 1 61 3067 1 61 3068 1 61 3069 1 61 3070 1 61 3072 1 61 3073 1 61 3074 1 61 3105 1 61 3109 1 61 3112 1 61 3115 1 61 3116 1 61 3119 1 61 3122 1 61 3125 1 61 3126 1 61 3128 1 61 3131 1 61 3132 1 61 3134 1 61 3135 1 61 3137 1 61 3139 1 61 3142 1 61 3145 1 61 3146 1 61 3148 1 61 3151 1 61 3152 1 61 3154 1 61 3155 1 61 3157 1 61 3158 1 61 3161 1 61 3162 1 61 3164 1 61 3165 1 61 3167 1 61 3168 1 61 3169 1 61 3171 1 61 3172 1 61 3230 1 61 3233 1 61 3236 1 61 3237 1 61 3239 1 61 3242 1 61 3243 1 61 3245 1 61 3246 1 61 3248 1 61 3249 1 61 3252 1 61 3253 1 61 3255 1 61 3256 1 61 3258 1 61 3259 1 61 3260 1 61 3262 1 61 3263 1 61 3264 1 61 3267 1 61 3268 1 61 3270 1 61 3271 1 61 3273 1 61 3274 1 61 3275 1 61 3277 1 61 3278 1 61 3279 1 61 3280 1 61 3282 1 61 3283 1 61 3284 1 61 3314 1 61 3317 1 61 3320 1 61 3321 1 61 3323 1 61 3326 1 61 3327 1 61 3329 1 61 3330 1 61 3332 1 61 3333 1 61 3336 1 61 3337 1 61 3339 1 61 3340 1 61 3342 1 61 3343 1 61 3344 1 61 3346 1 61 3347 1 61 3348 1 61 3351 1 61 3352 1 61 3354 1 61 3355 1 61 3357 1 61 3358 1 61 3359 1 61 3361 1 61 3362 1 61 3363 1 61 3364 1 61 3366 1 61 3367 1 61 3368 1 61 3397 1 61 3400 1 61 3401 1 61 3403 1 61 3404 1 61 3406 1 61 3407 1 61 3408 1 61 3410 1 61 3411 1 61 3412 1 61 3413 1 61 3415 1 61 3416 1 61 3417 1 61 3418 1 61 3419 1 61 3421 1 61 3422 1 61 3423 1 61 3424 1 62 7 1 62 42 1 62 48 1 62 53 1 62 57 1 62 60 1 62 62 1 62 64 1 62 126 1 62 132 1 62 137 1 62 141 1 62 144 1 62 146 1 62 148 1 62 209 1 62 214 1 62 218 1 62 221 1 62 223 1 62 225 1 62 229 1 62 233 1 62 236 1 62 238 1 62 240 1 62 243 1 62 246 1 62 248 1 62 250 1 62 252 1 62 254 1 62 256 1 62 257 1 62 259 1 62 260 1 62 336 1 62 342 1 62 347 1 62 351 1 62 354 1 62 356 1 62 358 1 62 419 1 62 424 1 62 428 1 62 431 1 62 433 1 62 435 1 62 439 1 62 443 1 62 446 1 62 448 1 62 450 1 62 453 1 62 456 1 62 458 1 62 460 1 62 462 1 62 464 1 62 466 1 62 467 1 62 469 1 62 470 1 62 545 1 62 550 1 62 554 1 62 557 1 62 559 1 62 561 1 62 565 1 62 569 1 62 572 1 62 574 1 62 576 1 62 579 1 62 582 1 62 584 1 62 586 1 62 588 1 62 590 1 62 592 1 62 593 1 62 595 1 62 596 1 62 670 1 62 674 1 62 677 1 62 679 1 62 681 1 62 684 1 62 687 1 62 689 1 62 691 1 62 693 1 62 695 1 62 697 1 62 698 1 62 700 1 62 701 1 62 704 1 62 707 1 62 709 1 62 711 1 62 713 1 62 715 1 62 717 1 62 718 1 62 720 1 62 721 1 62 723 1 62 725 1 62 727 1 62 728 1 62 730 1 62 731 1 62 732 1 62 734 1 62 735 1 62 736 1 62 798 1 62 804 1 62 809 1 62 813 1 62 816 1 62 818 1 62 820 1 62 881 1 62 886 1 62 890 1 62 893 1 62 895 1 62 897 1 62 901 1 62 905 1 62 908 1 62 910 1 62 912 1 62 915 1 62 918 1 62 920 1 62 922 1 62 924 1 62 926 1 62 928 1 62 929 1 62 931 1 62 932 1 62 1007 1 62 1012 1 62 1016 1 62 1019 1 62 1021 1 62 1023 1 62 1027 1 62 1031 1 62 1034 1 62 1036 1 62 1038 1 62 1041 1 62 1044 1 62 1046 1 62 1048 1 62 1050 1 62 1052 1 62 1054 1 62 1055 1 62 1057 1 62 1058 1 62 1132 1 62 1136 1 62 1139 1 62 1141 1 62 1143 1 62 1146 1 62 1149 1 62 1151 1 62 1153 1 62 1155 1 62 1157 1 62 1159 1 62 1160 1 62 1162 1 62 1163 1 62 1166 1 62 1169 1 62 1171 1 62 1173 1 62 1175 1 62 1177 1 62 1179 1 62 1180 1 62 1182 1 62 1183 1 62 1185 1 62 1187 1 62 1189 1 62 1190 1 62 1192 1 62 1193 1 62 1194 1 62 1196 1 62 1197 1 62 1198 1 62 1259 1 62 1264 1 62 1268 1 62 1271 1 62 1273 1 62 1275 1 62 1279 1 62 1283 1 62 1286 1 62 1288 1 62 1290 1 62 1293 1 62 1296 1 62 1298 1 62 1300 1 62 1302 1 62 1304 1 62 1306 1 62 1307 1 62 1309 1 62 1310 1 62 1384 1 62 1388 1 62 1391 1 62 1393 1 62 1395 1 62 1398 1 62 1401 1 62 1403 1 62 1405 1 62 1407 1 62 1409 1 62 1411 1 62 1412 1 62 1414 1 62 1415 1 62 1418 1 62 1421 1 62 1423 1 62 1425 1 62 1427 1 62 1429 1 62 1431 1 62 1432 1 62 1434 1 62 1435 1 62 1437 1 62 1439 1 62 1441 1 62 1442 1 62 1444 1 62 1445 1 62 1446 1 62 1448 1 62 1449 1 62 1450 1 62 1510 1 62 1514 1 62 1517 1 62 1519 1 62 1521 1 62 1524 1 62 1527 1 62 1529 1 62 1531 1 62 1533 1 62 1535 1 62 1537 1 62 1538 1 62 1540 1 62 1541 1 62 1544 1 62 1547 1 62 1549 1 62 1551 1 62 1553 1 62 1555 1 62 1557 1 62 1558 1 62 1560 1 62 1561 1 62 1563 1 62 1565 1 62 1567 1 62 1568 1 62 1570 1 62 1571 1 62 1572 1 62 1574 1 62 1575 1 62 1576 1 62 1635 1 62 1638 1 62 1640 1 62 1642 1 62 1644 1 62 1646 1 62 1648 1 62 1649 1 62 1651 1 62 1652 1 62 1654 1 62 1656 1 62 1658 1 62 1659 1 62 1661 1 62 1662 1 62 1663 1 62 1665 1 62 1666 1 62 1667 1 62 1669 1 62 1671 1 62 1673 1 62 1674 1 62 1676 1 62 1677 1 62 1678 1 62 1680 1 62 1681 1 62 1682 1 62 1683 1 62 1685 1 62 1686 1 62 1687 1 62 1688 1 62 1722 1 62 1728 1 62 1733 1 62 1737 1 62 1740 1 62 1742 1 62 1744 1 62 1805 1 62 1810 1 62 1814 1 62 1817 1 62 1819 1 62 1821 1 62 1825 1 62 1829 1 62 1832 1 62 1834 1 62 1836 1 62 1839 1 62 1842 1 62 1844 1 62 1846 1 62 1848 1 62 1850 1 62 1852 1 62 1853 1 62 1855 1 62 1856 1 62 1931 1 62 1936 1 62 1940 1 62 1943 1 62 1945 1 62 1947 1 62 1951 1 62 1955 1 62 1958 1 62 1960 1 62 1962 1 62 1965 1 62 1968 1 62 1970 1 62 1972 1 62 1974 1 62 1976 1 62 1978 1 62 1979 1 62 1981 1 62 1982 1 62 2056 1 62 2060 1 62 2063 1 62 2065 1 62 2067 1 62 2070 1 62 2073 1 62 2075 1 62 2077 1 62 2079 1 62 2081 1 62 2083 1 62 2084 1 62 2086 1 62 2087 1 62 2090 1 62 2093 1 62 2095 1 62 2097 1 62 2099 1 62 2101 1 62 2103 1 62 2104 1 62 2106 1 62 2107 1 62 2109 1 62 2111 1 62 2113 1 62 2114 1 62 2116 1 62 2117 1 62 2118 1 62 2120 1 62 2121 1 62 2122 1 62 2183 1 62 2188 1 62 2192 1 62 2195 1 62 2197 1 62 2199 1 62 2203 1 62 2207 1 62 2210 1 62 2212 1 62 2214 1 62 2217 1 62 2220 1 62 2222 1 62 2224 1 62 2226 1 62 2228 1 62 2230 1 62 2231 1 62 2233 1 62 2234 1 62 2308 1 62 2312 1 62 2315 1 62 2317 1 62 2319 1 62 2322 1 62 2325 1 62 2327 1 62 2329 1 62 2331 1 62 2333 1 62 2335 1 62 2336 1 62 2338 1 62 2339 1 62 2342 1 62 2345 1 62 2347 1 62 2349 1 62 2351 1 62 2353 1 62 2355 1 62 2356 1 62 2358 1 62 2359 1 62 2361 1 62 2363 1 62 2365 1 62 2366 1 62 2368 1 62 2369 1 62 2370 1 62 2372 1 62 2373 1 62 2374 1 62 2434 1 62 2438 1 62 2441 1 62 2443 1 62 2445 1 62 2448 1 62 2451 1 62 2453 1 62 2455 1 62 2457 1 62 2459 1 62 2461 1 62 2462 1 62 2464 1 62 2465 1 62 2468 1 62 2471 1 62 2473 1 62 2475 1 62 2477 1 62 2479 1 62 2481 1 62 2482 1 62 2484 1 62 2485 1 62 2487 1 62 2489 1 62 2491 1 62 2492 1 62 2494 1 62 2495 1 62 2496 1 62 2498 1 62 2499 1 62 2500 1 62 2559 1 62 2562 1 62 2564 1 62 2566 1 62 2568 1 62 2570 1 62 2572 1 62 2573 1 62 2575 1 62 2576 1 62 2578 1 62 2580 1 62 2582 1 62 2583 1 62 2585 1 62 2586 1 62 2587 1 62 2589 1 62 2590 1 62 2591 1 62 2593 1 62 2595 1 62 2597 1 62 2598 1 62 2600 1 62 2601 1 62 2602 1 62 2604 1 62 2605 1 62 2606 1 62 2607 1 62 2609 1 62 2610 1 62 2611 1 62 2612 1 62 2645 1 62 2650 1 62 2654 1 62 2657 1 62 2659 1 62 2661 1 62 2665 1 62 2669 1 62 2672 1 62 2674 1 62 2676 1 62 2679 1 62 2682 1 62 2684 1 62 2686 1 62 2688 1 62 2690 1 62 2692 1 62 2693 1 62 2695 1 62 2696 1 62 2770 1 62 2774 1 62 2777 1 62 2779 1 62 2781 1 62 2784 1 62 2787 1 62 2789 1 62 2791 1 62 2793 1 62 2795 1 62 2797 1 62 2798 1 62 2800 1 62 2801 1 62 2804 1 62 2807 1 62 2809 1 62 2811 1 62 2813 1 62 2815 1 62 2817 1 62 2818 1 62 2820 1 62 2821 1 62 2823 1 62 2825 1 62 2827 1 62 2828 1 62 2830 1 62 2831 1 62 2832 1 62 2834 1 62 2835 1 62 2836 1 62 2896 1 62 2900 1 62 2903 1 62 2905 1 62 2907 1 62 2910 1 62 2913 1 62 2915 1 62 2917 1 62 2919 1 62 2921 1 62 2923 1 62 2924 1 62 2926 1 62 2927 1 62 2930 1 62 2933 1 62 2935 1 62 2937 1 62 2939 1 62 2941 1 62 2943 1 62 2944 1 62 2946 1 62 2947 1 62 2949 1 62 2951 1 62 2953 1 62 2954 1 62 2956 1 62 2957 1 62 2958 1 62 2960 1 62 2961 1 62 2962 1 62 3021 1 62 3024 1 62 3026 1 62 3028 1 62 3030 1 62 3032 1 62 3034 1 62 3035 1 62 3037 1 62 3038 1 62 3040 1 62 3042 1 62 3044 1 62 3045 1 62 3047 1 62 3048 1 62 3049 1 62 3051 1 62 3052 1 62 3053 1 62 3055 1 62 3057 1 62 3059 1 62 3060 1 62 3062 1 62 3063 1 62 3064 1 62 3066 1 62 3067 1 62 3068 1 62 3069 1 62 3071 1 62 3072 1 62 3073 1 62 3074 1 62 3106 1 62 3110 1 62 3113 1 62 3115 1 62 3117 1 62 3120 1 62 3123 1 62 3125 1 62 3127 1 62 3129 1 62 3131 1 62 3133 1 62 3134 1 62 3136 1 62 3137 1 62 3140 1 62 3143 1 62 3145 1 62 3147 1 62 3149 1 62 3151 1 62 3153 1 62 3154 1 62 3156 1 62 3157 1 62 3159 1 62 3161 1 62 3163 1 62 3164 1 62 3166 1 62 3167 1 62 3168 1 62 3170 1 62 3171 1 62 3172 1 62 3231 1 62 3234 1 62 3236 1 62 3238 1 62 3240 1 62 3242 1 62 3244 1 62 3245 1 62 3247 1 62 3248 1 62 3250 1 62 3252 1 62 3254 1 62 3255 1 62 3257 1 62 3258 1 62 3259 1 62 3261 1 62 3262 1 62 3263 1 62 3265 1 62 3267 1 62 3269 1 62 3270 1 62 3272 1 62 3273 1 62 3274 1 62 3276 1 62 3277 1 62 3278 1 62 3279 1 62 3281 1 62 3282 1 62 3283 1 62 3284 1 62 3315 1 62 3318 1 62 3320 1 62 3322 1 62 3324 1 62 3326 1 62 3328 1 62 3329 1 62 3331 1 62 3332 1 62 3334 1 62 3336 1 62 3338 1 62 3339 1 62 3341 1 62 3342 1 62 3343 1 62 3345 1 62 3346 1 62 3347 1 62 3349 1 62 3351 1 62 3353 1 62 3354 1 62 3356 1 62 3357 1 62 3358 1 62 3360 1 62 3361 1 62 3362 1 62 3363 1 62 3365 1 62 3366 1 62 3367 1 62 3368 1 62 3398 1 62 3400 1 62 3402 1 62 3403 1 62 3405 1 62 3406 1 62 3407 1 62 3409 1 62 3410 1 62 3411 1 62 3412 1 62 3414 1 62 3415 1 62 3416 1 62 3417 1 62 3418 1 62 3420 1 62 3421 1 62 3422 1 62 3423 1 62 3424 1 63 8 1 63 43 1 63 49 1 63 54 1 63 58 1 63 61 1 63 63 1 63 64 1 63 127 1 63 133 1 63 138 1 63 142 1 63 145 1 63 147 1 63 148 1 63 210 1 63 215 1 63 219 1 63 222 1 63 224 1 63 225 1 63 230 1 63 234 1 63 237 1 63 239 1 63 240 1 63 244 1 63 247 1 63 249 1 63 250 1 63 253 1 63 255 1 63 256 1 63 258 1 63 259 1 63 260 1 63 337 1 63 343 1 63 348 1 63 352 1 63 355 1 63 357 1 63 358 1 63 420 1 63 425 1 63 429 1 63 432 1 63 434 1 63 435 1 63 440 1 63 444 1 63 447 1 63 449 1 63 450 1 63 454 1 63 457 1 63 459 1 63 460 1 63 463 1 63 465 1 63 466 1 63 468 1 63 469 1 63 470 1 63 546 1 63 551 1 63 555 1 63 558 1 63 560 1 63 561 1 63 566 1 63 570 1 63 573 1 63 575 1 63 576 1 63 580 1 63 583 1 63 585 1 63 586 1 63 589 1 63 591 1 63 592 1 63 594 1 63 595 1 63 596 1 63 671 1 63 675 1 63 678 1 63 680 1 63 681 1 63 685 1 63 688 1 63 690 1 63 691 1 63 694 1 63 696 1 63 697 1 63 699 1 63 700 1 63 701 1 63 705 1 63 708 1 63 710 1 63 711 1 63 714 1 63 716 1 63 717 1 63 719 1 63 720 1 63 721 1 63 724 1 63 726 1 63 727 1 63 729 1 63 730 1 63 731 1 63 733 1 63 734 1 63 735 1 63 736 1 63 799 1 63 805 1 63 810 1 63 814 1 63 817 1 63 819 1 63 820 1 63 882 1 63 887 1 63 891 1 63 894 1 63 896 1 63 897 1 63 902 1 63 906 1 63 909 1 63 911 1 63 912 1 63 916 1 63 919 1 63 921 1 63 922 1 63 925 1 63 927 1 63 928 1 63 930 1 63 931 1 63 932 1 63 1008 1 63 1013 1 63 1017 1 63 1020 1 63 1022 1 63 1023 1 63 1028 1 63 1032 1 63 1035 1 63 1037 1 63 1038 1 63 1042 1 63 1045 1 63 1047 1 63 1048 1 63 1051 1 63 1053 1 63 1054 1 63 1056 1 63 1057 1 63 1058 1 63 1133 1 63 1137 1 63 1140 1 63 1142 1 63 1143 1 63 1147 1 63 1150 1 63 1152 1 63 1153 1 63 1156 1 63 1158 1 63 1159 1 63 1161 1 63 1162 1 63 1163 1 63 1167 1 63 1170 1 63 1172 1 63 1173 1 63 1176 1 63 1178 1 63 1179 1 63 1181 1 63 1182 1 63 1183 1 63 1186 1 63 1188 1 63 1189 1 63 1191 1 63 1192 1 63 1193 1 63 1195 1 63 1196 1 63 1197 1 63 1198 1 63 1260 1 63 1265 1 63 1269 1 63 1272 1 63 1274 1 63 1275 1 63 1280 1 63 1284 1 63 1287 1 63 1289 1 63 1290 1 63 1294 1 63 1297 1 63 1299 1 63 1300 1 63 1303 1 63 1305 1 63 1306 1 63 1308 1 63 1309 1 63 1310 1 63 1385 1 63 1389 1 63 1392 1 63 1394 1 63 1395 1 63 1399 1 63 1402 1 63 1404 1 63 1405 1 63 1408 1 63 1410 1 63 1411 1 63 1413 1 63 1414 1 63 1415 1 63 1419 1 63 1422 1 63 1424 1 63 1425 1 63 1428 1 63 1430 1 63 1431 1 63 1433 1 63 1434 1 63 1435 1 63 1438 1 63 1440 1 63 1441 1 63 1443 1 63 1444 1 63 1445 1 63 1447 1 63 1448 1 63 1449 1 63 1450 1 63 1511 1 63 1515 1 63 1518 1 63 1520 1 63 1521 1 63 1525 1 63 1528 1 63 1530 1 63 1531 1 63 1534 1 63 1536 1 63 1537 1 63 1539 1 63 1540 1 63 1541 1 63 1545 1 63 1548 1 63 1550 1 63 1551 1 63 1554 1 63 1556 1 63 1557 1 63 1559 1 63 1560 1 63 1561 1 63 1564 1 63 1566 1 63 1567 1 63 1569 1 63 1570 1 63 1571 1 63 1573 1 63 1574 1 63 1575 1 63 1576 1 63 1636 1 63 1639 1 63 1641 1 63 1642 1 63 1645 1 63 1647 1 63 1648 1 63 1650 1 63 1651 1 63 1652 1 63 1655 1 63 1657 1 63 1658 1 63 1660 1 63 1661 1 63 1662 1 63 1664 1 63 1665 1 63 1666 1 63 1667 1 63 1670 1 63 1672 1 63 1673 1 63 1675 1 63 1676 1 63 1677 1 63 1679 1 63 1680 1 63 1681 1 63 1682 1 63 1684 1 63 1685 1 63 1686 1 63 1687 1 63 1688 1 63 1723 1 63 1729 1 63 1734 1 63 1738 1 63 1741 1 63 1743 1 63 1744 1 63 1806 1 63 1811 1 63 1815 1 63 1818 1 63 1820 1 63 1821 1 63 1826 1 63 1830 1 63 1833 1 63 1835 1 63 1836 1 63 1840 1 63 1843 1 63 1845 1 63 1846 1 63 1849 1 63 1851 1 63 1852 1 63 1854 1 63 1855 1 63 1856 1 63 1932 1 63 1937 1 63 1941 1 63 1944 1 63 1946 1 63 1947 1 63 1952 1 63 1956 1 63 1959 1 63 1961 1 63 1962 1 63 1966 1 63 1969 1 63 1971 1 63 1972 1 63 1975 1 63 1977 1 63 1978 1 63 1980 1 63 1981 1 63 1982 1 63 2057 1 63 2061 1 63 2064 1 63 2066 1 63 2067 1 63 2071 1 63 2074 1 63 2076 1 63 2077 1 63 2080 1 63 2082 1 63 2083 1 63 2085 1 63 2086 1 63 2087 1 63 2091 1 63 2094 1 63 2096 1 63 2097 1 63 2100 1 63 2102 1 63 2103 1 63 2105 1 63 2106 1 63 2107 1 63 2110 1 63 2112 1 63 2113 1 63 2115 1 63 2116 1 63 2117 1 63 2119 1 63 2120 1 63 2121 1 63 2122 1 63 2184 1 63 2189 1 63 2193 1 63 2196 1 63 2198 1 63 2199 1 63 2204 1 63 2208 1 63 2211 1 63 2213 1 63 2214 1 63 2218 1 63 2221 1 63 2223 1 63 2224 1 63 2227 1 63 2229 1 63 2230 1 63 2232 1 63 2233 1 63 2234 1 63 2309 1 63 2313 1 63 2316 1 63 2318 1 63 2319 1 63 2323 1 63 2326 1 63 2328 1 63 2329 1 63 2332 1 63 2334 1 63 2335 1 63 2337 1 63 2338 1 63 2339 1 63 2343 1 63 2346 1 63 2348 1 63 2349 1 63 2352 1 63 2354 1 63 2355 1 63 2357 1 63 2358 1 63 2359 1 63 2362 1 63 2364 1 63 2365 1 63 2367 1 63 2368 1 63 2369 1 63 2371 1 63 2372 1 63 2373 1 63 2374 1 63 2435 1 63 2439 1 63 2442 1 63 2444 1 63 2445 1 63 2449 1 63 2452 1 63 2454 1 63 2455 1 63 2458 1 63 2460 1 63 2461 1 63 2463 1 63 2464 1 63 2465 1 63 2469 1 63 2472 1 63 2474 1 63 2475 1 63 2478 1 63 2480 1 63 2481 1 63 2483 1 63 2484 1 63 2485 1 63 2488 1 63 2490 1 63 2491 1 63 2493 1 63 2494 1 63 2495 1 63 2497 1 63 2498 1 63 2499 1 63 2500 1 63 2560 1 63 2563 1 63 2565 1 63 2566 1 63 2569 1 63 2571 1 63 2572 1 63 2574 1 63 2575 1 63 2576 1 63 2579 1 63 2581 1 63 2582 1 63 2584 1 63 2585 1 63 2586 1 63 2588 1 63 2589 1 63 2590 1 63 2591 1 63 2594 1 63 2596 1 63 2597 1 63 2599 1 63 2600 1 63 2601 1 63 2603 1 63 2604 1 63 2605 1 63 2606 1 63 2608 1 63 2609 1 63 2610 1 63 2611 1 63 2612 1 63 2646 1 63 2651 1 63 2655 1 63 2658 1 63 2660 1 63 2661 1 63 2666 1 63 2670 1 63 2673 1 63 2675 1 63 2676 1 63 2680 1 63 2683 1 63 2685 1 63 2686 1 63 2689 1 63 2691 1 63 2692 1 63 2694 1 63 2695 1 63 2696 1 63 2771 1 63 2775 1 63 2778 1 63 2780 1 63 2781 1 63 2785 1 63 2788 1 63 2790 1 63 2791 1 63 2794 1 63 2796 1 63 2797 1 63 2799 1 63 2800 1 63 2801 1 63 2805 1 63 2808 1 63 2810 1 63 2811 1 63 2814 1 63 2816 1 63 2817 1 63 2819 1 63 2820 1 63 2821 1 63 2824 1 63 2826 1 63 2827 1 63 2829 1 63 2830 1 63 2831 1 63 2833 1 63 2834 1 63 2835 1 63 2836 1 63 2897 1 63 2901 1 63 2904 1 63 2906 1 63 2907 1 63 2911 1 63 2914 1 63 2916 1 63 2917 1 63 2920 1 63 2922 1 63 2923 1 63 2925 1 63 2926 1 63 2927 1 63 2931 1 63 2934 1 63 2936 1 63 2937 1 63 2940 1 63 2942 1 63 2943 1 63 2945 1 63 2946 1 63 2947 1 63 2950 1 63 2952 1 63 2953 1 63 2955 1 63 2956 1 63 2957 1 63 2959 1 63 2960 1 63 2961 1 63 2962 1 63 3022 1 63 3025 1 63 3027 1 63 3028 1 63 3031 1 63 3033 1 63 3034 1 63 3036 1 63 3037 1 63 3038 1 63 3041 1 63 3043 1 63 3044 1 63 3046 1 63 3047 1 63 3048 1 63 3050 1 63 3051 1 63 3052 1 63 3053 1 63 3056 1 63 3058 1 63 3059 1 63 3061 1 63 3062 1 63 3063 1 63 3065 1 63 3066 1 63 3067 1 63 3068 1 63 3070 1 63 3071 1 63 3072 1 63 3073 1 63 3074 1 63 3107 1 63 3111 1 63 3114 1 63 3116 1 63 3117 1 63 3121 1 63 3124 1 63 3126 1 63 3127 1 63 3130 1 63 3132 1 63 3133 1 63 3135 1 63 3136 1 63 3137 1 63 3141 1 63 3144 1 63 3146 1 63 3147 1 63 3150 1 63 3152 1 63 3153 1 63 3155 1 63 3156 1 63 3157 1 63 3160 1 63 3162 1 63 3163 1 63 3165 1 63 3166 1 63 3167 1 63 3169 1 63 3170 1 63 3171 1 63 3172 1 63 3232 1 63 3235 1 63 3237 1 63 3238 1 63 3241 1 63 3243 1 63 3244 1 63 3246 1 63 3247 1 63 3248 1 63 3251 1 63 3253 1 63 3254 1 63 3256 1 63 3257 1 63 3258 1 63 3260 1 63 3261 1 63 3262 1 63 3263 1 63 3266 1 63 3268 1 63 3269 1 63 3271 1 63 3272 1 63 3273 1 63 3275 1 63 3276 1 63 3277 1 63 3278 1 63 3280 1 63 3281 1 63 3282 1 63 3283 1 63 3284 1 63 3316 1 63 3319 1 63 3321 1 63 3322 1 63 3325 1 63 3327 1 63 3328 1 63 3330 1 63 3331 1 63 3332 1 63 3335 1 63 3337 1 63 3338 1 63 3340 1 63 3341 1 63 3342 1 63 3344 1 63 3345 1 63 3346 1 63 3347 1 63 3350 1 63 3352 1 63 3353 1 63 3355 1 63 3356 1 63 3357 1 63 3359 1 63 3360 1 63 3361 1 63 3362 1 63 3364 1 63 3365 1 63 3366 1 63 3367 1 63 3368 1 63 3399 1 63 3401 1 63 3402 1 63 3404 1 63 3405 1 63 3406 1 63 3408 1 63 3409 1 63 3410 1 63 3411 1 63 3413 1 63 3414 1 63 3415 1 63 3416 1 63 3417 1 63 3419 1 63 3420 1 63 3421 1 63 3422 1 63 3423 1 63 3424 1 64 9 1 64 37 1 64 65 1 64 66 1 64 67 1 64 68 1 64 69 1 64 70 1 64 121 1 64 149 1 64 150 1 64 151 1 64 152 1 64 153 1 64 154 1 64 205 1 64 206 1 64 207 1 64 208 1 64 209 1 64 210 1 64 261 1 64 262 1 64 263 1 64 264 1 64 265 1 64 266 1 64 267 1 64 268 1 64 269 1 64 270 1 64 271 1 64 272 1 64 273 1 64 274 1 64 275 1 64 331 1 64 359 1 64 360 1 64 361 1 64 362 1 64 363 1 64 364 1 64 415 1 64 416 1 64 417 1 64 418 1 64 419 1 64 420 1 64 471 1 64 472 1 64 473 1 64 474 1 64 475 1 64 476 1 64 477 1 64 478 1 64 479 1 64 480 1 64 481 1 64 482 1 64 483 1 64 484 1 64 485 1 64 541 1 64 542 1 64 543 1 64 544 1 64 545 1 64 546 1 64 597 1 64 598 1 64 599 1 64 600 1 64 601 1 64 602 1 64 603 1 64 604 1 64 605 1 64 606 1 64 607 1 64 608 1 64 609 1 64 610 1 64 611 1 64 667 1 64 668 1 64 669 1 64 670 1 64 671 1 64 672 1 64 673 1 64 674 1 64 675 1 64 676 1 64 677 1 64 678 1 64 679 1 64 680 1 64 681 1 64 737 1 64 738 1 64 739 1 64 740 1 64 741 1 64 742 1 64 743 1 64 744 1 64 745 1 64 746 1 64 747 1 64 748 1 64 749 1 64 750 1 64 751 1 64 752 1 64 753 1 64 754 1 64 755 1 64 756 1 64 793 1 64 821 1 64 822 1 64 823 1 64 824 1 64 825 1 64 826 1 64 877 1 64 878 1 64 879 1 64 880 1 64 881 1 64 882 1 64 933 1 64 934 1 64 935 1 64 936 1 64 937 1 64 938 1 64 939 1 64 940 1 64 941 1 64 942 1 64 943 1 64 944 1 64 945 1 64 946 1 64 947 1 64 1003 1 64 1004 1 64 1005 1 64 1006 1 64 1007 1 64 1008 1 64 1059 1 64 1060 1 64 1061 1 64 1062 1 64 1063 1 64 1064 1 64 1065 1 64 1066 1 64 1067 1 64 1068 1 64 1069 1 64 1070 1 64 1071 1 64 1072 1 64 1073 1 64 1129 1 64 1130 1 64 1131 1 64 1132 1 64 1133 1 64 1134 1 64 1135 1 64 1136 1 64 1137 1 64 1138 1 64 1139 1 64 1140 1 64 1141 1 64 1142 1 64 1143 1 64 1199 1 64 1200 1 64 1201 1 64 1202 1 64 1203 1 64 1204 1 64 1205 1 64 1206 1 64 1207 1 64 1208 1 64 1209 1 64 1210 1 64 1211 1 64 1212 1 64 1213 1 64 1214 1 64 1215 1 64 1216 1 64 1217 1 64 1218 1 64 1255 1 64 1256 1 64 1257 1 64 1258 1 64 1259 1 64 1260 1 64 1311 1 64 1312 1 64 1313 1 64 1314 1 64 1315 1 64 1316 1 64 1317 1 64 1318 1 64 1319 1 64 1320 1 64 1321 1 64 1322 1 64 1323 1 64 1324 1 64 1325 1 64 1381 1 64 1382 1 64 1383 1 64 1384 1 64 1385 1 64 1386 1 64 1387 1 64 1388 1 64 1389 1 64 1390 1 64 1391 1 64 1392 1 64 1393 1 64 1394 1 64 1395 1 64 1451 1 64 1452 1 64 1453 1 64 1454 1 64 1455 1 64 1456 1 64 1457 1 64 1458 1 64 1459 1 64 1460 1 64 1461 1 64 1462 1 64 1463 1 64 1464 1 64 1465 1 64 1466 1 64 1467 1 64 1468 1 64 1469 1 64 1470 1 64 1507 1 64 1508 1 64 1509 1 64 1510 1 64 1511 1 64 1512 1 64 1513 1 64 1514 1 64 1515 1 64 1516 1 64 1517 1 64 1518 1 64 1519 1 64 1520 1 64 1521 1 64 1577 1 64 1578 1 64 1579 1 64 1580 1 64 1581 1 64 1582 1 64 1583 1 64 1584 1 64 1585 1 64 1586 1 64 1587 1 64 1588 1 64 1589 1 64 1590 1 64 1591 1 64 1592 1 64 1593 1 64 1594 1 64 1595 1 64 1596 1 64 1633 1 64 1634 1 64 1635 1 64 1636 1 64 1637 1 64 1638 1 64 1639 1 64 1640 1 64 1641 1 64 1642 1 64 1643 1 64 1644 1 64 1645 1 64 1646 1 64 1647 1 64 1648 1 64 1649 1 64 1650 1 64 1651 1 64 1652 1 64 1689 1 64 1690 1 64 1691 1 64 1692 1 64 1693 1 64 1694 1 64 1695 1 64 1696 1 64 1697 1 64 1698 1 64 1699 1 64 1700 1 64 1701 1 64 1702 1 64 1703 1 64 1717 1 64 1745 1 64 1746 1 64 1747 1 64 1748 1 64 1749 1 64 1750 1 64 1801 1 64 1802 1 64 1803 1 64 1804 1 64 1805 1 64 1806 1 64 1857 1 64 1858 1 64 1859 1 64 1860 1 64 1861 1 64 1862 1 64 1863 1 64 1864 1 64 1865 1 64 1866 1 64 1867 1 64 1868 1 64 1869 1 64 1870 1 64 1871 1 64 1927 1 64 1928 1 64 1929 1 64 1930 1 64 1931 1 64 1932 1 64 1983 1 64 1984 1 64 1985 1 64 1986 1 64 1987 1 64 1988 1 64 1989 1 64 1990 1 64 1991 1 64 1992 1 64 1993 1 64 1994 1 64 1995 1 64 1996 1 64 1997 1 64 2053 1 64 2054 1 64 2055 1 64 2056 1 64 2057 1 64 2058 1 64 2059 1 64 2060 1 64 2061 1 64 2062 1 64 2063 1 64 2064 1 64 2065 1 64 2066 1 64 2067 1 64 2123 1 64 2124 1 64 2125 1 64 2126 1 64 2127 1 64 2128 1 64 2129 1 64 2130 1 64 2131 1 64 2132 1 64 2133 1 64 2134 1 64 2135 1 64 2136 1 64 2137 1 64 2138 1 64 2139 1 64 2140 1 64 2141 1 64 2142 1 64 2179 1 64 2180 1 64 2181 1 64 2182 1 64 2183 1 64 2184 1 64 2235 1 64 2236 1 64 2237 1 64 2238 1 64 2239 1 64 2240 1 64 2241 1 64 2242 1 64 2243 1 64 2244 1 64 2245 1 64 2246 1 64 2247 1 64 2248 1 64 2249 1 64 2305 1 64 2306 1 64 2307 1 64 2308 1 64 2309 1 64 2310 1 64 2311 1 64 2312 1 64 2313 1 64 2314 1 64 2315 1 64 2316 1 64 2317 1 64 2318 1 64 2319 1 64 2375 1 64 2376 1 64 2377 1 64 2378 1 64 2379 1 64 2380 1 64 2381 1 64 2382 1 64 2383 1 64 2384 1 64 2385 1 64 2386 1 64 2387 1 64 2388 1 64 2389 1 64 2390 1 64 2391 1 64 2392 1 64 2393 1 64 2394 1 64 2431 1 64 2432 1 64 2433 1 64 2434 1 64 2435 1 64 2436 1 64 2437 1 64 2438 1 64 2439 1 64 2440 1 64 2441 1 64 2442 1 64 2443 1 64 2444 1 64 2445 1 64 2501 1 64 2502 1 64 2503 1 64 2504 1 64 2505 1 64 2506 1 64 2507 1 64 2508 1 64 2509 1 64 2510 1 64 2511 1 64 2512 1 64 2513 1 64 2514 1 64 2515 1 64 2516 1 64 2517 1 64 2518 1 64 2519 1 64 2520 1 64 2557 1 64 2558 1 64 2559 1 64 2560 1 64 2561 1 64 2562 1 64 2563 1 64 2564 1 64 2565 1 64 2566 1 64 2567 1 64 2568 1 64 2569 1 64 2570 1 64 2571 1 64 2572 1 64 2573 1 64 2574 1 64 2575 1 64 2576 1 64 2613 1 64 2614 1 64 2615 1 64 2616 1 64 2617 1 64 2618 1 64 2619 1 64 2620 1 64 2621 1 64 2622 1 64 2623 1 64 2624 1 64 2625 1 64 2626 1 64 2627 1 64 2641 1 64 2642 1 64 2643 1 64 2644 1 64 2645 1 64 2646 1 64 2697 1 64 2698 1 64 2699 1 64 2700 1 64 2701 1 64 2702 1 64 2703 1 64 2704 1 64 2705 1 64 2706 1 64 2707 1 64 2708 1 64 2709 1 64 2710 1 64 2711 1 64 2767 1 64 2768 1 64 2769 1 64 2770 1 64 2771 1 64 2772 1 64 2773 1 64 2774 1 64 2775 1 64 2776 1 64 2777 1 64 2778 1 64 2779 1 64 2780 1 64 2781 1 64 2837 1 64 2838 1 64 2839 1 64 2840 1 64 2841 1 64 2842 1 64 2843 1 64 2844 1 64 2845 1 64 2846 1 64 2847 1 64 2848 1 64 2849 1 64 2850 1 64 2851 1 64 2852 1 64 2853 1 64 2854 1 64 2855 1 64 2856 1 64 2893 1 64 2894 1 64 2895 1 64 2896 1 64 2897 1 64 2898 1 64 2899 1 64 2900 1 64 2901 1 64 2902 1 64 2903 1 64 2904 1 64 2905 1 64 2906 1 64 2907 1 64 2963 1 64 2964 1 64 2965 1 64 2966 1 64 2967 1 64 2968 1 64 2969 1 64 2970 1 64 2971 1 64 2972 1 64 2973 1 64 2974 1 64 2975 1 64 2976 1 64 2977 1 64 2978 1 64 2979 1 64 2980 1 64 2981 1 64 2982 1 64 3019 1 64 3020 1 64 3021 1 64 3022 1 64 3023 1 64 3024 1 64 3025 1 64 3026 1 64 3027 1 64 3028 1 64 3029 1 64 3030 1 64 3031 1 64 3032 1 64 3033 1 64 3034 1 64 3035 1 64 3036 1 64 3037 1 64 3038 1 64 3075 1 64 3076 1 64 3077 1 64 3078 1 64 3079 1 64 3080 1 64 3081 1 64 3082 1 64 3083 1 64 3084 1 64 3085 1 64 3086 1 64 3087 1 64 3088 1 64 3089 1 64 3103 1 64 3104 1 64 3105 1 64 3106 1 64 3107 1 64 3108 1 64 3109 1 64 3110 1 64 3111 1 64 3112 1 64 3113 1 64 3114 1 64 3115 1 64 3116 1 64 3117 1 64 3173 1 64 3174 1 64 3175 1 64 3176 1 64 3177 1 64 3178 1 64 3179 1 64 3180 1 64 3181 1 64 3182 1 64 3183 1 64 3184 1 64 3185 1 64 3186 1 64 3187 1 64 3188 1 64 3189 1 64 3190 1 64 3191 1 64 3192 1 64 3229 1 64 3230 1 64 3231 1 64 3232 1 64 3233 1 64 3234 1 64 3235 1 64 3236 1 64 3237 1 64 3238 1 64 3239 1 64 3240 1 64 3241 1 64 3242 1 64 3243 1 64 3244 1 64 3245 1 64 3246 1 64 3247 1 64 3248 1 64 3285 1 64 3286 1 64 3287 1 64 3288 1 64 3289 1 64 3290 1 64 3291 1 64 3292 1 64 3293 1 64 3294 1 64 3295 1 64 3296 1 64 3297 1 64 3298 1 64 3299 1 64 3313 1 64 3314 1 64 3315 1 64 3316 1 64 3317 1 64 3318 1 64 3319 1 64 3320 1 64 3321 1 64 3322 1 64 3323 1 64 3324 1 64 3325 1 64 3326 1 64 3327 1 64 3328 1 64 3329 1 64 3330 1 64 3331 1 64 3332 1 64 3369 1 64 3370 1 64 3371 1 64 3372 1 64 3373 1 64 3374 1 64 3375 1 64 3376 1 64 3377 1 64 3378 1 64 3379 1 64 3380 1 64 3381 1 64 3382 1 64 3383 1 64 3397 1 64 3398 1 64 3399 1 64 3400 1 64 3401 1 64 3402 1 64 3403 1 64 3404 1 64 3405 1 64 3406 1 64 3407 1 64 3408 1 64 3409 1 64 3410 1 64 3411 1 64 3425 1 64 3426 1 64 3427 1 64 3428 1 64 3429 1 64 3430 1 65 10 1 65 38 1 65 65 1 65 71 1 65 72 1 65 73 1 65 74 1 65 75 1 65 122 1 65 149 1 65 155 1 65 156 1 65 157 1 65 158 1 65 159 1 65 205 1 65 211 1 65 212 1 65 213 1 65 214 1 65 215 1 65 261 1 65 262 1 65 263 1 65 264 1 65 265 1 65 276 1 65 277 1 65 278 1 65 279 1 65 280 1 65 281 1 65 282 1 65 283 1 65 284 1 65 285 1 65 332 1 65 359 1 65 365 1 65 366 1 65 367 1 65 368 1 65 369 1 65 415 1 65 421 1 65 422 1 65 423 1 65 424 1 65 425 1 65 471 1 65 472 1 65 473 1 65 474 1 65 475 1 65 486 1 65 487 1 65 488 1 65 489 1 65 490 1 65 491 1 65 492 1 65 493 1 65 494 1 65 495 1 65 541 1 65 547 1 65 548 1 65 549 1 65 550 1 65 551 1 65 597 1 65 598 1 65 599 1 65 600 1 65 601 1 65 612 1 65 613 1 65 614 1 65 615 1 65 616 1 65 617 1 65 618 1 65 619 1 65 620 1 65 621 1 65 667 1 65 668 1 65 669 1 65 670 1 65 671 1 65 682 1 65 683 1 65 684 1 65 685 1 65 686 1 65 687 1 65 688 1 65 689 1 65 690 1 65 691 1 65 737 1 65 738 1 65 739 1 65 740 1 65 741 1 65 742 1 65 743 1 65 744 1 65 745 1 65 746 1 65 757 1 65 758 1 65 759 1 65 760 1 65 761 1 65 762 1 65 763 1 65 764 1 65 765 1 65 766 1 65 794 1 65 821 1 65 827 1 65 828 1 65 829 1 65 830 1 65 831 1 65 877 1 65 883 1 65 884 1 65 885 1 65 886 1 65 887 1 65 933 1 65 934 1 65 935 1 65 936 1 65 937 1 65 948 1 65 949 1 65 950 1 65 951 1 65 952 1 65 953 1 65 954 1 65 955 1 65 956 1 65 957 1 65 1003 1 65 1009 1 65 1010 1 65 1011 1 65 1012 1 65 1013 1 65 1059 1 65 1060 1 65 1061 1 65 1062 1 65 1063 1 65 1074 1 65 1075 1 65 1076 1 65 1077 1 65 1078 1 65 1079 1 65 1080 1 65 1081 1 65 1082 1 65 1083 1 65 1129 1 65 1130 1 65 1131 1 65 1132 1 65 1133 1 65 1144 1 65 1145 1 65 1146 1 65 1147 1 65 1148 1 65 1149 1 65 1150 1 65 1151 1 65 1152 1 65 1153 1 65 1199 1 65 1200 1 65 1201 1 65 1202 1 65 1203 1 65 1204 1 65 1205 1 65 1206 1 65 1207 1 65 1208 1 65 1219 1 65 1220 1 65 1221 1 65 1222 1 65 1223 1 65 1224 1 65 1225 1 65 1226 1 65 1227 1 65 1228 1 65 1255 1 65 1261 1 65 1262 1 65 1263 1 65 1264 1 65 1265 1 65 1311 1 65 1312 1 65 1313 1 65 1314 1 65 1315 1 65 1326 1 65 1327 1 65 1328 1 65 1329 1 65 1330 1 65 1331 1 65 1332 1 65 1333 1 65 1334 1 65 1335 1 65 1381 1 65 1382 1 65 1383 1 65 1384 1 65 1385 1 65 1396 1 65 1397 1 65 1398 1 65 1399 1 65 1400 1 65 1401 1 65 1402 1 65 1403 1 65 1404 1 65 1405 1 65 1451 1 65 1452 1 65 1453 1 65 1454 1 65 1455 1 65 1456 1 65 1457 1 65 1458 1 65 1459 1 65 1460 1 65 1471 1 65 1472 1 65 1473 1 65 1474 1 65 1475 1 65 1476 1 65 1477 1 65 1478 1 65 1479 1 65 1480 1 65 1507 1 65 1508 1 65 1509 1 65 1510 1 65 1511 1 65 1522 1 65 1523 1 65 1524 1 65 1525 1 65 1526 1 65 1527 1 65 1528 1 65 1529 1 65 1530 1 65 1531 1 65 1577 1 65 1578 1 65 1579 1 65 1580 1 65 1581 1 65 1582 1 65 1583 1 65 1584 1 65 1585 1 65 1586 1 65 1597 1 65 1598 1 65 1599 1 65 1600 1 65 1601 1 65 1602 1 65 1603 1 65 1604 1 65 1605 1 65 1606 1 65 1633 1 65 1634 1 65 1635 1 65 1636 1 65 1637 1 65 1638 1 65 1639 1 65 1640 1 65 1641 1 65 1642 1 65 1653 1 65 1654 1 65 1655 1 65 1656 1 65 1657 1 65 1658 1 65 1659 1 65 1660 1 65 1661 1 65 1662 1 65 1689 1 65 1690 1 65 1691 1 65 1692 1 65 1693 1 65 1694 1 65 1695 1 65 1696 1 65 1697 1 65 1698 1 65 1704 1 65 1705 1 65 1706 1 65 1707 1 65 1708 1 65 1718 1 65 1745 1 65 1751 1 65 1752 1 65 1753 1 65 1754 1 65 1755 1 65 1801 1 65 1807 1 65 1808 1 65 1809 1 65 1810 1 65 1811 1 65 1857 1 65 1858 1 65 1859 1 65 1860 1 65 1861 1 65 1872 1 65 1873 1 65 1874 1 65 1875 1 65 1876 1 65 1877 1 65 1878 1 65 1879 1 65 1880 1 65 1881 1 65 1927 1 65 1933 1 65 1934 1 65 1935 1 65 1936 1 65 1937 1 65 1983 1 65 1984 1 65 1985 1 65 1986 1 65 1987 1 65 1998 1 65 1999 1 65 2000 1 65 2001 1 65 2002 1 65 2003 1 65 2004 1 65 2005 1 65 2006 1 65 2007 1 65 2053 1 65 2054 1 65 2055 1 65 2056 1 65 2057 1 65 2068 1 65 2069 1 65 2070 1 65 2071 1 65 2072 1 65 2073 1 65 2074 1 65 2075 1 65 2076 1 65 2077 1 65 2123 1 65 2124 1 65 2125 1 65 2126 1 65 2127 1 65 2128 1 65 2129 1 65 2130 1 65 2131 1 65 2132 1 65 2143 1 65 2144 1 65 2145 1 65 2146 1 65 2147 1 65 2148 1 65 2149 1 65 2150 1 65 2151 1 65 2152 1 65 2179 1 65 2185 1 65 2186 1 65 2187 1 65 2188 1 65 2189 1 65 2235 1 65 2236 1 65 2237 1 65 2238 1 65 2239 1 65 2250 1 65 2251 1 65 2252 1 65 2253 1 65 2254 1 65 2255 1 65 2256 1 65 2257 1 65 2258 1 65 2259 1 65 2305 1 65 2306 1 65 2307 1 65 2308 1 65 2309 1 65 2320 1 65 2321 1 65 2322 1 65 2323 1 65 2324 1 65 2325 1 65 2326 1 65 2327 1 65 2328 1 65 2329 1 65 2375 1 65 2376 1 65 2377 1 65 2378 1 65 2379 1 65 2380 1 65 2381 1 65 2382 1 65 2383 1 65 2384 1 65 2395 1 65 2396 1 65 2397 1 65 2398 1 65 2399 1 65 2400 1 65 2401 1 65 2402 1 65 2403 1 65 2404 1 65 2431 1 65 2432 1 65 2433 1 65 2434 1 65 2435 1 65 2446 1 65 2447 1 65 2448 1 65 2449 1 65 2450 1 65 2451 1 65 2452 1 65 2453 1 65 2454 1 65 2455 1 65 2501 1 65 2502 1 65 2503 1 65 2504 1 65 2505 1 65 2506 1 65 2507 1 65 2508 1 65 2509 1 65 2510 1 65 2521 1 65 2522 1 65 2523 1 65 2524 1 65 2525 1 65 2526 1 65 2527 1 65 2528 1 65 2529 1 65 2530 1 65 2557 1 65 2558 1 65 2559 1 65 2560 1 65 2561 1 65 2562 1 65 2563 1 65 2564 1 65 2565 1 65 2566 1 65 2577 1 65 2578 1 65 2579 1 65 2580 1 65 2581 1 65 2582 1 65 2583 1 65 2584 1 65 2585 1 65 2586 1 65 2613 1 65 2614 1 65 2615 1 65 2616 1 65 2617 1 65 2618 1 65 2619 1 65 2620 1 65 2621 1 65 2622 1 65 2628 1 65 2629 1 65 2630 1 65 2631 1 65 2632 1 65 2641 1 65 2647 1 65 2648 1 65 2649 1 65 2650 1 65 2651 1 65 2697 1 65 2698 1 65 2699 1 65 2700 1 65 2701 1 65 2712 1 65 2713 1 65 2714 1 65 2715 1 65 2716 1 65 2717 1 65 2718 1 65 2719 1 65 2720 1 65 2721 1 65 2767 1 65 2768 1 65 2769 1 65 2770 1 65 2771 1 65 2782 1 65 2783 1 65 2784 1 65 2785 1 65 2786 1 65 2787 1 65 2788 1 65 2789 1 65 2790 1 65 2791 1 65 2837 1 65 2838 1 65 2839 1 65 2840 1 65 2841 1 65 2842 1 65 2843 1 65 2844 1 65 2845 1 65 2846 1 65 2857 1 65 2858 1 65 2859 1 65 2860 1 65 2861 1 65 2862 1 65 2863 1 65 2864 1 65 2865 1 65 2866 1 65 2893 1 65 2894 1 65 2895 1 65 2896 1 65 2897 1 65 2908 1 65 2909 1 65 2910 1 65 2911 1 65 2912 1 65 2913 1 65 2914 1 65 2915 1 65 2916 1 65 2917 1 65 2963 1 65 2964 1 65 2965 1 65 2966 1 65 2967 1 65 2968 1 65 2969 1 65 2970 1 65 2971 1 65 2972 1 65 2983 1 65 2984 1 65 2985 1 65 2986 1 65 2987 1 65 2988 1 65 2989 1 65 2990 1 65 2991 1 65 2992 1 65 3019 1 65 3020 1 65 3021 1 65 3022 1 65 3023 1 65 3024 1 65 3025 1 65 3026 1 65 3027 1 65 3028 1 65 3039 1 65 3040 1 65 3041 1 65 3042 1 65 3043 1 65 3044 1 65 3045 1 65 3046 1 65 3047 1 65 3048 1 65 3075 1 65 3076 1 65 3077 1 65 3078 1 65 3079 1 65 3080 1 65 3081 1 65 3082 1 65 3083 1 65 3084 1 65 3090 1 65 3091 1 65 3092 1 65 3093 1 65 3094 1 65 3103 1 65 3104 1 65 3105 1 65 3106 1 65 3107 1 65 3118 1 65 3119 1 65 3120 1 65 3121 1 65 3122 1 65 3123 1 65 3124 1 65 3125 1 65 3126 1 65 3127 1 65 3173 1 65 3174 1 65 3175 1 65 3176 1 65 3177 1 65 3178 1 65 3179 1 65 3180 1 65 3181 1 65 3182 1 65 3193 1 65 3194 1 65 3195 1 65 3196 1 65 3197 1 65 3198 1 65 3199 1 65 3200 1 65 3201 1 65 3202 1 65 3229 1 65 3230 1 65 3231 1 65 3232 1 65 3233 1 65 3234 1 65 3235 1 65 3236 1 65 3237 1 65 3238 1 65 3249 1 65 3250 1 65 3251 1 65 3252 1 65 3253 1 65 3254 1 65 3255 1 65 3256 1 65 3257 1 65 3258 1 65 3285 1 65 3286 1 65 3287 1 65 3288 1 65 3289 1 65 3290 1 65 3291 1 65 3292 1 65 3293 1 65 3294 1 65 3300 1 65 3301 1 65 3302 1 65 3303 1 65 3304 1 65 3313 1 65 3314 1 65 3315 1 65 3316 1 65 3317 1 65 3318 1 65 3319 1 65 3320 1 65 3321 1 65 3322 1 65 3333 1 65 3334 1 65 3335 1 65 3336 1 65 3337 1 65 3338 1 65 3339 1 65 3340 1 65 3341 1 65 3342 1 65 3369 1 65 3370 1 65 3371 1 65 3372 1 65 3373 1 65 3374 1 65 3375 1 65 3376 1 65 3377 1 65 3378 1 65 3384 1 65 3385 1 65 3386 1 65 3387 1 65 3388 1 65 3397 1 65 3398 1 65 3399 1 65 3400 1 65 3401 1 65 3402 1 65 3403 1 65 3404 1 65 3405 1 65 3406 1 65 3412 1 65 3413 1 65 3414 1 65 3415 1 65 3416 1 65 3425 1 65 3426 1 65 3427 1 65 3428 1 65 3429 1 65 3431 1 66 11 1 66 39 1 66 66 1 66 71 1 66 76 1 66 77 1 66 78 1 66 79 1 66 123 1 66 150 1 66 155 1 66 160 1 66 161 1 66 162 1 66 163 1 66 206 1 66 211 1 66 216 1 66 217 1 66 218 1 66 219 1 66 261 1 66 266 1 66 267 1 66 268 1 66 269 1 66 276 1 66 277 1 66 278 1 66 279 1 66 286 1 66 287 1 66 288 1 66 289 1 66 290 1 66 291 1 66 333 1 66 360 1 66 365 1 66 370 1 66 371 1 66 372 1 66 373 1 66 416 1 66 421 1 66 426 1 66 427 1 66 428 1 66 429 1 66 471 1 66 476 1 66 477 1 66 478 1 66 479 1 66 486 1 66 487 1 66 488 1 66 489 1 66 496 1 66 497 1 66 498 1 66 499 1 66 500 1 66 501 1 66 542 1 66 547 1 66 552 1 66 553 1 66 554 1 66 555 1 66 597 1 66 602 1 66 603 1 66 604 1 66 605 1 66 612 1 66 613 1 66 614 1 66 615 1 66 622 1 66 623 1 66 624 1 66 625 1 66 626 1 66 627 1 66 667 1 66 672 1 66 673 1 66 674 1 66 675 1 66 682 1 66 683 1 66 684 1 66 685 1 66 692 1 66 693 1 66 694 1 66 695 1 66 696 1 66 697 1 66 737 1 66 738 1 66 739 1 66 740 1 66 747 1 66 748 1 66 749 1 66 750 1 66 751 1 66 752 1 66 757 1 66 758 1 66 759 1 66 760 1 66 761 1 66 762 1 66 767 1 66 768 1 66 769 1 66 770 1 66 795 1 66 822 1 66 827 1 66 832 1 66 833 1 66 834 1 66 835 1 66 878 1 66 883 1 66 888 1 66 889 1 66 890 1 66 891 1 66 933 1 66 938 1 66 939 1 66 940 1 66 941 1 66 948 1 66 949 1 66 950 1 66 951 1 66 958 1 66 959 1 66 960 1 66 961 1 66 962 1 66 963 1 66 1004 1 66 1009 1 66 1014 1 66 1015 1 66 1016 1 66 1017 1 66 1059 1 66 1064 1 66 1065 1 66 1066 1 66 1067 1 66 1074 1 66 1075 1 66 1076 1 66 1077 1 66 1084 1 66 1085 1 66 1086 1 66 1087 1 66 1088 1 66 1089 1 66 1129 1 66 1134 1 66 1135 1 66 1136 1 66 1137 1 66 1144 1 66 1145 1 66 1146 1 66 1147 1 66 1154 1 66 1155 1 66 1156 1 66 1157 1 66 1158 1 66 1159 1 66 1199 1 66 1200 1 66 1201 1 66 1202 1 66 1209 1 66 1210 1 66 1211 1 66 1212 1 66 1213 1 66 1214 1 66 1219 1 66 1220 1 66 1221 1 66 1222 1 66 1223 1 66 1224 1 66 1229 1 66 1230 1 66 1231 1 66 1232 1 66 1256 1 66 1261 1 66 1266 1 66 1267 1 66 1268 1 66 1269 1 66 1311 1 66 1316 1 66 1317 1 66 1318 1 66 1319 1 66 1326 1 66 1327 1 66 1328 1 66 1329 1 66 1336 1 66 1337 1 66 1338 1 66 1339 1 66 1340 1 66 1341 1 66 1381 1 66 1386 1 66 1387 1 66 1388 1 66 1389 1 66 1396 1 66 1397 1 66 1398 1 66 1399 1 66 1406 1 66 1407 1 66 1408 1 66 1409 1 66 1410 1 66 1411 1 66 1451 1 66 1452 1 66 1453 1 66 1454 1 66 1461 1 66 1462 1 66 1463 1 66 1464 1 66 1465 1 66 1466 1 66 1471 1 66 1472 1 66 1473 1 66 1474 1 66 1475 1 66 1476 1 66 1481 1 66 1482 1 66 1483 1 66 1484 1 66 1507 1 66 1512 1 66 1513 1 66 1514 1 66 1515 1 66 1522 1 66 1523 1 66 1524 1 66 1525 1 66 1532 1 66 1533 1 66 1534 1 66 1535 1 66 1536 1 66 1537 1 66 1577 1 66 1578 1 66 1579 1 66 1580 1 66 1587 1 66 1588 1 66 1589 1 66 1590 1 66 1591 1 66 1592 1 66 1597 1 66 1598 1 66 1599 1 66 1600 1 66 1601 1 66 1602 1 66 1607 1 66 1608 1 66 1609 1 66 1610 1 66 1633 1 66 1634 1 66 1635 1 66 1636 1 66 1643 1 66 1644 1 66 1645 1 66 1646 1 66 1647 1 66 1648 1 66 1653 1 66 1654 1 66 1655 1 66 1656 1 66 1657 1 66 1658 1 66 1663 1 66 1664 1 66 1665 1 66 1666 1 66 1689 1 66 1690 1 66 1691 1 66 1692 1 66 1693 1 66 1694 1 66 1699 1 66 1700 1 66 1701 1 66 1702 1 66 1704 1 66 1705 1 66 1706 1 66 1707 1 66 1709 1 66 1719 1 66 1746 1 66 1751 1 66 1756 1 66 1757 1 66 1758 1 66 1759 1 66 1802 1 66 1807 1 66 1812 1 66 1813 1 66 1814 1 66 1815 1 66 1857 1 66 1862 1 66 1863 1 66 1864 1 66 1865 1 66 1872 1 66 1873 1 66 1874 1 66 1875 1 66 1882 1 66 1883 1 66 1884 1 66 1885 1 66 1886 1 66 1887 1 66 1928 1 66 1933 1 66 1938 1 66 1939 1 66 1940 1 66 1941 1 66 1983 1 66 1988 1 66 1989 1 66 1990 1 66 1991 1 66 1998 1 66 1999 1 66 2000 1 66 2001 1 66 2008 1 66 2009 1 66 2010 1 66 2011 1 66 2012 1 66 2013 1 66 2053 1 66 2058 1 66 2059 1 66 2060 1 66 2061 1 66 2068 1 66 2069 1 66 2070 1 66 2071 1 66 2078 1 66 2079 1 66 2080 1 66 2081 1 66 2082 1 66 2083 1 66 2123 1 66 2124 1 66 2125 1 66 2126 1 66 2133 1 66 2134 1 66 2135 1 66 2136 1 66 2137 1 66 2138 1 66 2143 1 66 2144 1 66 2145 1 66 2146 1 66 2147 1 66 2148 1 66 2153 1 66 2154 1 66 2155 1 66 2156 1 66 2180 1 66 2185 1 66 2190 1 66 2191 1 66 2192 1 66 2193 1 66 2235 1 66 2240 1 66 2241 1 66 2242 1 66 2243 1 66 2250 1 66 2251 1 66 2252 1 66 2253 1 66 2260 1 66 2261 1 66 2262 1 66 2263 1 66 2264 1 66 2265 1 66 2305 1 66 2310 1 66 2311 1 66 2312 1 66 2313 1 66 2320 1 66 2321 1 66 2322 1 66 2323 1 66 2330 1 66 2331 1 66 2332 1 66 2333 1 66 2334 1 66 2335 1 66 2375 1 66 2376 1 66 2377 1 66 2378 1 66 2385 1 66 2386 1 66 2387 1 66 2388 1 66 2389 1 66 2390 1 66 2395 1 66 2396 1 66 2397 1 66 2398 1 66 2399 1 66 2400 1 66 2405 1 66 2406 1 66 2407 1 66 2408 1 66 2431 1 66 2436 1 66 2437 1 66 2438 1 66 2439 1 66 2446 1 66 2447 1 66 2448 1 66 2449 1 66 2456 1 66 2457 1 66 2458 1 66 2459 1 66 2460 1 66 2461 1 66 2501 1 66 2502 1 66 2503 1 66 2504 1 66 2511 1 66 2512 1 66 2513 1 66 2514 1 66 2515 1 66 2516 1 66 2521 1 66 2522 1 66 2523 1 66 2524 1 66 2525 1 66 2526 1 66 2531 1 66 2532 1 66 2533 1 66 2534 1 66 2557 1 66 2558 1 66 2559 1 66 2560 1 66 2567 1 66 2568 1 66 2569 1 66 2570 1 66 2571 1 66 2572 1 66 2577 1 66 2578 1 66 2579 1 66 2580 1 66 2581 1 66 2582 1 66 2587 1 66 2588 1 66 2589 1 66 2590 1 66 2613 1 66 2614 1 66 2615 1 66 2616 1 66 2617 1 66 2618 1 66 2623 1 66 2624 1 66 2625 1 66 2626 1 66 2628 1 66 2629 1 66 2630 1 66 2631 1 66 2633 1 66 2642 1 66 2647 1 66 2652 1 66 2653 1 66 2654 1 66 2655 1 66 2697 1 66 2702 1 66 2703 1 66 2704 1 66 2705 1 66 2712 1 66 2713 1 66 2714 1 66 2715 1 66 2722 1 66 2723 1 66 2724 1 66 2725 1 66 2726 1 66 2727 1 66 2767 1 66 2772 1 66 2773 1 66 2774 1 66 2775 1 66 2782 1 66 2783 1 66 2784 1 66 2785 1 66 2792 1 66 2793 1 66 2794 1 66 2795 1 66 2796 1 66 2797 1 66 2837 1 66 2838 1 66 2839 1 66 2840 1 66 2847 1 66 2848 1 66 2849 1 66 2850 1 66 2851 1 66 2852 1 66 2857 1 66 2858 1 66 2859 1 66 2860 1 66 2861 1 66 2862 1 66 2867 1 66 2868 1 66 2869 1 66 2870 1 66 2893 1 66 2898 1 66 2899 1 66 2900 1 66 2901 1 66 2908 1 66 2909 1 66 2910 1 66 2911 1 66 2918 1 66 2919 1 66 2920 1 66 2921 1 66 2922 1 66 2923 1 66 2963 1 66 2964 1 66 2965 1 66 2966 1 66 2973 1 66 2974 1 66 2975 1 66 2976 1 66 2977 1 66 2978 1 66 2983 1 66 2984 1 66 2985 1 66 2986 1 66 2987 1 66 2988 1 66 2993 1 66 2994 1 66 2995 1 66 2996 1 66 3019 1 66 3020 1 66 3021 1 66 3022 1 66 3029 1 66 3030 1 66 3031 1 66 3032 1 66 3033 1 66 3034 1 66 3039 1 66 3040 1 66 3041 1 66 3042 1 66 3043 1 66 3044 1 66 3049 1 66 3050 1 66 3051 1 66 3052 1 66 3075 1 66 3076 1 66 3077 1 66 3078 1 66 3079 1 66 3080 1 66 3085 1 66 3086 1 66 3087 1 66 3088 1 66 3090 1 66 3091 1 66 3092 1 66 3093 1 66 3095 1 66 3103 1 66 3108 1 66 3109 1 66 3110 1 66 3111 1 66 3118 1 66 3119 1 66 3120 1 66 3121 1 66 3128 1 66 3129 1 66 3130 1 66 3131 1 66 3132 1 66 3133 1 66 3173 1 66 3174 1 66 3175 1 66 3176 1 66 3183 1 66 3184 1 66 3185 1 66 3186 1 66 3187 1 66 3188 1 66 3193 1 66 3194 1 66 3195 1 66 3196 1 66 3197 1 66 3198 1 66 3203 1 66 3204 1 66 3205 1 66 3206 1 66 3229 1 66 3230 1 66 3231 1 66 3232 1 66 3239 1 66 3240 1 66 3241 1 66 3242 1 66 3243 1 66 3244 1 66 3249 1 66 3250 1 66 3251 1 66 3252 1 66 3253 1 66 3254 1 66 3259 1 66 3260 1 66 3261 1 66 3262 1 66 3285 1 66 3286 1 66 3287 1 66 3288 1 66 3289 1 66 3290 1 66 3295 1 66 3296 1 66 3297 1 66 3298 1 66 3300 1 66 3301 1 66 3302 1 66 3303 1 66 3305 1 66 3313 1 66 3314 1 66 3315 1 66 3316 1 66 3323 1 66 3324 1 66 3325 1 66 3326 1 66 3327 1 66 3328 1 66 3333 1 66 3334 1 66 3335 1 66 3336 1 66 3337 1 66 3338 1 66 3343 1 66 3344 1 66 3345 1 66 3346 1 66 3369 1 66 3370 1 66 3371 1 66 3372 1 66 3373 1 66 3374 1 66 3379 1 66 3380 1 66 3381 1 66 3382 1 66 3384 1 66 3385 1 66 3386 1 66 3387 1 66 3389 1 66 3397 1 66 3398 1 66 3399 1 66 3400 1 66 3401 1 66 3402 1 66 3407 1 66 3408 1 66 3409 1 66 3410 1 66 3412 1 66 3413 1 66 3414 1 66 3415 1 66 3417 1 66 3425 1 66 3426 1 66 3427 1 66 3428 1 66 3430 1 66 3431 1 67 12 1 67 40 1 67 67 1 67 72 1 67 76 1 67 80 1 67 81 1 67 82 1 67 124 1 67 151 1 67 156 1 67 160 1 67 164 1 67 165 1 67 166 1 67 207 1 67 212 1 67 216 1 67 220 1 67 221 1 67 222 1 67 262 1 67 266 1 67 270 1 67 271 1 67 272 1 67 276 1 67 280 1 67 281 1 67 282 1 67 286 1 67 287 1 67 288 1 67 292 1 67 293 1 67 294 1 67 334 1 67 361 1 67 366 1 67 370 1 67 374 1 67 375 1 67 376 1 67 417 1 67 422 1 67 426 1 67 430 1 67 431 1 67 432 1 67 472 1 67 476 1 67 480 1 67 481 1 67 482 1 67 486 1 67 490 1 67 491 1 67 492 1 67 496 1 67 497 1 67 498 1 67 502 1 67 503 1 67 504 1 67 543 1 67 548 1 67 552 1 67 556 1 67 557 1 67 558 1 67 598 1 67 602 1 67 606 1 67 607 1 67 608 1 67 612 1 67 616 1 67 617 1 67 618 1 67 622 1 67 623 1 67 624 1 67 628 1 67 629 1 67 630 1 67 668 1 67 672 1 67 676 1 67 677 1 67 678 1 67 682 1 67 686 1 67 687 1 67 688 1 67 692 1 67 693 1 67 694 1 67 698 1 67 699 1 67 700 1 67 737 1 67 741 1 67 742 1 67 743 1 67 747 1 67 748 1 67 749 1 67 753 1 67 754 1 67 755 1 67 757 1 67 758 1 67 759 1 67 763 1 67 764 1 67 765 1 67 767 1 67 768 1 67 769 1 67 771 1 67 796 1 67 823 1 67 828 1 67 832 1 67 836 1 67 837 1 67 838 1 67 879 1 67 884 1 67 888 1 67 892 1 67 893 1 67 894 1 67 934 1 67 938 1 67 942 1 67 943 1 67 944 1 67 948 1 67 952 1 67 953 1 67 954 1 67 958 1 67 959 1 67 960 1 67 964 1 67 965 1 67 966 1 67 1005 1 67 1010 1 67 1014 1 67 1018 1 67 1019 1 67 1020 1 67 1060 1 67 1064 1 67 1068 1 67 1069 1 67 1070 1 67 1074 1 67 1078 1 67 1079 1 67 1080 1 67 1084 1 67 1085 1 67 1086 1 67 1090 1 67 1091 1 67 1092 1 67 1130 1 67 1134 1 67 1138 1 67 1139 1 67 1140 1 67 1144 1 67 1148 1 67 1149 1 67 1150 1 67 1154 1 67 1155 1 67 1156 1 67 1160 1 67 1161 1 67 1162 1 67 1199 1 67 1203 1 67 1204 1 67 1205 1 67 1209 1 67 1210 1 67 1211 1 67 1215 1 67 1216 1 67 1217 1 67 1219 1 67 1220 1 67 1221 1 67 1225 1 67 1226 1 67 1227 1 67 1229 1 67 1230 1 67 1231 1 67 1233 1 67 1257 1 67 1262 1 67 1266 1 67 1270 1 67 1271 1 67 1272 1 67 1312 1 67 1316 1 67 1320 1 67 1321 1 67 1322 1 67 1326 1 67 1330 1 67 1331 1 67 1332 1 67 1336 1 67 1337 1 67 1338 1 67 1342 1 67 1343 1 67 1344 1 67 1382 1 67 1386 1 67 1390 1 67 1391 1 67 1392 1 67 1396 1 67 1400 1 67 1401 1 67 1402 1 67 1406 1 67 1407 1 67 1408 1 67 1412 1 67 1413 1 67 1414 1 67 1451 1 67 1455 1 67 1456 1 67 1457 1 67 1461 1 67 1462 1 67 1463 1 67 1467 1 67 1468 1 67 1469 1 67 1471 1 67 1472 1 67 1473 1 67 1477 1 67 1478 1 67 1479 1 67 1481 1 67 1482 1 67 1483 1 67 1485 1 67 1508 1 67 1512 1 67 1516 1 67 1517 1 67 1518 1 67 1522 1 67 1526 1 67 1527 1 67 1528 1 67 1532 1 67 1533 1 67 1534 1 67 1538 1 67 1539 1 67 1540 1 67 1577 1 67 1581 1 67 1582 1 67 1583 1 67 1587 1 67 1588 1 67 1589 1 67 1593 1 67 1594 1 67 1595 1 67 1597 1 67 1598 1 67 1599 1 67 1603 1 67 1604 1 67 1605 1 67 1607 1 67 1608 1 67 1609 1 67 1611 1 67 1633 1 67 1637 1 67 1638 1 67 1639 1 67 1643 1 67 1644 1 67 1645 1 67 1649 1 67 1650 1 67 1651 1 67 1653 1 67 1654 1 67 1655 1 67 1659 1 67 1660 1 67 1661 1 67 1663 1 67 1664 1 67 1665 1 67 1667 1 67 1689 1 67 1690 1 67 1691 1 67 1695 1 67 1696 1 67 1697 1 67 1699 1 67 1700 1 67 1701 1 67 1703 1 67 1704 1 67 1705 1 67 1706 1 67 1708 1 67 1709 1 67 1720 1 67 1747 1 67 1752 1 67 1756 1 67 1760 1 67 1761 1 67 1762 1 67 1803 1 67 1808 1 67 1812 1 67 1816 1 67 1817 1 67 1818 1 67 1858 1 67 1862 1 67 1866 1 67 1867 1 67 1868 1 67 1872 1 67 1876 1 67 1877 1 67 1878 1 67 1882 1 67 1883 1 67 1884 1 67 1888 1 67 1889 1 67 1890 1 67 1929 1 67 1934 1 67 1938 1 67 1942 1 67 1943 1 67 1944 1 67 1984 1 67 1988 1 67 1992 1 67 1993 1 67 1994 1 67 1998 1 67 2002 1 67 2003 1 67 2004 1 67 2008 1 67 2009 1 67 2010 1 67 2014 1 67 2015 1 67 2016 1 67 2054 1 67 2058 1 67 2062 1 67 2063 1 67 2064 1 67 2068 1 67 2072 1 67 2073 1 67 2074 1 67 2078 1 67 2079 1 67 2080 1 67 2084 1 67 2085 1 67 2086 1 67 2123 1 67 2127 1 67 2128 1 67 2129 1 67 2133 1 67 2134 1 67 2135 1 67 2139 1 67 2140 1 67 2141 1 67 2143 1 67 2144 1 67 2145 1 67 2149 1 67 2150 1 67 2151 1 67 2153 1 67 2154 1 67 2155 1 67 2157 1 67 2181 1 67 2186 1 67 2190 1 67 2194 1 67 2195 1 67 2196 1 67 2236 1 67 2240 1 67 2244 1 67 2245 1 67 2246 1 67 2250 1 67 2254 1 67 2255 1 67 2256 1 67 2260 1 67 2261 1 67 2262 1 67 2266 1 67 2267 1 67 2268 1 67 2306 1 67 2310 1 67 2314 1 67 2315 1 67 2316 1 67 2320 1 67 2324 1 67 2325 1 67 2326 1 67 2330 1 67 2331 1 67 2332 1 67 2336 1 67 2337 1 67 2338 1 67 2375 1 67 2379 1 67 2380 1 67 2381 1 67 2385 1 67 2386 1 67 2387 1 67 2391 1 67 2392 1 67 2393 1 67 2395 1 67 2396 1 67 2397 1 67 2401 1 67 2402 1 67 2403 1 67 2405 1 67 2406 1 67 2407 1 67 2409 1 67 2432 1 67 2436 1 67 2440 1 67 2441 1 67 2442 1 67 2446 1 67 2450 1 67 2451 1 67 2452 1 67 2456 1 67 2457 1 67 2458 1 67 2462 1 67 2463 1 67 2464 1 67 2501 1 67 2505 1 67 2506 1 67 2507 1 67 2511 1 67 2512 1 67 2513 1 67 2517 1 67 2518 1 67 2519 1 67 2521 1 67 2522 1 67 2523 1 67 2527 1 67 2528 1 67 2529 1 67 2531 1 67 2532 1 67 2533 1 67 2535 1 67 2557 1 67 2561 1 67 2562 1 67 2563 1 67 2567 1 67 2568 1 67 2569 1 67 2573 1 67 2574 1 67 2575 1 67 2577 1 67 2578 1 67 2579 1 67 2583 1 67 2584 1 67 2585 1 67 2587 1 67 2588 1 67 2589 1 67 2591 1 67 2613 1 67 2614 1 67 2615 1 67 2619 1 67 2620 1 67 2621 1 67 2623 1 67 2624 1 67 2625 1 67 2627 1 67 2628 1 67 2629 1 67 2630 1 67 2632 1 67 2633 1 67 2643 1 67 2648 1 67 2652 1 67 2656 1 67 2657 1 67 2658 1 67 2698 1 67 2702 1 67 2706 1 67 2707 1 67 2708 1 67 2712 1 67 2716 1 67 2717 1 67 2718 1 67 2722 1 67 2723 1 67 2724 1 67 2728 1 67 2729 1 67 2730 1 67 2768 1 67 2772 1 67 2776 1 67 2777 1 67 2778 1 67 2782 1 67 2786 1 67 2787 1 67 2788 1 67 2792 1 67 2793 1 67 2794 1 67 2798 1 67 2799 1 67 2800 1 67 2837 1 67 2841 1 67 2842 1 67 2843 1 67 2847 1 67 2848 1 67 2849 1 67 2853 1 67 2854 1 67 2855 1 67 2857 1 67 2858 1 67 2859 1 67 2863 1 67 2864 1 67 2865 1 67 2867 1 67 2868 1 67 2869 1 67 2871 1 67 2894 1 67 2898 1 67 2902 1 67 2903 1 67 2904 1 67 2908 1 67 2912 1 67 2913 1 67 2914 1 67 2918 1 67 2919 1 67 2920 1 67 2924 1 67 2925 1 67 2926 1 67 2963 1 67 2967 1 67 2968 1 67 2969 1 67 2973 1 67 2974 1 67 2975 1 67 2979 1 67 2980 1 67 2981 1 67 2983 1 67 2984 1 67 2985 1 67 2989 1 67 2990 1 67 2991 1 67 2993 1 67 2994 1 67 2995 1 67 2997 1 67 3019 1 67 3023 1 67 3024 1 67 3025 1 67 3029 1 67 3030 1 67 3031 1 67 3035 1 67 3036 1 67 3037 1 67 3039 1 67 3040 1 67 3041 1 67 3045 1 67 3046 1 67 3047 1 67 3049 1 67 3050 1 67 3051 1 67 3053 1 67 3075 1 67 3076 1 67 3077 1 67 3081 1 67 3082 1 67 3083 1 67 3085 1 67 3086 1 67 3087 1 67 3089 1 67 3090 1 67 3091 1 67 3092 1 67 3094 1 67 3095 1 67 3104 1 67 3108 1 67 3112 1 67 3113 1 67 3114 1 67 3118 1 67 3122 1 67 3123 1 67 3124 1 67 3128 1 67 3129 1 67 3130 1 67 3134 1 67 3135 1 67 3136 1 67 3173 1 67 3177 1 67 3178 1 67 3179 1 67 3183 1 67 3184 1 67 3185 1 67 3189 1 67 3190 1 67 3191 1 67 3193 1 67 3194 1 67 3195 1 67 3199 1 67 3200 1 67 3201 1 67 3203 1 67 3204 1 67 3205 1 67 3207 1 67 3229 1 67 3233 1 67 3234 1 67 3235 1 67 3239 1 67 3240 1 67 3241 1 67 3245 1 67 3246 1 67 3247 1 67 3249 1 67 3250 1 67 3251 1 67 3255 1 67 3256 1 67 3257 1 67 3259 1 67 3260 1 67 3261 1 67 3263 1 67 3285 1 67 3286 1 67 3287 1 67 3291 1 67 3292 1 67 3293 1 67 3295 1 67 3296 1 67 3297 1 67 3299 1 67 3300 1 67 3301 1 67 3302 1 67 3304 1 67 3305 1 67 3313 1 67 3317 1 67 3318 1 67 3319 1 67 3323 1 67 3324 1 67 3325 1 67 3329 1 67 3330 1 67 3331 1 67 3333 1 67 3334 1 67 3335 1 67 3339 1 67 3340 1 67 3341 1 67 3343 1 67 3344 1 67 3345 1 67 3347 1 67 3369 1 67 3370 1 67 3371 1 67 3375 1 67 3376 1 67 3377 1 67 3379 1 67 3380 1 67 3381 1 67 3383 1 67 3384 1 67 3385 1 67 3386 1 67 3388 1 67 3389 1 67 3397 1 67 3398 1 67 3399 1 67 3403 1 67 3404 1 67 3405 1 67 3407 1 67 3408 1 67 3409 1 67 3411 1 67 3412 1 67 3413 1 67 3414 1 67 3416 1 67 3417 1 67 3425 1 67 3426 1 67 3427 1 67 3429 1 67 3430 1 67 3431 1 68 13 1 68 41 1 68 68 1 68 73 1 68 77 1 68 80 1 68 83 1 68 84 1 68 125 1 68 152 1 68 157 1 68 161 1 68 164 1 68 167 1 68 168 1 68 208 1 68 213 1 68 217 1 68 220 1 68 223 1 68 224 1 68 263 1 68 267 1 68 270 1 68 273 1 68 274 1 68 277 1 68 280 1 68 283 1 68 284 1 68 286 1 68 289 1 68 290 1 68 292 1 68 293 1 68 295 1 68 335 1 68 362 1 68 367 1 68 371 1 68 374 1 68 377 1 68 378 1 68 418 1 68 423 1 68 427 1 68 430 1 68 433 1 68 434 1 68 473 1 68 477 1 68 480 1 68 483 1 68 484 1 68 487 1 68 490 1 68 493 1 68 494 1 68 496 1 68 499 1 68 500 1 68 502 1 68 503 1 68 505 1 68 544 1 68 549 1 68 553 1 68 556 1 68 559 1 68 560 1 68 599 1 68 603 1 68 606 1 68 609 1 68 610 1 68 613 1 68 616 1 68 619 1 68 620 1 68 622 1 68 625 1 68 626 1 68 628 1 68 629 1 68 631 1 68 669 1 68 673 1 68 676 1 68 679 1 68 680 1 68 683 1 68 686 1 68 689 1 68 690 1 68 692 1 68 695 1 68 696 1 68 698 1 68 699 1 68 701 1 68 738 1 68 741 1 68 744 1 68 745 1 68 747 1 68 750 1 68 751 1 68 753 1 68 754 1 68 756 1 68 757 1 68 760 1 68 761 1 68 763 1 68 764 1 68 766 1 68 767 1 68 768 1 68 770 1 68 771 1 68 797 1 68 824 1 68 829 1 68 833 1 68 836 1 68 839 1 68 840 1 68 880 1 68 885 1 68 889 1 68 892 1 68 895 1 68 896 1 68 935 1 68 939 1 68 942 1 68 945 1 68 946 1 68 949 1 68 952 1 68 955 1 68 956 1 68 958 1 68 961 1 68 962 1 68 964 1 68 965 1 68 967 1 68 1006 1 68 1011 1 68 1015 1 68 1018 1 68 1021 1 68 1022 1 68 1061 1 68 1065 1 68 1068 1 68 1071 1 68 1072 1 68 1075 1 68 1078 1 68 1081 1 68 1082 1 68 1084 1 68 1087 1 68 1088 1 68 1090 1 68 1091 1 68 1093 1 68 1131 1 68 1135 1 68 1138 1 68 1141 1 68 1142 1 68 1145 1 68 1148 1 68 1151 1 68 1152 1 68 1154 1 68 1157 1 68 1158 1 68 1160 1 68 1161 1 68 1163 1 68 1200 1 68 1203 1 68 1206 1 68 1207 1 68 1209 1 68 1212 1 68 1213 1 68 1215 1 68 1216 1 68 1218 1 68 1219 1 68 1222 1 68 1223 1 68 1225 1 68 1226 1 68 1228 1 68 1229 1 68 1230 1 68 1232 1 68 1233 1 68 1258 1 68 1263 1 68 1267 1 68 1270 1 68 1273 1 68 1274 1 68 1313 1 68 1317 1 68 1320 1 68 1323 1 68 1324 1 68 1327 1 68 1330 1 68 1333 1 68 1334 1 68 1336 1 68 1339 1 68 1340 1 68 1342 1 68 1343 1 68 1345 1 68 1383 1 68 1387 1 68 1390 1 68 1393 1 68 1394 1 68 1397 1 68 1400 1 68 1403 1 68 1404 1 68 1406 1 68 1409 1 68 1410 1 68 1412 1 68 1413 1 68 1415 1 68 1452 1 68 1455 1 68 1458 1 68 1459 1 68 1461 1 68 1464 1 68 1465 1 68 1467 1 68 1468 1 68 1470 1 68 1471 1 68 1474 1 68 1475 1 68 1477 1 68 1478 1 68 1480 1 68 1481 1 68 1482 1 68 1484 1 68 1485 1 68 1509 1 68 1513 1 68 1516 1 68 1519 1 68 1520 1 68 1523 1 68 1526 1 68 1529 1 68 1530 1 68 1532 1 68 1535 1 68 1536 1 68 1538 1 68 1539 1 68 1541 1 68 1578 1 68 1581 1 68 1584 1 68 1585 1 68 1587 1 68 1590 1 68 1591 1 68 1593 1 68 1594 1 68 1596 1 68 1597 1 68 1600 1 68 1601 1 68 1603 1 68 1604 1 68 1606 1 68 1607 1 68 1608 1 68 1610 1 68 1611 1 68 1634 1 68 1637 1 68 1640 1 68 1641 1 68 1643 1 68 1646 1 68 1647 1 68 1649 1 68 1650 1 68 1652 1 68 1653 1 68 1656 1 68 1657 1 68 1659 1 68 1660 1 68 1662 1 68 1663 1 68 1664 1 68 1666 1 68 1667 1 68 1689 1 68 1692 1 68 1693 1 68 1695 1 68 1696 1 68 1698 1 68 1699 1 68 1700 1 68 1702 1 68 1703 1 68 1704 1 68 1705 1 68 1707 1 68 1708 1 68 1709 1 68 1721 1 68 1748 1 68 1753 1 68 1757 1 68 1760 1 68 1763 1 68 1764 1 68 1804 1 68 1809 1 68 1813 1 68 1816 1 68 1819 1 68 1820 1 68 1859 1 68 1863 1 68 1866 1 68 1869 1 68 1870 1 68 1873 1 68 1876 1 68 1879 1 68 1880 1 68 1882 1 68 1885 1 68 1886 1 68 1888 1 68 1889 1 68 1891 1 68 1930 1 68 1935 1 68 1939 1 68 1942 1 68 1945 1 68 1946 1 68 1985 1 68 1989 1 68 1992 1 68 1995 1 68 1996 1 68 1999 1 68 2002 1 68 2005 1 68 2006 1 68 2008 1 68 2011 1 68 2012 1 68 2014 1 68 2015 1 68 2017 1 68 2055 1 68 2059 1 68 2062 1 68 2065 1 68 2066 1 68 2069 1 68 2072 1 68 2075 1 68 2076 1 68 2078 1 68 2081 1 68 2082 1 68 2084 1 68 2085 1 68 2087 1 68 2124 1 68 2127 1 68 2130 1 68 2131 1 68 2133 1 68 2136 1 68 2137 1 68 2139 1 68 2140 1 68 2142 1 68 2143 1 68 2146 1 68 2147 1 68 2149 1 68 2150 1 68 2152 1 68 2153 1 68 2154 1 68 2156 1 68 2157 1 68 2182 1 68 2187 1 68 2191 1 68 2194 1 68 2197 1 68 2198 1 68 2237 1 68 2241 1 68 2244 1 68 2247 1 68 2248 1 68 2251 1 68 2254 1 68 2257 1 68 2258 1 68 2260 1 68 2263 1 68 2264 1 68 2266 1 68 2267 1 68 2269 1 68 2307 1 68 2311 1 68 2314 1 68 2317 1 68 2318 1 68 2321 1 68 2324 1 68 2327 1 68 2328 1 68 2330 1 68 2333 1 68 2334 1 68 2336 1 68 2337 1 68 2339 1 68 2376 1 68 2379 1 68 2382 1 68 2383 1 68 2385 1 68 2388 1 68 2389 1 68 2391 1 68 2392 1 68 2394 1 68 2395 1 68 2398 1 68 2399 1 68 2401 1 68 2402 1 68 2404 1 68 2405 1 68 2406 1 68 2408 1 68 2409 1 68 2433 1 68 2437 1 68 2440 1 68 2443 1 68 2444 1 68 2447 1 68 2450 1 68 2453 1 68 2454 1 68 2456 1 68 2459 1 68 2460 1 68 2462 1 68 2463 1 68 2465 1 68 2502 1 68 2505 1 68 2508 1 68 2509 1 68 2511 1 68 2514 1 68 2515 1 68 2517 1 68 2518 1 68 2520 1 68 2521 1 68 2524 1 68 2525 1 68 2527 1 68 2528 1 68 2530 1 68 2531 1 68 2532 1 68 2534 1 68 2535 1 68 2558 1 68 2561 1 68 2564 1 68 2565 1 68 2567 1 68 2570 1 68 2571 1 68 2573 1 68 2574 1 68 2576 1 68 2577 1 68 2580 1 68 2581 1 68 2583 1 68 2584 1 68 2586 1 68 2587 1 68 2588 1 68 2590 1 68 2591 1 68 2613 1 68 2616 1 68 2617 1 68 2619 1 68 2620 1 68 2622 1 68 2623 1 68 2624 1 68 2626 1 68 2627 1 68 2628 1 68 2629 1 68 2631 1 68 2632 1 68 2633 1 68 2644 1 68 2649 1 68 2653 1 68 2656 1 68 2659 1 68 2660 1 68 2699 1 68 2703 1 68 2706 1 68 2709 1 68 2710 1 68 2713 1 68 2716 1 68 2719 1 68 2720 1 68 2722 1 68 2725 1 68 2726 1 68 2728 1 68 2729 1 68 2731 1 68 2769 1 68 2773 1 68 2776 1 68 2779 1 68 2780 1 68 2783 1 68 2786 1 68 2789 1 68 2790 1 68 2792 1 68 2795 1 68 2796 1 68 2798 1 68 2799 1 68 2801 1 68 2838 1 68 2841 1 68 2844 1 68 2845 1 68 2847 1 68 2850 1 68 2851 1 68 2853 1 68 2854 1 68 2856 1 68 2857 1 68 2860 1 68 2861 1 68 2863 1 68 2864 1 68 2866 1 68 2867 1 68 2868 1 68 2870 1 68 2871 1 68 2895 1 68 2899 1 68 2902 1 68 2905 1 68 2906 1 68 2909 1 68 2912 1 68 2915 1 68 2916 1 68 2918 1 68 2921 1 68 2922 1 68 2924 1 68 2925 1 68 2927 1 68 2964 1 68 2967 1 68 2970 1 68 2971 1 68 2973 1 68 2976 1 68 2977 1 68 2979 1 68 2980 1 68 2982 1 68 2983 1 68 2986 1 68 2987 1 68 2989 1 68 2990 1 68 2992 1 68 2993 1 68 2994 1 68 2996 1 68 2997 1 68 3020 1 68 3023 1 68 3026 1 68 3027 1 68 3029 1 68 3032 1 68 3033 1 68 3035 1 68 3036 1 68 3038 1 68 3039 1 68 3042 1 68 3043 1 68 3045 1 68 3046 1 68 3048 1 68 3049 1 68 3050 1 68 3052 1 68 3053 1 68 3075 1 68 3078 1 68 3079 1 68 3081 1 68 3082 1 68 3084 1 68 3085 1 68 3086 1 68 3088 1 68 3089 1 68 3090 1 68 3091 1 68 3093 1 68 3094 1 68 3095 1 68 3105 1 68 3109 1 68 3112 1 68 3115 1 68 3116 1 68 3119 1 68 3122 1 68 3125 1 68 3126 1 68 3128 1 68 3131 1 68 3132 1 68 3134 1 68 3135 1 68 3137 1 68 3174 1 68 3177 1 68 3180 1 68 3181 1 68 3183 1 68 3186 1 68 3187 1 68 3189 1 68 3190 1 68 3192 1 68 3193 1 68 3196 1 68 3197 1 68 3199 1 68 3200 1 68 3202 1 68 3203 1 68 3204 1 68 3206 1 68 3207 1 68 3230 1 68 3233 1 68 3236 1 68 3237 1 68 3239 1 68 3242 1 68 3243 1 68 3245 1 68 3246 1 68 3248 1 68 3249 1 68 3252 1 68 3253 1 68 3255 1 68 3256 1 68 3258 1 68 3259 1 68 3260 1 68 3262 1 68 3263 1 68 3285 1 68 3288 1 68 3289 1 68 3291 1 68 3292 1 68 3294 1 68 3295 1 68 3296 1 68 3298 1 68 3299 1 68 3300 1 68 3301 1 68 3303 1 68 3304 1 68 3305 1 68 3314 1 68 3317 1 68 3320 1 68 3321 1 68 3323 1 68 3326 1 68 3327 1 68 3329 1 68 3330 1 68 3332 1 68 3333 1 68 3336 1 68 3337 1 68 3339 1 68 3340 1 68 3342 1 68 3343 1 68 3344 1 68 3346 1 68 3347 1 68 3369 1 68 3372 1 68 3373 1 68 3375 1 68 3376 1 68 3378 1 68 3379 1 68 3380 1 68 3382 1 68 3383 1 68 3384 1 68 3385 1 68 3387 1 68 3388 1 68 3389 1 68 3397 1 68 3400 1 68 3401 1 68 3403 1 68 3404 1 68 3406 1 68 3407 1 68 3408 1 68 3410 1 68 3411 1 68 3412 1 68 3413 1 68 3415 1 68 3416 1 68 3417 1 68 3425 1 68 3426 1 68 3428 1 68 3429 1 68 3430 1 68 3431 1 69 14 1 69 42 1 69 69 1 69 74 1 69 78 1 69 81 1 69 83 1 69 85 1 69 126 1 69 153 1 69 158 1 69 162 1 69 165 1 69 167 1 69 169 1 69 209 1 69 214 1 69 218 1 69 221 1 69 223 1 69 225 1 69 264 1 69 268 1 69 271 1 69 273 1 69 275 1 69 278 1 69 281 1 69 283 1 69 285 1 69 287 1 69 289 1 69 291 1 69 292 1 69 294 1 69 295 1 69 336 1 69 363 1 69 368 1 69 372 1 69 375 1 69 377 1 69 379 1 69 419 1 69 424 1 69 428 1 69 431 1 69 433 1 69 435 1 69 474 1 69 478 1 69 481 1 69 483 1 69 485 1 69 488 1 69 491 1 69 493 1 69 495 1 69 497 1 69 499 1 69 501 1 69 502 1 69 504 1 69 505 1 69 545 1 69 550 1 69 554 1 69 557 1 69 559 1 69 561 1 69 600 1 69 604 1 69 607 1 69 609 1 69 611 1 69 614 1 69 617 1 69 619 1 69 621 1 69 623 1 69 625 1 69 627 1 69 628 1 69 630 1 69 631 1 69 670 1 69 674 1 69 677 1 69 679 1 69 681 1 69 684 1 69 687 1 69 689 1 69 691 1 69 693 1 69 695 1 69 697 1 69 698 1 69 700 1 69 701 1 69 739 1 69 742 1 69 744 1 69 746 1 69 748 1 69 750 1 69 752 1 69 753 1 69 755 1 69 756 1 69 758 1 69 760 1 69 762 1 69 763 1 69 765 1 69 766 1 69 767 1 69 769 1 69 770 1 69 771 1 69 798 1 69 825 1 69 830 1 69 834 1 69 837 1 69 839 1 69 841 1 69 881 1 69 886 1 69 890 1 69 893 1 69 895 1 69 897 1 69 936 1 69 940 1 69 943 1 69 945 1 69 947 1 69 950 1 69 953 1 69 955 1 69 957 1 69 959 1 69 961 1 69 963 1 69 964 1 69 966 1 69 967 1 69 1007 1 69 1012 1 69 1016 1 69 1019 1 69 1021 1 69 1023 1 69 1062 1 69 1066 1 69 1069 1 69 1071 1 69 1073 1 69 1076 1 69 1079 1 69 1081 1 69 1083 1 69 1085 1 69 1087 1 69 1089 1 69 1090 1 69 1092 1 69 1093 1 69 1132 1 69 1136 1 69 1139 1 69 1141 1 69 1143 1 69 1146 1 69 1149 1 69 1151 1 69 1153 1 69 1155 1 69 1157 1 69 1159 1 69 1160 1 69 1162 1 69 1163 1 69 1201 1 69 1204 1 69 1206 1 69 1208 1 69 1210 1 69 1212 1 69 1214 1 69 1215 1 69 1217 1 69 1218 1 69 1220 1 69 1222 1 69 1224 1 69 1225 1 69 1227 1 69 1228 1 69 1229 1 69 1231 1 69 1232 1 69 1233 1 69 1259 1 69 1264 1 69 1268 1 69 1271 1 69 1273 1 69 1275 1 69 1314 1 69 1318 1 69 1321 1 69 1323 1 69 1325 1 69 1328 1 69 1331 1 69 1333 1 69 1335 1 69 1337 1 69 1339 1 69 1341 1 69 1342 1 69 1344 1 69 1345 1 69 1384 1 69 1388 1 69 1391 1 69 1393 1 69 1395 1 69 1398 1 69 1401 1 69 1403 1 69 1405 1 69 1407 1 69 1409 1 69 1411 1 69 1412 1 69 1414 1 69 1415 1 69 1453 1 69 1456 1 69 1458 1 69 1460 1 69 1462 1 69 1464 1 69 1466 1 69 1467 1 69 1469 1 69 1470 1 69 1472 1 69 1474 1 69 1476 1 69 1477 1 69 1479 1 69 1480 1 69 1481 1 69 1483 1 69 1484 1 69 1485 1 69 1510 1 69 1514 1 69 1517 1 69 1519 1 69 1521 1 69 1524 1 69 1527 1 69 1529 1 69 1531 1 69 1533 1 69 1535 1 69 1537 1 69 1538 1 69 1540 1 69 1541 1 69 1579 1 69 1582 1 69 1584 1 69 1586 1 69 1588 1 69 1590 1 69 1592 1 69 1593 1 69 1595 1 69 1596 1 69 1598 1 69 1600 1 69 1602 1 69 1603 1 69 1605 1 69 1606 1 69 1607 1 69 1609 1 69 1610 1 69 1611 1 69 1635 1 69 1638 1 69 1640 1 69 1642 1 69 1644 1 69 1646 1 69 1648 1 69 1649 1 69 1651 1 69 1652 1 69 1654 1 69 1656 1 69 1658 1 69 1659 1 69 1661 1 69 1662 1 69 1663 1 69 1665 1 69 1666 1 69 1667 1 69 1690 1 69 1692 1 69 1694 1 69 1695 1 69 1697 1 69 1698 1 69 1699 1 69 1701 1 69 1702 1 69 1703 1 69 1704 1 69 1706 1 69 1707 1 69 1708 1 69 1709 1 69 1722 1 69 1749 1 69 1754 1 69 1758 1 69 1761 1 69 1763 1 69 1765 1 69 1805 1 69 1810 1 69 1814 1 69 1817 1 69 1819 1 69 1821 1 69 1860 1 69 1864 1 69 1867 1 69 1869 1 69 1871 1 69 1874 1 69 1877 1 69 1879 1 69 1881 1 69 1883 1 69 1885 1 69 1887 1 69 1888 1 69 1890 1 69 1891 1 69 1931 1 69 1936 1 69 1940 1 69 1943 1 69 1945 1 69 1947 1 69 1986 1 69 1990 1 69 1993 1 69 1995 1 69 1997 1 69 2000 1 69 2003 1 69 2005 1 69 2007 1 69 2009 1 69 2011 1 69 2013 1 69 2014 1 69 2016 1 69 2017 1 69 2056 1 69 2060 1 69 2063 1 69 2065 1 69 2067 1 69 2070 1 69 2073 1 69 2075 1 69 2077 1 69 2079 1 69 2081 1 69 2083 1 69 2084 1 69 2086 1 69 2087 1 69 2125 1 69 2128 1 69 2130 1 69 2132 1 69 2134 1 69 2136 1 69 2138 1 69 2139 1 69 2141 1 69 2142 1 69 2144 1 69 2146 1 69 2148 1 69 2149 1 69 2151 1 69 2152 1 69 2153 1 69 2155 1 69 2156 1 69 2157 1 69 2183 1 69 2188 1 69 2192 1 69 2195 1 69 2197 1 69 2199 1 69 2238 1 69 2242 1 69 2245 1 69 2247 1 69 2249 1 69 2252 1 69 2255 1 69 2257 1 69 2259 1 69 2261 1 69 2263 1 69 2265 1 69 2266 1 69 2268 1 69 2269 1 69 2308 1 69 2312 1 69 2315 1 69 2317 1 69 2319 1 69 2322 1 69 2325 1 69 2327 1 69 2329 1 69 2331 1 69 2333 1 69 2335 1 69 2336 1 69 2338 1 69 2339 1 69 2377 1 69 2380 1 69 2382 1 69 2384 1 69 2386 1 69 2388 1 69 2390 1 69 2391 1 69 2393 1 69 2394 1 69 2396 1 69 2398 1 69 2400 1 69 2401 1 69 2403 1 69 2404 1 69 2405 1 69 2407 1 69 2408 1 69 2409 1 69 2434 1 69 2438 1 69 2441 1 69 2443 1 69 2445 1 69 2448 1 69 2451 1 69 2453 1 69 2455 1 69 2457 1 69 2459 1 69 2461 1 69 2462 1 69 2464 1 69 2465 1 69 2503 1 69 2506 1 69 2508 1 69 2510 1 69 2512 1 69 2514 1 69 2516 1 69 2517 1 69 2519 1 69 2520 1 69 2522 1 69 2524 1 69 2526 1 69 2527 1 69 2529 1 69 2530 1 69 2531 1 69 2533 1 69 2534 1 69 2535 1 69 2559 1 69 2562 1 69 2564 1 69 2566 1 69 2568 1 69 2570 1 69 2572 1 69 2573 1 69 2575 1 69 2576 1 69 2578 1 69 2580 1 69 2582 1 69 2583 1 69 2585 1 69 2586 1 69 2587 1 69 2589 1 69 2590 1 69 2591 1 69 2614 1 69 2616 1 69 2618 1 69 2619 1 69 2621 1 69 2622 1 69 2623 1 69 2625 1 69 2626 1 69 2627 1 69 2628 1 69 2630 1 69 2631 1 69 2632 1 69 2633 1 69 2645 1 69 2650 1 69 2654 1 69 2657 1 69 2659 1 69 2661 1 69 2700 1 69 2704 1 69 2707 1 69 2709 1 69 2711 1 69 2714 1 69 2717 1 69 2719 1 69 2721 1 69 2723 1 69 2725 1 69 2727 1 69 2728 1 69 2730 1 69 2731 1 69 2770 1 69 2774 1 69 2777 1 69 2779 1 69 2781 1 69 2784 1 69 2787 1 69 2789 1 69 2791 1 69 2793 1 69 2795 1 69 2797 1 69 2798 1 69 2800 1 69 2801 1 69 2839 1 69 2842 1 69 2844 1 69 2846 1 69 2848 1 69 2850 1 69 2852 1 69 2853 1 69 2855 1 69 2856 1 69 2858 1 69 2860 1 69 2862 1 69 2863 1 69 2865 1 69 2866 1 69 2867 1 69 2869 1 69 2870 1 69 2871 1 69 2896 1 69 2900 1 69 2903 1 69 2905 1 69 2907 1 69 2910 1 69 2913 1 69 2915 1 69 2917 1 69 2919 1 69 2921 1 69 2923 1 69 2924 1 69 2926 1 69 2927 1 69 2965 1 69 2968 1 69 2970 1 69 2972 1 69 2974 1 69 2976 1 69 2978 1 69 2979 1 69 2981 1 69 2982 1 69 2984 1 69 2986 1 69 2988 1 69 2989 1 69 2991 1 69 2992 1 69 2993 1 69 2995 1 69 2996 1 69 2997 1 69 3021 1 69 3024 1 69 3026 1 69 3028 1 69 3030 1 69 3032 1 69 3034 1 69 3035 1 69 3037 1 69 3038 1 69 3040 1 69 3042 1 69 3044 1 69 3045 1 69 3047 1 69 3048 1 69 3049 1 69 3051 1 69 3052 1 69 3053 1 69 3076 1 69 3078 1 69 3080 1 69 3081 1 69 3083 1 69 3084 1 69 3085 1 69 3087 1 69 3088 1 69 3089 1 69 3090 1 69 3092 1 69 3093 1 69 3094 1 69 3095 1 69 3106 1 69 3110 1 69 3113 1 69 3115 1 69 3117 1 69 3120 1 69 3123 1 69 3125 1 69 3127 1 69 3129 1 69 3131 1 69 3133 1 69 3134 1 69 3136 1 69 3137 1 69 3175 1 69 3178 1 69 3180 1 69 3182 1 69 3184 1 69 3186 1 69 3188 1 69 3189 1 69 3191 1 69 3192 1 69 3194 1 69 3196 1 69 3198 1 69 3199 1 69 3201 1 69 3202 1 69 3203 1 69 3205 1 69 3206 1 69 3207 1 69 3231 1 69 3234 1 69 3236 1 69 3238 1 69 3240 1 69 3242 1 69 3244 1 69 3245 1 69 3247 1 69 3248 1 69 3250 1 69 3252 1 69 3254 1 69 3255 1 69 3257 1 69 3258 1 69 3259 1 69 3261 1 69 3262 1 69 3263 1 69 3286 1 69 3288 1 69 3290 1 69 3291 1 69 3293 1 69 3294 1 69 3295 1 69 3297 1 69 3298 1 69 3299 1 69 3300 1 69 3302 1 69 3303 1 69 3304 1 69 3305 1 69 3315 1 69 3318 1 69 3320 1 69 3322 1 69 3324 1 69 3326 1 69 3328 1 69 3329 1 69 3331 1 69 3332 1 69 3334 1 69 3336 1 69 3338 1 69 3339 1 69 3341 1 69 3342 1 69 3343 1 69 3345 1 69 3346 1 69 3347 1 69 3370 1 69 3372 1 69 3374 1 69 3375 1 69 3377 1 69 3378 1 69 3379 1 69 3381 1 69 3382 1 69 3383 1 69 3384 1 69 3386 1 69 3387 1 69 3388 1 69 3389 1 69 3398 1 69 3400 1 69 3402 1 69 3403 1 69 3405 1 69 3406 1 69 3407 1 69 3409 1 69 3410 1 69 3411 1 69 3412 1 69 3414 1 69 3415 1 69 3416 1 69 3417 1 69 3425 1 69 3427 1 69 3428 1 69 3429 1 69 3430 1 69 3431 1 70 15 1 70 43 1 70 70 1 70 75 1 70 79 1 70 82 1 70 84 1 70 85 1 70 127 1 70 154 1 70 159 1 70 163 1 70 166 1 70 168 1 70 169 1 70 210 1 70 215 1 70 219 1 70 222 1 70 224 1 70 225 1 70 265 1 70 269 1 70 272 1 70 274 1 70 275 1 70 279 1 70 282 1 70 284 1 70 285 1 70 288 1 70 290 1 70 291 1 70 293 1 70 294 1 70 295 1 70 337 1 70 364 1 70 369 1 70 373 1 70 376 1 70 378 1 70 379 1 70 420 1 70 425 1 70 429 1 70 432 1 70 434 1 70 435 1 70 475 1 70 479 1 70 482 1 70 484 1 70 485 1 70 489 1 70 492 1 70 494 1 70 495 1 70 498 1 70 500 1 70 501 1 70 503 1 70 504 1 70 505 1 70 546 1 70 551 1 70 555 1 70 558 1 70 560 1 70 561 1 70 601 1 70 605 1 70 608 1 70 610 1 70 611 1 70 615 1 70 618 1 70 620 1 70 621 1 70 624 1 70 626 1 70 627 1 70 629 1 70 630 1 70 631 1 70 671 1 70 675 1 70 678 1 70 680 1 70 681 1 70 685 1 70 688 1 70 690 1 70 691 1 70 694 1 70 696 1 70 697 1 70 699 1 70 700 1 70 701 1 70 740 1 70 743 1 70 745 1 70 746 1 70 749 1 70 751 1 70 752 1 70 754 1 70 755 1 70 756 1 70 759 1 70 761 1 70 762 1 70 764 1 70 765 1 70 766 1 70 768 1 70 769 1 70 770 1 70 771 1 70 799 1 70 826 1 70 831 1 70 835 1 70 838 1 70 840 1 70 841 1 70 882 1 70 887 1 70 891 1 70 894 1 70 896 1 70 897 1 70 937 1 70 941 1 70 944 1 70 946 1 70 947 1 70 951 1 70 954 1 70 956 1 70 957 1 70 960 1 70 962 1 70 963 1 70 965 1 70 966 1 70 967 1 70 1008 1 70 1013 1 70 1017 1 70 1020 1 70 1022 1 70 1023 1 70 1063 1 70 1067 1 70 1070 1 70 1072 1 70 1073 1 70 1077 1 70 1080 1 70 1082 1 70 1083 1 70 1086 1 70 1088 1 70 1089 1 70 1091 1 70 1092 1 70 1093 1 70 1133 1 70 1137 1 70 1140 1 70 1142 1 70 1143 1 70 1147 1 70 1150 1 70 1152 1 70 1153 1 70 1156 1 70 1158 1 70 1159 1 70 1161 1 70 1162 1 70 1163 1 70 1202 1 70 1205 1 70 1207 1 70 1208 1 70 1211 1 70 1213 1 70 1214 1 70 1216 1 70 1217 1 70 1218 1 70 1221 1 70 1223 1 70 1224 1 70 1226 1 70 1227 1 70 1228 1 70 1230 1 70 1231 1 70 1232 1 70 1233 1 70 1260 1 70 1265 1 70 1269 1 70 1272 1 70 1274 1 70 1275 1 70 1315 1 70 1319 1 70 1322 1 70 1324 1 70 1325 1 70 1329 1 70 1332 1 70 1334 1 70 1335 1 70 1338 1 70 1340 1 70 1341 1 70 1343 1 70 1344 1 70 1345 1 70 1385 1 70 1389 1 70 1392 1 70 1394 1 70 1395 1 70 1399 1 70 1402 1 70 1404 1 70 1405 1 70 1408 1 70 1410 1 70 1411 1 70 1413 1 70 1414 1 70 1415 1 70 1454 1 70 1457 1 70 1459 1 70 1460 1 70 1463 1 70 1465 1 70 1466 1 70 1468 1 70 1469 1 70 1470 1 70 1473 1 70 1475 1 70 1476 1 70 1478 1 70 1479 1 70 1480 1 70 1482 1 70 1483 1 70 1484 1 70 1485 1 70 1511 1 70 1515 1 70 1518 1 70 1520 1 70 1521 1 70 1525 1 70 1528 1 70 1530 1 70 1531 1 70 1534 1 70 1536 1 70 1537 1 70 1539 1 70 1540 1 70 1541 1 70 1580 1 70 1583 1 70 1585 1 70 1586 1 70 1589 1 70 1591 1 70 1592 1 70 1594 1 70 1595 1 70 1596 1 70 1599 1 70 1601 1 70 1602 1 70 1604 1 70 1605 1 70 1606 1 70 1608 1 70 1609 1 70 1610 1 70 1611 1 70 1636 1 70 1639 1 70 1641 1 70 1642 1 70 1645 1 70 1647 1 70 1648 1 70 1650 1 70 1651 1 70 1652 1 70 1655 1 70 1657 1 70 1658 1 70 1660 1 70 1661 1 70 1662 1 70 1664 1 70 1665 1 70 1666 1 70 1667 1 70 1691 1 70 1693 1 70 1694 1 70 1696 1 70 1697 1 70 1698 1 70 1700 1 70 1701 1 70 1702 1 70 1703 1 70 1705 1 70 1706 1 70 1707 1 70 1708 1 70 1709 1 70 1723 1 70 1750 1 70 1755 1 70 1759 1 70 1762 1 70 1764 1 70 1765 1 70 1806 1 70 1811 1 70 1815 1 70 1818 1 70 1820 1 70 1821 1 70 1861 1 70 1865 1 70 1868 1 70 1870 1 70 1871 1 70 1875 1 70 1878 1 70 1880 1 70 1881 1 70 1884 1 70 1886 1 70 1887 1 70 1889 1 70 1890 1 70 1891 1 70 1932 1 70 1937 1 70 1941 1 70 1944 1 70 1946 1 70 1947 1 70 1987 1 70 1991 1 70 1994 1 70 1996 1 70 1997 1 70 2001 1 70 2004 1 70 2006 1 70 2007 1 70 2010 1 70 2012 1 70 2013 1 70 2015 1 70 2016 1 70 2017 1 70 2057 1 70 2061 1 70 2064 1 70 2066 1 70 2067 1 70 2071 1 70 2074 1 70 2076 1 70 2077 1 70 2080 1 70 2082 1 70 2083 1 70 2085 1 70 2086 1 70 2087 1 70 2126 1 70 2129 1 70 2131 1 70 2132 1 70 2135 1 70 2137 1 70 2138 1 70 2140 1 70 2141 1 70 2142 1 70 2145 1 70 2147 1 70 2148 1 70 2150 1 70 2151 1 70 2152 1 70 2154 1 70 2155 1 70 2156 1 70 2157 1 70 2184 1 70 2189 1 70 2193 1 70 2196 1 70 2198 1 70 2199 1 70 2239 1 70 2243 1 70 2246 1 70 2248 1 70 2249 1 70 2253 1 70 2256 1 70 2258 1 70 2259 1 70 2262 1 70 2264 1 70 2265 1 70 2267 1 70 2268 1 70 2269 1 70 2309 1 70 2313 1 70 2316 1 70 2318 1 70 2319 1 70 2323 1 70 2326 1 70 2328 1 70 2329 1 70 2332 1 70 2334 1 70 2335 1 70 2337 1 70 2338 1 70 2339 1 70 2378 1 70 2381 1 70 2383 1 70 2384 1 70 2387 1 70 2389 1 70 2390 1 70 2392 1 70 2393 1 70 2394 1 70 2397 1 70 2399 1 70 2400 1 70 2402 1 70 2403 1 70 2404 1 70 2406 1 70 2407 1 70 2408 1 70 2409 1 70 2435 1 70 2439 1 70 2442 1 70 2444 1 70 2445 1 70 2449 1 70 2452 1 70 2454 1 70 2455 1 70 2458 1 70 2460 1 70 2461 1 70 2463 1 70 2464 1 70 2465 1 70 2504 1 70 2507 1 70 2509 1 70 2510 1 70 2513 1 70 2515 1 70 2516 1 70 2518 1 70 2519 1 70 2520 1 70 2523 1 70 2525 1 70 2526 1 70 2528 1 70 2529 1 70 2530 1 70 2532 1 70 2533 1 70 2534 1 70 2535 1 70 2560 1 70 2563 1 70 2565 1 70 2566 1 70 2569 1 70 2571 1 70 2572 1 70 2574 1 70 2575 1 70 2576 1 70 2579 1 70 2581 1 70 2582 1 70 2584 1 70 2585 1 70 2586 1 70 2588 1 70 2589 1 70 2590 1 70 2591 1 70 2615 1 70 2617 1 70 2618 1 70 2620 1 70 2621 1 70 2622 1 70 2624 1 70 2625 1 70 2626 1 70 2627 1 70 2629 1 70 2630 1 70 2631 1 70 2632 1 70 2633 1 70 2646 1 70 2651 1 70 2655 1 70 2658 1 70 2660 1 70 2661 1 70 2701 1 70 2705 1 70 2708 1 70 2710 1 70 2711 1 70 2715 1 70 2718 1 70 2720 1 70 2721 1 70 2724 1 70 2726 1 70 2727 1 70 2729 1 70 2730 1 70 2731 1 70 2771 1 70 2775 1 70 2778 1 70 2780 1 70 2781 1 70 2785 1 70 2788 1 70 2790 1 70 2791 1 70 2794 1 70 2796 1 70 2797 1 70 2799 1 70 2800 1 70 2801 1 70 2840 1 70 2843 1 70 2845 1 70 2846 1 70 2849 1 70 2851 1 70 2852 1 70 2854 1 70 2855 1 70 2856 1 70 2859 1 70 2861 1 70 2862 1 70 2864 1 70 2865 1 70 2866 1 70 2868 1 70 2869 1 70 2870 1 70 2871 1 70 2897 1 70 2901 1 70 2904 1 70 2906 1 70 2907 1 70 2911 1 70 2914 1 70 2916 1 70 2917 1 70 2920 1 70 2922 1 70 2923 1 70 2925 1 70 2926 1 70 2927 1 70 2966 1 70 2969 1 70 2971 1 70 2972 1 70 2975 1 70 2977 1 70 2978 1 70 2980 1 70 2981 1 70 2982 1 70 2985 1 70 2987 1 70 2988 1 70 2990 1 70 2991 1 70 2992 1 70 2994 1 70 2995 1 70 2996 1 70 2997 1 70 3022 1 70 3025 1 70 3027 1 70 3028 1 70 3031 1 70 3033 1 70 3034 1 70 3036 1 70 3037 1 70 3038 1 70 3041 1 70 3043 1 70 3044 1 70 3046 1 70 3047 1 70 3048 1 70 3050 1 70 3051 1 70 3052 1 70 3053 1 70 3077 1 70 3079 1 70 3080 1 70 3082 1 70 3083 1 70 3084 1 70 3086 1 70 3087 1 70 3088 1 70 3089 1 70 3091 1 70 3092 1 70 3093 1 70 3094 1 70 3095 1 70 3107 1 70 3111 1 70 3114 1 70 3116 1 70 3117 1 70 3121 1 70 3124 1 70 3126 1 70 3127 1 70 3130 1 70 3132 1 70 3133 1 70 3135 1 70 3136 1 70 3137 1 70 3176 1 70 3179 1 70 3181 1 70 3182 1 70 3185 1 70 3187 1 70 3188 1 70 3190 1 70 3191 1 70 3192 1 70 3195 1 70 3197 1 70 3198 1 70 3200 1 70 3201 1 70 3202 1 70 3204 1 70 3205 1 70 3206 1 70 3207 1 70 3232 1 70 3235 1 70 3237 1 70 3238 1 70 3241 1 70 3243 1 70 3244 1 70 3246 1 70 3247 1 70 3248 1 70 3251 1 70 3253 1 70 3254 1 70 3256 1 70 3257 1 70 3258 1 70 3260 1 70 3261 1 70 3262 1 70 3263 1 70 3287 1 70 3289 1 70 3290 1 70 3292 1 70 3293 1 70 3294 1 70 3296 1 70 3297 1 70 3298 1 70 3299 1 70 3301 1 70 3302 1 70 3303 1 70 3304 1 70 3305 1 70 3316 1 70 3319 1 70 3321 1 70 3322 1 70 3325 1 70 3327 1 70 3328 1 70 3330 1 70 3331 1 70 3332 1 70 3335 1 70 3337 1 70 3338 1 70 3340 1 70 3341 1 70 3342 1 70 3344 1 70 3345 1 70 3346 1 70 3347 1 70 3371 1 70 3373 1 70 3374 1 70 3376 1 70 3377 1 70 3378 1 70 3380 1 70 3381 1 70 3382 1 70 3383 1 70 3385 1 70 3386 1 70 3387 1 70 3388 1 70 3389 1 70 3399 1 70 3401 1 70 3402 1 70 3404 1 70 3405 1 70 3406 1 70 3408 1 70 3409 1 70 3410 1 70 3411 1 70 3413 1 70 3414 1 70 3415 1 70 3416 1 70 3417 1 70 3426 1 70 3427 1 70 3428 1 70 3429 1 70 3430 1 70 3431 1 71 16 1 71 44 1 71 65 1 71 86 1 71 87 1 71 88 1 71 89 1 71 90 1 71 128 1 71 149 1 71 170 1 71 171 1 71 172 1 71 173 1 71 174 1 71 205 1 71 226 1 71 227 1 71 228 1 71 229 1 71 230 1 71 261 1 71 262 1 71 263 1 71 264 1 71 265 1 71 296 1 71 297 1 71 298 1 71 299 1 71 300 1 71 301 1 71 302 1 71 303 1 71 304 1 71 305 1 71 338 1 71 359 1 71 380 1 71 381 1 71 382 1 71 383 1 71 384 1 71 415 1 71 436 1 71 437 1 71 438 1 71 439 1 71 440 1 71 471 1 71 472 1 71 473 1 71 474 1 71 475 1 71 506 1 71 507 1 71 508 1 71 509 1 71 510 1 71 511 1 71 512 1 71 513 1 71 514 1 71 515 1 71 541 1 71 562 1 71 563 1 71 564 1 71 565 1 71 566 1 71 597 1 71 598 1 71 599 1 71 600 1 71 601 1 71 632 1 71 633 1 71 634 1 71 635 1 71 636 1 71 637 1 71 638 1 71 639 1 71 640 1 71 641 1 71 667 1 71 668 1 71 669 1 71 670 1 71 671 1 71 702 1 71 703 1 71 704 1 71 705 1 71 706 1 71 707 1 71 708 1 71 709 1 71 710 1 71 711 1 71 737 1 71 738 1 71 739 1 71 740 1 71 741 1 71 742 1 71 743 1 71 744 1 71 745 1 71 746 1 71 772 1 71 773 1 71 774 1 71 775 1 71 776 1 71 777 1 71 778 1 71 779 1 71 780 1 71 781 1 71 800 1 71 821 1 71 842 1 71 843 1 71 844 1 71 845 1 71 846 1 71 877 1 71 898 1 71 899 1 71 900 1 71 901 1 71 902 1 71 933 1 71 934 1 71 935 1 71 936 1 71 937 1 71 968 1 71 969 1 71 970 1 71 971 1 71 972 1 71 973 1 71 974 1 71 975 1 71 976 1 71 977 1 71 1003 1 71 1024 1 71 1025 1 71 1026 1 71 1027 1 71 1028 1 71 1059 1 71 1060 1 71 1061 1 71 1062 1 71 1063 1 71 1094 1 71 1095 1 71 1096 1 71 1097 1 71 1098 1 71 1099 1 71 1100 1 71 1101 1 71 1102 1 71 1103 1 71 1129 1 71 1130 1 71 1131 1 71 1132 1 71 1133 1 71 1164 1 71 1165 1 71 1166 1 71 1167 1 71 1168 1 71 1169 1 71 1170 1 71 1171 1 71 1172 1 71 1173 1 71 1199 1 71 1200 1 71 1201 1 71 1202 1 71 1203 1 71 1204 1 71 1205 1 71 1206 1 71 1207 1 71 1208 1 71 1234 1 71 1235 1 71 1236 1 71 1237 1 71 1238 1 71 1239 1 71 1240 1 71 1241 1 71 1242 1 71 1243 1 71 1255 1 71 1276 1 71 1277 1 71 1278 1 71 1279 1 71 1280 1 71 1311 1 71 1312 1 71 1313 1 71 1314 1 71 1315 1 71 1346 1 71 1347 1 71 1348 1 71 1349 1 71 1350 1 71 1351 1 71 1352 1 71 1353 1 71 1354 1 71 1355 1 71 1381 1 71 1382 1 71 1383 1 71 1384 1 71 1385 1 71 1416 1 71 1417 1 71 1418 1 71 1419 1 71 1420 1 71 1421 1 71 1422 1 71 1423 1 71 1424 1 71 1425 1 71 1451 1 71 1452 1 71 1453 1 71 1454 1 71 1455 1 71 1456 1 71 1457 1 71 1458 1 71 1459 1 71 1460 1 71 1486 1 71 1487 1 71 1488 1 71 1489 1 71 1490 1 71 1491 1 71 1492 1 71 1493 1 71 1494 1 71 1495 1 71 1507 1 71 1508 1 71 1509 1 71 1510 1 71 1511 1 71 1542 1 71 1543 1 71 1544 1 71 1545 1 71 1546 1 71 1547 1 71 1548 1 71 1549 1 71 1550 1 71 1551 1 71 1577 1 71 1578 1 71 1579 1 71 1580 1 71 1581 1 71 1582 1 71 1583 1 71 1584 1 71 1585 1 71 1586 1 71 1612 1 71 1613 1 71 1614 1 71 1615 1 71 1616 1 71 1617 1 71 1618 1 71 1619 1 71 1620 1 71 1621 1 71 1633 1 71 1634 1 71 1635 1 71 1636 1 71 1637 1 71 1638 1 71 1639 1 71 1640 1 71 1641 1 71 1642 1 71 1668 1 71 1669 1 71 1670 1 71 1671 1 71 1672 1 71 1673 1 71 1674 1 71 1675 1 71 1676 1 71 1677 1 71 1689 1 71 1690 1 71 1691 1 71 1692 1 71 1693 1 71 1694 1 71 1695 1 71 1696 1 71 1697 1 71 1698 1 71 1710 1 71 1711 1 71 1712 1 71 1713 1 71 1714 1 71 1724 1 71 1745 1 71 1766 1 71 1767 1 71 1768 1 71 1769 1 71 1770 1 71 1801 1 71 1822 1 71 1823 1 71 1824 1 71 1825 1 71 1826 1 71 1857 1 71 1858 1 71 1859 1 71 1860 1 71 1861 1 71 1892 1 71 1893 1 71 1894 1 71 1895 1 71 1896 1 71 1897 1 71 1898 1 71 1899 1 71 1900 1 71 1901 1 71 1927 1 71 1948 1 71 1949 1 71 1950 1 71 1951 1 71 1952 1 71 1983 1 71 1984 1 71 1985 1 71 1986 1 71 1987 1 71 2018 1 71 2019 1 71 2020 1 71 2021 1 71 2022 1 71 2023 1 71 2024 1 71 2025 1 71 2026 1 71 2027 1 71 2053 1 71 2054 1 71 2055 1 71 2056 1 71 2057 1 71 2088 1 71 2089 1 71 2090 1 71 2091 1 71 2092 1 71 2093 1 71 2094 1 71 2095 1 71 2096 1 71 2097 1 71 2123 1 71 2124 1 71 2125 1 71 2126 1 71 2127 1 71 2128 1 71 2129 1 71 2130 1 71 2131 1 71 2132 1 71 2158 1 71 2159 1 71 2160 1 71 2161 1 71 2162 1 71 2163 1 71 2164 1 71 2165 1 71 2166 1 71 2167 1 71 2179 1 71 2200 1 71 2201 1 71 2202 1 71 2203 1 71 2204 1 71 2235 1 71 2236 1 71 2237 1 71 2238 1 71 2239 1 71 2270 1 71 2271 1 71 2272 1 71 2273 1 71 2274 1 71 2275 1 71 2276 1 71 2277 1 71 2278 1 71 2279 1 71 2305 1 71 2306 1 71 2307 1 71 2308 1 71 2309 1 71 2340 1 71 2341 1 71 2342 1 71 2343 1 71 2344 1 71 2345 1 71 2346 1 71 2347 1 71 2348 1 71 2349 1 71 2375 1 71 2376 1 71 2377 1 71 2378 1 71 2379 1 71 2380 1 71 2381 1 71 2382 1 71 2383 1 71 2384 1 71 2410 1 71 2411 1 71 2412 1 71 2413 1 71 2414 1 71 2415 1 71 2416 1 71 2417 1 71 2418 1 71 2419 1 71 2431 1 71 2432 1 71 2433 1 71 2434 1 71 2435 1 71 2466 1 71 2467 1 71 2468 1 71 2469 1 71 2470 1 71 2471 1 71 2472 1 71 2473 1 71 2474 1 71 2475 1 71 2501 1 71 2502 1 71 2503 1 71 2504 1 71 2505 1 71 2506 1 71 2507 1 71 2508 1 71 2509 1 71 2510 1 71 2536 1 71 2537 1 71 2538 1 71 2539 1 71 2540 1 71 2541 1 71 2542 1 71 2543 1 71 2544 1 71 2545 1 71 2557 1 71 2558 1 71 2559 1 71 2560 1 71 2561 1 71 2562 1 71 2563 1 71 2564 1 71 2565 1 71 2566 1 71 2592 1 71 2593 1 71 2594 1 71 2595 1 71 2596 1 71 2597 1 71 2598 1 71 2599 1 71 2600 1 71 2601 1 71 2613 1 71 2614 1 71 2615 1 71 2616 1 71 2617 1 71 2618 1 71 2619 1 71 2620 1 71 2621 1 71 2622 1 71 2634 1 71 2635 1 71 2636 1 71 2637 1 71 2638 1 71 2641 1 71 2662 1 71 2663 1 71 2664 1 71 2665 1 71 2666 1 71 2697 1 71 2698 1 71 2699 1 71 2700 1 71 2701 1 71 2732 1 71 2733 1 71 2734 1 71 2735 1 71 2736 1 71 2737 1 71 2738 1 71 2739 1 71 2740 1 71 2741 1 71 2767 1 71 2768 1 71 2769 1 71 2770 1 71 2771 1 71 2802 1 71 2803 1 71 2804 1 71 2805 1 71 2806 1 71 2807 1 71 2808 1 71 2809 1 71 2810 1 71 2811 1 71 2837 1 71 2838 1 71 2839 1 71 2840 1 71 2841 1 71 2842 1 71 2843 1 71 2844 1 71 2845 1 71 2846 1 71 2872 1 71 2873 1 71 2874 1 71 2875 1 71 2876 1 71 2877 1 71 2878 1 71 2879 1 71 2880 1 71 2881 1 71 2893 1 71 2894 1 71 2895 1 71 2896 1 71 2897 1 71 2928 1 71 2929 1 71 2930 1 71 2931 1 71 2932 1 71 2933 1 71 2934 1 71 2935 1 71 2936 1 71 2937 1 71 2963 1 71 2964 1 71 2965 1 71 2966 1 71 2967 1 71 2968 1 71 2969 1 71 2970 1 71 2971 1 71 2972 1 71 2998 1 71 2999 1 71 3000 1 71 3001 1 71 3002 1 71 3003 1 71 3004 1 71 3005 1 71 3006 1 71 3007 1 71 3019 1 71 3020 1 71 3021 1 71 3022 1 71 3023 1 71 3024 1 71 3025 1 71 3026 1 71 3027 1 71 3028 1 71 3054 1 71 3055 1 71 3056 1 71 3057 1 71 3058 1 71 3059 1 71 3060 1 71 3061 1 71 3062 1 71 3063 1 71 3075 1 71 3076 1 71 3077 1 71 3078 1 71 3079 1 71 3080 1 71 3081 1 71 3082 1 71 3083 1 71 3084 1 71 3096 1 71 3097 1 71 3098 1 71 3099 1 71 3100 1 71 3103 1 71 3104 1 71 3105 1 71 3106 1 71 3107 1 71 3138 1 71 3139 1 71 3140 1 71 3141 1 71 3142 1 71 3143 1 71 3144 1 71 3145 1 71 3146 1 71 3147 1 71 3173 1 71 3174 1 71 3175 1 71 3176 1 71 3177 1 71 3178 1 71 3179 1 71 3180 1 71 3181 1 71 3182 1 71 3208 1 71 3209 1 71 3210 1 71 3211 1 71 3212 1 71 3213 1 71 3214 1 71 3215 1 71 3216 1 71 3217 1 71 3229 1 71 3230 1 71 3231 1 71 3232 1 71 3233 1 71 3234 1 71 3235 1 71 3236 1 71 3237 1 71 3238 1 71 3264 1 71 3265 1 71 3266 1 71 3267 1 71 3268 1 71 3269 1 71 3270 1 71 3271 1 71 3272 1 71 3273 1 71 3285 1 71 3286 1 71 3287 1 71 3288 1 71 3289 1 71 3290 1 71 3291 1 71 3292 1 71 3293 1 71 3294 1 71 3306 1 71 3307 1 71 3308 1 71 3309 1 71 3310 1 71 3313 1 71 3314 1 71 3315 1 71 3316 1 71 3317 1 71 3318 1 71 3319 1 71 3320 1 71 3321 1 71 3322 1 71 3348 1 71 3349 1 71 3350 1 71 3351 1 71 3352 1 71 3353 1 71 3354 1 71 3355 1 71 3356 1 71 3357 1 71 3369 1 71 3370 1 71 3371 1 71 3372 1 71 3373 1 71 3374 1 71 3375 1 71 3376 1 71 3377 1 71 3378 1 71 3390 1 71 3391 1 71 3392 1 71 3393 1 71 3394 1 71 3397 1 71 3398 1 71 3399 1 71 3400 1 71 3401 1 71 3402 1 71 3403 1 71 3404 1 71 3405 1 71 3406 1 71 3418 1 71 3419 1 71 3420 1 71 3421 1 71 3422 1 71 3425 1 71 3426 1 71 3427 1 71 3428 1 71 3429 1 71 3432 1 72 17 1 72 45 1 72 66 1 72 86 1 72 91 1 72 92 1 72 93 1 72 94 1 72 129 1 72 150 1 72 170 1 72 175 1 72 176 1 72 177 1 72 178 1 72 206 1 72 226 1 72 231 1 72 232 1 72 233 1 72 234 1 72 261 1 72 266 1 72 267 1 72 268 1 72 269 1 72 296 1 72 297 1 72 298 1 72 299 1 72 306 1 72 307 1 72 308 1 72 309 1 72 310 1 72 311 1 72 339 1 72 360 1 72 380 1 72 385 1 72 386 1 72 387 1 72 388 1 72 416 1 72 436 1 72 441 1 72 442 1 72 443 1 72 444 1 72 471 1 72 476 1 72 477 1 72 478 1 72 479 1 72 506 1 72 507 1 72 508 1 72 509 1 72 516 1 72 517 1 72 518 1 72 519 1 72 520 1 72 521 1 72 542 1 72 562 1 72 567 1 72 568 1 72 569 1 72 570 1 72 597 1 72 602 1 72 603 1 72 604 1 72 605 1 72 632 1 72 633 1 72 634 1 72 635 1 72 642 1 72 643 1 72 644 1 72 645 1 72 646 1 72 647 1 72 667 1 72 672 1 72 673 1 72 674 1 72 675 1 72 702 1 72 703 1 72 704 1 72 705 1 72 712 1 72 713 1 72 714 1 72 715 1 72 716 1 72 717 1 72 737 1 72 738 1 72 739 1 72 740 1 72 747 1 72 748 1 72 749 1 72 750 1 72 751 1 72 752 1 72 772 1 72 773 1 72 774 1 72 775 1 72 776 1 72 777 1 72 782 1 72 783 1 72 784 1 72 785 1 72 801 1 72 822 1 72 842 1 72 847 1 72 848 1 72 849 1 72 850 1 72 878 1 72 898 1 72 903 1 72 904 1 72 905 1 72 906 1 72 933 1 72 938 1 72 939 1 72 940 1 72 941 1 72 968 1 72 969 1 72 970 1 72 971 1 72 978 1 72 979 1 72 980 1 72 981 1 72 982 1 72 983 1 72 1004 1 72 1024 1 72 1029 1 72 1030 1 72 1031 1 72 1032 1 72 1059 1 72 1064 1 72 1065 1 72 1066 1 72 1067 1 72 1094 1 72 1095 1 72 1096 1 72 1097 1 72 1104 1 72 1105 1 72 1106 1 72 1107 1 72 1108 1 72 1109 1 72 1129 1 72 1134 1 72 1135 1 72 1136 1 72 1137 1 72 1164 1 72 1165 1 72 1166 1 72 1167 1 72 1174 1 72 1175 1 72 1176 1 72 1177 1 72 1178 1 72 1179 1 72 1199 1 72 1200 1 72 1201 1 72 1202 1 72 1209 1 72 1210 1 72 1211 1 72 1212 1 72 1213 1 72 1214 1 72 1234 1 72 1235 1 72 1236 1 72 1237 1 72 1238 1 72 1239 1 72 1244 1 72 1245 1 72 1246 1 72 1247 1 72 1256 1 72 1276 1 72 1281 1 72 1282 1 72 1283 1 72 1284 1 72 1311 1 72 1316 1 72 1317 1 72 1318 1 72 1319 1 72 1346 1 72 1347 1 72 1348 1 72 1349 1 72 1356 1 72 1357 1 72 1358 1 72 1359 1 72 1360 1 72 1361 1 72 1381 1 72 1386 1 72 1387 1 72 1388 1 72 1389 1 72 1416 1 72 1417 1 72 1418 1 72 1419 1 72 1426 1 72 1427 1 72 1428 1 72 1429 1 72 1430 1 72 1431 1 72 1451 1 72 1452 1 72 1453 1 72 1454 1 72 1461 1 72 1462 1 72 1463 1 72 1464 1 72 1465 1 72 1466 1 72 1486 1 72 1487 1 72 1488 1 72 1489 1 72 1490 1 72 1491 1 72 1496 1 72 1497 1 72 1498 1 72 1499 1 72 1507 1 72 1512 1 72 1513 1 72 1514 1 72 1515 1 72 1542 1 72 1543 1 72 1544 1 72 1545 1 72 1552 1 72 1553 1 72 1554 1 72 1555 1 72 1556 1 72 1557 1 72 1577 1 72 1578 1 72 1579 1 72 1580 1 72 1587 1 72 1588 1 72 1589 1 72 1590 1 72 1591 1 72 1592 1 72 1612 1 72 1613 1 72 1614 1 72 1615 1 72 1616 1 72 1617 1 72 1622 1 72 1623 1 72 1624 1 72 1625 1 72 1633 1 72 1634 1 72 1635 1 72 1636 1 72 1643 1 72 1644 1 72 1645 1 72 1646 1 72 1647 1 72 1648 1 72 1668 1 72 1669 1 72 1670 1 72 1671 1 72 1672 1 72 1673 1 72 1678 1 72 1679 1 72 1680 1 72 1681 1 72 1689 1 72 1690 1 72 1691 1 72 1692 1 72 1693 1 72 1694 1 72 1699 1 72 1700 1 72 1701 1 72 1702 1 72 1710 1 72 1711 1 72 1712 1 72 1713 1 72 1715 1 72 1725 1 72 1746 1 72 1766 1 72 1771 1 72 1772 1 72 1773 1 72 1774 1 72 1802 1 72 1822 1 72 1827 1 72 1828 1 72 1829 1 72 1830 1 72 1857 1 72 1862 1 72 1863 1 72 1864 1 72 1865 1 72 1892 1 72 1893 1 72 1894 1 72 1895 1 72 1902 1 72 1903 1 72 1904 1 72 1905 1 72 1906 1 72 1907 1 72 1928 1 72 1948 1 72 1953 1 72 1954 1 72 1955 1 72 1956 1 72 1983 1 72 1988 1 72 1989 1 72 1990 1 72 1991 1 72 2018 1 72 2019 1 72 2020 1 72 2021 1 72 2028 1 72 2029 1 72 2030 1 72 2031 1 72 2032 1 72 2033 1 72 2053 1 72 2058 1 72 2059 1 72 2060 1 72 2061 1 72 2088 1 72 2089 1 72 2090 1 72 2091 1 72 2098 1 72 2099 1 72 2100 1 72 2101 1 72 2102 1 72 2103 1 72 2123 1 72 2124 1 72 2125 1 72 2126 1 72 2133 1 72 2134 1 72 2135 1 72 2136 1 72 2137 1 72 2138 1 72 2158 1 72 2159 1 72 2160 1 72 2161 1 72 2162 1 72 2163 1 72 2168 1 72 2169 1 72 2170 1 72 2171 1 72 2180 1 72 2200 1 72 2205 1 72 2206 1 72 2207 1 72 2208 1 72 2235 1 72 2240 1 72 2241 1 72 2242 1 72 2243 1 72 2270 1 72 2271 1 72 2272 1 72 2273 1 72 2280 1 72 2281 1 72 2282 1 72 2283 1 72 2284 1 72 2285 1 72 2305 1 72 2310 1 72 2311 1 72 2312 1 72 2313 1 72 2340 1 72 2341 1 72 2342 1 72 2343 1 72 2350 1 72 2351 1 72 2352 1 72 2353 1 72 2354 1 72 2355 1 72 2375 1 72 2376 1 72 2377 1 72 2378 1 72 2385 1 72 2386 1 72 2387 1 72 2388 1 72 2389 1 72 2390 1 72 2410 1 72 2411 1 72 2412 1 72 2413 1 72 2414 1 72 2415 1 72 2420 1 72 2421 1 72 2422 1 72 2423 1 72 2431 1 72 2436 1 72 2437 1 72 2438 1 72 2439 1 72 2466 1 72 2467 1 72 2468 1 72 2469 1 72 2476 1 72 2477 1 72 2478 1 72 2479 1 72 2480 1 72 2481 1 72 2501 1 72 2502 1 72 2503 1 72 2504 1 72 2511 1 72 2512 1 72 2513 1 72 2514 1 72 2515 1 72 2516 1 72 2536 1 72 2537 1 72 2538 1 72 2539 1 72 2540 1 72 2541 1 72 2546 1 72 2547 1 72 2548 1 72 2549 1 72 2557 1 72 2558 1 72 2559 1 72 2560 1 72 2567 1 72 2568 1 72 2569 1 72 2570 1 72 2571 1 72 2572 1 72 2592 1 72 2593 1 72 2594 1 72 2595 1 72 2596 1 72 2597 1 72 2602 1 72 2603 1 72 2604 1 72 2605 1 72 2613 1 72 2614 1 72 2615 1 72 2616 1 72 2617 1 72 2618 1 72 2623 1 72 2624 1 72 2625 1 72 2626 1 72 2634 1 72 2635 1 72 2636 1 72 2637 1 72 2639 1 72 2642 1 72 2662 1 72 2667 1 72 2668 1 72 2669 1 72 2670 1 72 2697 1 72 2702 1 72 2703 1 72 2704 1 72 2705 1 72 2732 1 72 2733 1 72 2734 1 72 2735 1 72 2742 1 72 2743 1 72 2744 1 72 2745 1 72 2746 1 72 2747 1 72 2767 1 72 2772 1 72 2773 1 72 2774 1 72 2775 1 72 2802 1 72 2803 1 72 2804 1 72 2805 1 72 2812 1 72 2813 1 72 2814 1 72 2815 1 72 2816 1 72 2817 1 72 2837 1 72 2838 1 72 2839 1 72 2840 1 72 2847 1 72 2848 1 72 2849 1 72 2850 1 72 2851 1 72 2852 1 72 2872 1 72 2873 1 72 2874 1 72 2875 1 72 2876 1 72 2877 1 72 2882 1 72 2883 1 72 2884 1 72 2885 1 72 2893 1 72 2898 1 72 2899 1 72 2900 1 72 2901 1 72 2928 1 72 2929 1 72 2930 1 72 2931 1 72 2938 1 72 2939 1 72 2940 1 72 2941 1 72 2942 1 72 2943 1 72 2963 1 72 2964 1 72 2965 1 72 2966 1 72 2973 1 72 2974 1 72 2975 1 72 2976 1 72 2977 1 72 2978 1 72 2998 1 72 2999 1 72 3000 1 72 3001 1 72 3002 1 72 3003 1 72 3008 1 72 3009 1 72 3010 1 72 3011 1 72 3019 1 72 3020 1 72 3021 1 72 3022 1 72 3029 1 72 3030 1 72 3031 1 72 3032 1 72 3033 1 72 3034 1 72 3054 1 72 3055 1 72 3056 1 72 3057 1 72 3058 1 72 3059 1 72 3064 1 72 3065 1 72 3066 1 72 3067 1 72 3075 1 72 3076 1 72 3077 1 72 3078 1 72 3079 1 72 3080 1 72 3085 1 72 3086 1 72 3087 1 72 3088 1 72 3096 1 72 3097 1 72 3098 1 72 3099 1 72 3101 1 72 3103 1 72 3108 1 72 3109 1 72 3110 1 72 3111 1 72 3138 1 72 3139 1 72 3140 1 72 3141 1 72 3148 1 72 3149 1 72 3150 1 72 3151 1 72 3152 1 72 3153 1 72 3173 1 72 3174 1 72 3175 1 72 3176 1 72 3183 1 72 3184 1 72 3185 1 72 3186 1 72 3187 1 72 3188 1 72 3208 1 72 3209 1 72 3210 1 72 3211 1 72 3212 1 72 3213 1 72 3218 1 72 3219 1 72 3220 1 72 3221 1 72 3229 1 72 3230 1 72 3231 1 72 3232 1 72 3239 1 72 3240 1 72 3241 1 72 3242 1 72 3243 1 72 3244 1 72 3264 1 72 3265 1 72 3266 1 72 3267 1 72 3268 1 72 3269 1 72 3274 1 72 3275 1 72 3276 1 72 3277 1 72 3285 1 72 3286 1 72 3287 1 72 3288 1 72 3289 1 72 3290 1 72 3295 1 72 3296 1 72 3297 1 72 3298 1 72 3306 1 72 3307 1 72 3308 1 72 3309 1 72 3311 1 72 3313 1 72 3314 1 72 3315 1 72 3316 1 72 3323 1 72 3324 1 72 3325 1 72 3326 1 72 3327 1 72 3328 1 72 3348 1 72 3349 1 72 3350 1 72 3351 1 72 3352 1 72 3353 1 72 3358 1 72 3359 1 72 3360 1 72 3361 1 72 3369 1 72 3370 1 72 3371 1 72 3372 1 72 3373 1 72 3374 1 72 3379 1 72 3380 1 72 3381 1 72 3382 1 72 3390 1 72 3391 1 72 3392 1 72 3393 1 72 3395 1 72 3397 1 72 3398 1 72 3399 1 72 3400 1 72 3401 1 72 3402 1 72 3407 1 72 3408 1 72 3409 1 72 3410 1 72 3418 1 72 3419 1 72 3420 1 72 3421 1 72 3423 1 72 3425 1 72 3426 1 72 3427 1 72 3428 1 72 3430 1 72 3432 1 73 18 1 73 46 1 73 67 1 73 87 1 73 91 1 73 95 1 73 96 1 73 97 1 73 130 1 73 151 1 73 171 1 73 175 1 73 179 1 73 180 1 73 181 1 73 207 1 73 227 1 73 231 1 73 235 1 73 236 1 73 237 1 73 262 1 73 266 1 73 270 1 73 271 1 73 272 1 73 296 1 73 300 1 73 301 1 73 302 1 73 306 1 73 307 1 73 308 1 73 312 1 73 313 1 73 314 1 73 340 1 73 361 1 73 381 1 73 385 1 73 389 1 73 390 1 73 391 1 73 417 1 73 437 1 73 441 1 73 445 1 73 446 1 73 447 1 73 472 1 73 476 1 73 480 1 73 481 1 73 482 1 73 506 1 73 510 1 73 511 1 73 512 1 73 516 1 73 517 1 73 518 1 73 522 1 73 523 1 73 524 1 73 543 1 73 563 1 73 567 1 73 571 1 73 572 1 73 573 1 73 598 1 73 602 1 73 606 1 73 607 1 73 608 1 73 632 1 73 636 1 73 637 1 73 638 1 73 642 1 73 643 1 73 644 1 73 648 1 73 649 1 73 650 1 73 668 1 73 672 1 73 676 1 73 677 1 73 678 1 73 702 1 73 706 1 73 707 1 73 708 1 73 712 1 73 713 1 73 714 1 73 718 1 73 719 1 73 720 1 73 737 1 73 741 1 73 742 1 73 743 1 73 747 1 73 748 1 73 749 1 73 753 1 73 754 1 73 755 1 73 772 1 73 773 1 73 774 1 73 778 1 73 779 1 73 780 1 73 782 1 73 783 1 73 784 1 73 786 1 73 802 1 73 823 1 73 843 1 73 847 1 73 851 1 73 852 1 73 853 1 73 879 1 73 899 1 73 903 1 73 907 1 73 908 1 73 909 1 73 934 1 73 938 1 73 942 1 73 943 1 73 944 1 73 968 1 73 972 1 73 973 1 73 974 1 73 978 1 73 979 1 73 980 1 73 984 1 73 985 1 73 986 1 73 1005 1 73 1025 1 73 1029 1 73 1033 1 73 1034 1 73 1035 1 73 1060 1 73 1064 1 73 1068 1 73 1069 1 73 1070 1 73 1094 1 73 1098 1 73 1099 1 73 1100 1 73 1104 1 73 1105 1 73 1106 1 73 1110 1 73 1111 1 73 1112 1 73 1130 1 73 1134 1 73 1138 1 73 1139 1 73 1140 1 73 1164 1 73 1168 1 73 1169 1 73 1170 1 73 1174 1 73 1175 1 73 1176 1 73 1180 1 73 1181 1 73 1182 1 73 1199 1 73 1203 1 73 1204 1 73 1205 1 73 1209 1 73 1210 1 73 1211 1 73 1215 1 73 1216 1 73 1217 1 73 1234 1 73 1235 1 73 1236 1 73 1240 1 73 1241 1 73 1242 1 73 1244 1 73 1245 1 73 1246 1 73 1248 1 73 1257 1 73 1277 1 73 1281 1 73 1285 1 73 1286 1 73 1287 1 73 1312 1 73 1316 1 73 1320 1 73 1321 1 73 1322 1 73 1346 1 73 1350 1 73 1351 1 73 1352 1 73 1356 1 73 1357 1 73 1358 1 73 1362 1 73 1363 1 73 1364 1 73 1382 1 73 1386 1 73 1390 1 73 1391 1 73 1392 1 73 1416 1 73 1420 1 73 1421 1 73 1422 1 73 1426 1 73 1427 1 73 1428 1 73 1432 1 73 1433 1 73 1434 1 73 1451 1 73 1455 1 73 1456 1 73 1457 1 73 1461 1 73 1462 1 73 1463 1 73 1467 1 73 1468 1 73 1469 1 73 1486 1 73 1487 1 73 1488 1 73 1492 1 73 1493 1 73 1494 1 73 1496 1 73 1497 1 73 1498 1 73 1500 1 73 1508 1 73 1512 1 73 1516 1 73 1517 1 73 1518 1 73 1542 1 73 1546 1 73 1547 1 73 1548 1 73 1552 1 73 1553 1 73 1554 1 73 1558 1 73 1559 1 73 1560 1 73 1577 1 73 1581 1 73 1582 1 73 1583 1 73 1587 1 73 1588 1 73 1589 1 73 1593 1 73 1594 1 73 1595 1 73 1612 1 73 1613 1 73 1614 1 73 1618 1 73 1619 1 73 1620 1 73 1622 1 73 1623 1 73 1624 1 73 1626 1 73 1633 1 73 1637 1 73 1638 1 73 1639 1 73 1643 1 73 1644 1 73 1645 1 73 1649 1 73 1650 1 73 1651 1 73 1668 1 73 1669 1 73 1670 1 73 1674 1 73 1675 1 73 1676 1 73 1678 1 73 1679 1 73 1680 1 73 1682 1 73 1689 1 73 1690 1 73 1691 1 73 1695 1 73 1696 1 73 1697 1 73 1699 1 73 1700 1 73 1701 1 73 1703 1 73 1710 1 73 1711 1 73 1712 1 73 1714 1 73 1715 1 73 1726 1 73 1747 1 73 1767 1 73 1771 1 73 1775 1 73 1776 1 73 1777 1 73 1803 1 73 1823 1 73 1827 1 73 1831 1 73 1832 1 73 1833 1 73 1858 1 73 1862 1 73 1866 1 73 1867 1 73 1868 1 73 1892 1 73 1896 1 73 1897 1 73 1898 1 73 1902 1 73 1903 1 73 1904 1 73 1908 1 73 1909 1 73 1910 1 73 1929 1 73 1949 1 73 1953 1 73 1957 1 73 1958 1 73 1959 1 73 1984 1 73 1988 1 73 1992 1 73 1993 1 73 1994 1 73 2018 1 73 2022 1 73 2023 1 73 2024 1 73 2028 1 73 2029 1 73 2030 1 73 2034 1 73 2035 1 73 2036 1 73 2054 1 73 2058 1 73 2062 1 73 2063 1 73 2064 1 73 2088 1 73 2092 1 73 2093 1 73 2094 1 73 2098 1 73 2099 1 73 2100 1 73 2104 1 73 2105 1 73 2106 1 73 2123 1 73 2127 1 73 2128 1 73 2129 1 73 2133 1 73 2134 1 73 2135 1 73 2139 1 73 2140 1 73 2141 1 73 2158 1 73 2159 1 73 2160 1 73 2164 1 73 2165 1 73 2166 1 73 2168 1 73 2169 1 73 2170 1 73 2172 1 73 2181 1 73 2201 1 73 2205 1 73 2209 1 73 2210 1 73 2211 1 73 2236 1 73 2240 1 73 2244 1 73 2245 1 73 2246 1 73 2270 1 73 2274 1 73 2275 1 73 2276 1 73 2280 1 73 2281 1 73 2282 1 73 2286 1 73 2287 1 73 2288 1 73 2306 1 73 2310 1 73 2314 1 73 2315 1 73 2316 1 73 2340 1 73 2344 1 73 2345 1 73 2346 1 73 2350 1 73 2351 1 73 2352 1 73 2356 1 73 2357 1 73 2358 1 73 2375 1 73 2379 1 73 2380 1 73 2381 1 73 2385 1 73 2386 1 73 2387 1 73 2391 1 73 2392 1 73 2393 1 73 2410 1 73 2411 1 73 2412 1 73 2416 1 73 2417 1 73 2418 1 73 2420 1 73 2421 1 73 2422 1 73 2424 1 73 2432 1 73 2436 1 73 2440 1 73 2441 1 73 2442 1 73 2466 1 73 2470 1 73 2471 1 73 2472 1 73 2476 1 73 2477 1 73 2478 1 73 2482 1 73 2483 1 73 2484 1 73 2501 1 73 2505 1 73 2506 1 73 2507 1 73 2511 1 73 2512 1 73 2513 1 73 2517 1 73 2518 1 73 2519 1 73 2536 1 73 2537 1 73 2538 1 73 2542 1 73 2543 1 73 2544 1 73 2546 1 73 2547 1 73 2548 1 73 2550 1 73 2557 1 73 2561 1 73 2562 1 73 2563 1 73 2567 1 73 2568 1 73 2569 1 73 2573 1 73 2574 1 73 2575 1 73 2592 1 73 2593 1 73 2594 1 73 2598 1 73 2599 1 73 2600 1 73 2602 1 73 2603 1 73 2604 1 73 2606 1 73 2613 1 73 2614 1 73 2615 1 73 2619 1 73 2620 1 73 2621 1 73 2623 1 73 2624 1 73 2625 1 73 2627 1 73 2634 1 73 2635 1 73 2636 1 73 2638 1 73 2639 1 73 2643 1 73 2663 1 73 2667 1 73 2671 1 73 2672 1 73 2673 1 73 2698 1 73 2702 1 73 2706 1 73 2707 1 73 2708 1 73 2732 1 73 2736 1 73 2737 1 73 2738 1 73 2742 1 73 2743 1 73 2744 1 73 2748 1 73 2749 1 73 2750 1 73 2768 1 73 2772 1 73 2776 1 73 2777 1 73 2778 1 73 2802 1 73 2806 1 73 2807 1 73 2808 1 73 2812 1 73 2813 1 73 2814 1 73 2818 1 73 2819 1 73 2820 1 73 2837 1 73 2841 1 73 2842 1 73 2843 1 73 2847 1 73 2848 1 73 2849 1 73 2853 1 73 2854 1 73 2855 1 73 2872 1 73 2873 1 73 2874 1 73 2878 1 73 2879 1 73 2880 1 73 2882 1 73 2883 1 73 2884 1 73 2886 1 73 2894 1 73 2898 1 73 2902 1 73 2903 1 73 2904 1 73 2928 1 73 2932 1 73 2933 1 73 2934 1 73 2938 1 73 2939 1 73 2940 1 73 2944 1 73 2945 1 73 2946 1 73 2963 1 73 2967 1 73 2968 1 73 2969 1 73 2973 1 73 2974 1 73 2975 1 73 2979 1 73 2980 1 73 2981 1 73 2998 1 73 2999 1 73 3000 1 73 3004 1 73 3005 1 73 3006 1 73 3008 1 73 3009 1 73 3010 1 73 3012 1 73 3019 1 73 3023 1 73 3024 1 73 3025 1 73 3029 1 73 3030 1 73 3031 1 73 3035 1 73 3036 1 73 3037 1 73 3054 1 73 3055 1 73 3056 1 73 3060 1 73 3061 1 73 3062 1 73 3064 1 73 3065 1 73 3066 1 73 3068 1 73 3075 1 73 3076 1 73 3077 1 73 3081 1 73 3082 1 73 3083 1 73 3085 1 73 3086 1 73 3087 1 73 3089 1 73 3096 1 73 3097 1 73 3098 1 73 3100 1 73 3101 1 73 3104 1 73 3108 1 73 3112 1 73 3113 1 73 3114 1 73 3138 1 73 3142 1 73 3143 1 73 3144 1 73 3148 1 73 3149 1 73 3150 1 73 3154 1 73 3155 1 73 3156 1 73 3173 1 73 3177 1 73 3178 1 73 3179 1 73 3183 1 73 3184 1 73 3185 1 73 3189 1 73 3190 1 73 3191 1 73 3208 1 73 3209 1 73 3210 1 73 3214 1 73 3215 1 73 3216 1 73 3218 1 73 3219 1 73 3220 1 73 3222 1 73 3229 1 73 3233 1 73 3234 1 73 3235 1 73 3239 1 73 3240 1 73 3241 1 73 3245 1 73 3246 1 73 3247 1 73 3264 1 73 3265 1 73 3266 1 73 3270 1 73 3271 1 73 3272 1 73 3274 1 73 3275 1 73 3276 1 73 3278 1 73 3285 1 73 3286 1 73 3287 1 73 3291 1 73 3292 1 73 3293 1 73 3295 1 73 3296 1 73 3297 1 73 3299 1 73 3306 1 73 3307 1 73 3308 1 73 3310 1 73 3311 1 73 3313 1 73 3317 1 73 3318 1 73 3319 1 73 3323 1 73 3324 1 73 3325 1 73 3329 1 73 3330 1 73 3331 1 73 3348 1 73 3349 1 73 3350 1 73 3354 1 73 3355 1 73 3356 1 73 3358 1 73 3359 1 73 3360 1 73 3362 1 73 3369 1 73 3370 1 73 3371 1 73 3375 1 73 3376 1 73 3377 1 73 3379 1 73 3380 1 73 3381 1 73 3383 1 73 3390 1 73 3391 1 73 3392 1 73 3394 1 73 3395 1 73 3397 1 73 3398 1 73 3399 1 73 3403 1 73 3404 1 73 3405 1 73 3407 1 73 3408 1 73 3409 1 73 3411 1 73 3418 1 73 3419 1 73 3420 1 73 3422 1 73 3423 1 73 3425 1 73 3426 1 73 3427 1 73 3429 1 73 3430 1 73 3432 1 74 19 1 74 47 1 74 68 1 74 88 1 74 92 1 74 95 1 74 98 1 74 99 1 74 131 1 74 152 1 74 172 1 74 176 1 74 179 1 74 182 1 74 183 1 74 208 1 74 228 1 74 232 1 74 235 1 74 238 1 74 239 1 74 263 1 74 267 1 74 270 1 74 273 1 74 274 1 74 297 1 74 300 1 74 303 1 74 304 1 74 306 1 74 309 1 74 310 1 74 312 1 74 313 1 74 315 1 74 341 1 74 362 1 74 382 1 74 386 1 74 389 1 74 392 1 74 393 1 74 418 1 74 438 1 74 442 1 74 445 1 74 448 1 74 449 1 74 473 1 74 477 1 74 480 1 74 483 1 74 484 1 74 507 1 74 510 1 74 513 1 74 514 1 74 516 1 74 519 1 74 520 1 74 522 1 74 523 1 74 525 1 74 544 1 74 564 1 74 568 1 74 571 1 74 574 1 74 575 1 74 599 1 74 603 1 74 606 1 74 609 1 74 610 1 74 633 1 74 636 1 74 639 1 74 640 1 74 642 1 74 645 1 74 646 1 74 648 1 74 649 1 74 651 1 74 669 1 74 673 1 74 676 1 74 679 1 74 680 1 74 703 1 74 706 1 74 709 1 74 710 1 74 712 1 74 715 1 74 716 1 74 718 1 74 719 1 74 721 1 74 738 1 74 741 1 74 744 1 74 745 1 74 747 1 74 750 1 74 751 1 74 753 1 74 754 1 74 756 1 74 772 1 74 775 1 74 776 1 74 778 1 74 779 1 74 781 1 74 782 1 74 783 1 74 785 1 74 786 1 74 803 1 74 824 1 74 844 1 74 848 1 74 851 1 74 854 1 74 855 1 74 880 1 74 900 1 74 904 1 74 907 1 74 910 1 74 911 1 74 935 1 74 939 1 74 942 1 74 945 1 74 946 1 74 969 1 74 972 1 74 975 1 74 976 1 74 978 1 74 981 1 74 982 1 74 984 1 74 985 1 74 987 1 74 1006 1 74 1026 1 74 1030 1 74 1033 1 74 1036 1 74 1037 1 74 1061 1 74 1065 1 74 1068 1 74 1071 1 74 1072 1 74 1095 1 74 1098 1 74 1101 1 74 1102 1 74 1104 1 74 1107 1 74 1108 1 74 1110 1 74 1111 1 74 1113 1 74 1131 1 74 1135 1 74 1138 1 74 1141 1 74 1142 1 74 1165 1 74 1168 1 74 1171 1 74 1172 1 74 1174 1 74 1177 1 74 1178 1 74 1180 1 74 1181 1 74 1183 1 74 1200 1 74 1203 1 74 1206 1 74 1207 1 74 1209 1 74 1212 1 74 1213 1 74 1215 1 74 1216 1 74 1218 1 74 1234 1 74 1237 1 74 1238 1 74 1240 1 74 1241 1 74 1243 1 74 1244 1 74 1245 1 74 1247 1 74 1248 1 74 1258 1 74 1278 1 74 1282 1 74 1285 1 74 1288 1 74 1289 1 74 1313 1 74 1317 1 74 1320 1 74 1323 1 74 1324 1 74 1347 1 74 1350 1 74 1353 1 74 1354 1 74 1356 1 74 1359 1 74 1360 1 74 1362 1 74 1363 1 74 1365 1 74 1383 1 74 1387 1 74 1390 1 74 1393 1 74 1394 1 74 1417 1 74 1420 1 74 1423 1 74 1424 1 74 1426 1 74 1429 1 74 1430 1 74 1432 1 74 1433 1 74 1435 1 74 1452 1 74 1455 1 74 1458 1 74 1459 1 74 1461 1 74 1464 1 74 1465 1 74 1467 1 74 1468 1 74 1470 1 74 1486 1 74 1489 1 74 1490 1 74 1492 1 74 1493 1 74 1495 1 74 1496 1 74 1497 1 74 1499 1 74 1500 1 74 1509 1 74 1513 1 74 1516 1 74 1519 1 74 1520 1 74 1543 1 74 1546 1 74 1549 1 74 1550 1 74 1552 1 74 1555 1 74 1556 1 74 1558 1 74 1559 1 74 1561 1 74 1578 1 74 1581 1 74 1584 1 74 1585 1 74 1587 1 74 1590 1 74 1591 1 74 1593 1 74 1594 1 74 1596 1 74 1612 1 74 1615 1 74 1616 1 74 1618 1 74 1619 1 74 1621 1 74 1622 1 74 1623 1 74 1625 1 74 1626 1 74 1634 1 74 1637 1 74 1640 1 74 1641 1 74 1643 1 74 1646 1 74 1647 1 74 1649 1 74 1650 1 74 1652 1 74 1668 1 74 1671 1 74 1672 1 74 1674 1 74 1675 1 74 1677 1 74 1678 1 74 1679 1 74 1681 1 74 1682 1 74 1689 1 74 1692 1 74 1693 1 74 1695 1 74 1696 1 74 1698 1 74 1699 1 74 1700 1 74 1702 1 74 1703 1 74 1710 1 74 1711 1 74 1713 1 74 1714 1 74 1715 1 74 1727 1 74 1748 1 74 1768 1 74 1772 1 74 1775 1 74 1778 1 74 1779 1 74 1804 1 74 1824 1 74 1828 1 74 1831 1 74 1834 1 74 1835 1 74 1859 1 74 1863 1 74 1866 1 74 1869 1 74 1870 1 74 1893 1 74 1896 1 74 1899 1 74 1900 1 74 1902 1 74 1905 1 74 1906 1 74 1908 1 74 1909 1 74 1911 1 74 1930 1 74 1950 1 74 1954 1 74 1957 1 74 1960 1 74 1961 1 74 1985 1 74 1989 1 74 1992 1 74 1995 1 74 1996 1 74 2019 1 74 2022 1 74 2025 1 74 2026 1 74 2028 1 74 2031 1 74 2032 1 74 2034 1 74 2035 1 74 2037 1 74 2055 1 74 2059 1 74 2062 1 74 2065 1 74 2066 1 74 2089 1 74 2092 1 74 2095 1 74 2096 1 74 2098 1 74 2101 1 74 2102 1 74 2104 1 74 2105 1 74 2107 1 74 2124 1 74 2127 1 74 2130 1 74 2131 1 74 2133 1 74 2136 1 74 2137 1 74 2139 1 74 2140 1 74 2142 1 74 2158 1 74 2161 1 74 2162 1 74 2164 1 74 2165 1 74 2167 1 74 2168 1 74 2169 1 74 2171 1 74 2172 1 74 2182 1 74 2202 1 74 2206 1 74 2209 1 74 2212 1 74 2213 1 74 2237 1 74 2241 1 74 2244 1 74 2247 1 74 2248 1 74 2271 1 74 2274 1 74 2277 1 74 2278 1 74 2280 1 74 2283 1 74 2284 1 74 2286 1 74 2287 1 74 2289 1 74 2307 1 74 2311 1 74 2314 1 74 2317 1 74 2318 1 74 2341 1 74 2344 1 74 2347 1 74 2348 1 74 2350 1 74 2353 1 74 2354 1 74 2356 1 74 2357 1 74 2359 1 74 2376 1 74 2379 1 74 2382 1 74 2383 1 74 2385 1 74 2388 1 74 2389 1 74 2391 1 74 2392 1 74 2394 1 74 2410 1 74 2413 1 74 2414 1 74 2416 1 74 2417 1 74 2419 1 74 2420 1 74 2421 1 74 2423 1 74 2424 1 74 2433 1 74 2437 1 74 2440 1 74 2443 1 74 2444 1 74 2467 1 74 2470 1 74 2473 1 74 2474 1 74 2476 1 74 2479 1 74 2480 1 74 2482 1 74 2483 1 74 2485 1 74 2502 1 74 2505 1 74 2508 1 74 2509 1 74 2511 1 74 2514 1 74 2515 1 74 2517 1 74 2518 1 74 2520 1 74 2536 1 74 2539 1 74 2540 1 74 2542 1 74 2543 1 74 2545 1 74 2546 1 74 2547 1 74 2549 1 74 2550 1 74 2558 1 74 2561 1 74 2564 1 74 2565 1 74 2567 1 74 2570 1 74 2571 1 74 2573 1 74 2574 1 74 2576 1 74 2592 1 74 2595 1 74 2596 1 74 2598 1 74 2599 1 74 2601 1 74 2602 1 74 2603 1 74 2605 1 74 2606 1 74 2613 1 74 2616 1 74 2617 1 74 2619 1 74 2620 1 74 2622 1 74 2623 1 74 2624 1 74 2626 1 74 2627 1 74 2634 1 74 2635 1 74 2637 1 74 2638 1 74 2639 1 74 2644 1 74 2664 1 74 2668 1 74 2671 1 74 2674 1 74 2675 1 74 2699 1 74 2703 1 74 2706 1 74 2709 1 74 2710 1 74 2733 1 74 2736 1 74 2739 1 74 2740 1 74 2742 1 74 2745 1 74 2746 1 74 2748 1 74 2749 1 74 2751 1 74 2769 1 74 2773 1 74 2776 1 74 2779 1 74 2780 1 74 2803 1 74 2806 1 74 2809 1 74 2810 1 74 2812 1 74 2815 1 74 2816 1 74 2818 1 74 2819 1 74 2821 1 74 2838 1 74 2841 1 74 2844 1 74 2845 1 74 2847 1 74 2850 1 74 2851 1 74 2853 1 74 2854 1 74 2856 1 74 2872 1 74 2875 1 74 2876 1 74 2878 1 74 2879 1 74 2881 1 74 2882 1 74 2883 1 74 2885 1 74 2886 1 74 2895 1 74 2899 1 74 2902 1 74 2905 1 74 2906 1 74 2929 1 74 2932 1 74 2935 1 74 2936 1 74 2938 1 74 2941 1 74 2942 1 74 2944 1 74 2945 1 74 2947 1 74 2964 1 74 2967 1 74 2970 1 74 2971 1 74 2973 1 74 2976 1 74 2977 1 74 2979 1 74 2980 1 74 2982 1 74 2998 1 74 3001 1 74 3002 1 74 3004 1 74 3005 1 74 3007 1 74 3008 1 74 3009 1 74 3011 1 74 3012 1 74 3020 1 74 3023 1 74 3026 1 74 3027 1 74 3029 1 74 3032 1 74 3033 1 74 3035 1 74 3036 1 74 3038 1 74 3054 1 74 3057 1 74 3058 1 74 3060 1 74 3061 1 74 3063 1 74 3064 1 74 3065 1 74 3067 1 74 3068 1 74 3075 1 74 3078 1 74 3079 1 74 3081 1 74 3082 1 74 3084 1 74 3085 1 74 3086 1 74 3088 1 74 3089 1 74 3096 1 74 3097 1 74 3099 1 74 3100 1 74 3101 1 74 3105 1 74 3109 1 74 3112 1 74 3115 1 74 3116 1 74 3139 1 74 3142 1 74 3145 1 74 3146 1 74 3148 1 74 3151 1 74 3152 1 74 3154 1 74 3155 1 74 3157 1 74 3174 1 74 3177 1 74 3180 1 74 3181 1 74 3183 1 74 3186 1 74 3187 1 74 3189 1 74 3190 1 74 3192 1 74 3208 1 74 3211 1 74 3212 1 74 3214 1 74 3215 1 74 3217 1 74 3218 1 74 3219 1 74 3221 1 74 3222 1 74 3230 1 74 3233 1 74 3236 1 74 3237 1 74 3239 1 74 3242 1 74 3243 1 74 3245 1 74 3246 1 74 3248 1 74 3264 1 74 3267 1 74 3268 1 74 3270 1 74 3271 1 74 3273 1 74 3274 1 74 3275 1 74 3277 1 74 3278 1 74 3285 1 74 3288 1 74 3289 1 74 3291 1 74 3292 1 74 3294 1 74 3295 1 74 3296 1 74 3298 1 74 3299 1 74 3306 1 74 3307 1 74 3309 1 74 3310 1 74 3311 1 74 3314 1 74 3317 1 74 3320 1 74 3321 1 74 3323 1 74 3326 1 74 3327 1 74 3329 1 74 3330 1 74 3332 1 74 3348 1 74 3351 1 74 3352 1 74 3354 1 74 3355 1 74 3357 1 74 3358 1 74 3359 1 74 3361 1 74 3362 1 74 3369 1 74 3372 1 74 3373 1 74 3375 1 74 3376 1 74 3378 1 74 3379 1 74 3380 1 74 3382 1 74 3383 1 74 3390 1 74 3391 1 74 3393 1 74 3394 1 74 3395 1 74 3397 1 74 3400 1 74 3401 1 74 3403 1 74 3404 1 74 3406 1 74 3407 1 74 3408 1 74 3410 1 74 3411 1 74 3418 1 74 3419 1 74 3421 1 74 3422 1 74 3423 1 74 3425 1 74 3426 1 74 3428 1 74 3429 1 74 3430 1 74 3432 1 75 20 1 75 48 1 75 69 1 75 89 1 75 93 1 75 96 1 75 98 1 75 100 1 75 132 1 75 153 1 75 173 1 75 177 1 75 180 1 75 182 1 75 184 1 75 209 1 75 229 1 75 233 1 75 236 1 75 238 1 75 240 1 75 264 1 75 268 1 75 271 1 75 273 1 75 275 1 75 298 1 75 301 1 75 303 1 75 305 1 75 307 1 75 309 1 75 311 1 75 312 1 75 314 1 75 315 1 75 342 1 75 363 1 75 383 1 75 387 1 75 390 1 75 392 1 75 394 1 75 419 1 75 439 1 75 443 1 75 446 1 75 448 1 75 450 1 75 474 1 75 478 1 75 481 1 75 483 1 75 485 1 75 508 1 75 511 1 75 513 1 75 515 1 75 517 1 75 519 1 75 521 1 75 522 1 75 524 1 75 525 1 75 545 1 75 565 1 75 569 1 75 572 1 75 574 1 75 576 1 75 600 1 75 604 1 75 607 1 75 609 1 75 611 1 75 634 1 75 637 1 75 639 1 75 641 1 75 643 1 75 645 1 75 647 1 75 648 1 75 650 1 75 651 1 75 670 1 75 674 1 75 677 1 75 679 1 75 681 1 75 704 1 75 707 1 75 709 1 75 711 1 75 713 1 75 715 1 75 717 1 75 718 1 75 720 1 75 721 1 75 739 1 75 742 1 75 744 1 75 746 1 75 748 1 75 750 1 75 752 1 75 753 1 75 755 1 75 756 1 75 773 1 75 775 1 75 777 1 75 778 1 75 780 1 75 781 1 75 782 1 75 784 1 75 785 1 75 786 1 75 804 1 75 825 1 75 845 1 75 849 1 75 852 1 75 854 1 75 856 1 75 881 1 75 901 1 75 905 1 75 908 1 75 910 1 75 912 1 75 936 1 75 940 1 75 943 1 75 945 1 75 947 1 75 970 1 75 973 1 75 975 1 75 977 1 75 979 1 75 981 1 75 983 1 75 984 1 75 986 1 75 987 1 75 1007 1 75 1027 1 75 1031 1 75 1034 1 75 1036 1 75 1038 1 75 1062 1 75 1066 1 75 1069 1 75 1071 1 75 1073 1 75 1096 1 75 1099 1 75 1101 1 75 1103 1 75 1105 1 75 1107 1 75 1109 1 75 1110 1 75 1112 1 75 1113 1 75 1132 1 75 1136 1 75 1139 1 75 1141 1 75 1143 1 75 1166 1 75 1169 1 75 1171 1 75 1173 1 75 1175 1 75 1177 1 75 1179 1 75 1180 1 75 1182 1 75 1183 1 75 1201 1 75 1204 1 75 1206 1 75 1208 1 75 1210 1 75 1212 1 75 1214 1 75 1215 1 75 1217 1 75 1218 1 75 1235 1 75 1237 1 75 1239 1 75 1240 1 75 1242 1 75 1243 1 75 1244 1 75 1246 1 75 1247 1 75 1248 1 75 1259 1 75 1279 1 75 1283 1 75 1286 1 75 1288 1 75 1290 1 75 1314 1 75 1318 1 75 1321 1 75 1323 1 75 1325 1 75 1348 1 75 1351 1 75 1353 1 75 1355 1 75 1357 1 75 1359 1 75 1361 1 75 1362 1 75 1364 1 75 1365 1 75 1384 1 75 1388 1 75 1391 1 75 1393 1 75 1395 1 75 1418 1 75 1421 1 75 1423 1 75 1425 1 75 1427 1 75 1429 1 75 1431 1 75 1432 1 75 1434 1 75 1435 1 75 1453 1 75 1456 1 75 1458 1 75 1460 1 75 1462 1 75 1464 1 75 1466 1 75 1467 1 75 1469 1 75 1470 1 75 1487 1 75 1489 1 75 1491 1 75 1492 1 75 1494 1 75 1495 1 75 1496 1 75 1498 1 75 1499 1 75 1500 1 75 1510 1 75 1514 1 75 1517 1 75 1519 1 75 1521 1 75 1544 1 75 1547 1 75 1549 1 75 1551 1 75 1553 1 75 1555 1 75 1557 1 75 1558 1 75 1560 1 75 1561 1 75 1579 1 75 1582 1 75 1584 1 75 1586 1 75 1588 1 75 1590 1 75 1592 1 75 1593 1 75 1595 1 75 1596 1 75 1613 1 75 1615 1 75 1617 1 75 1618 1 75 1620 1 75 1621 1 75 1622 1 75 1624 1 75 1625 1 75 1626 1 75 1635 1 75 1638 1 75 1640 1 75 1642 1 75 1644 1 75 1646 1 75 1648 1 75 1649 1 75 1651 1 75 1652 1 75 1669 1 75 1671 1 75 1673 1 75 1674 1 75 1676 1 75 1677 1 75 1678 1 75 1680 1 75 1681 1 75 1682 1 75 1690 1 75 1692 1 75 1694 1 75 1695 1 75 1697 1 75 1698 1 75 1699 1 75 1701 1 75 1702 1 75 1703 1 75 1710 1 75 1712 1 75 1713 1 75 1714 1 75 1715 1 75 1728 1 75 1749 1 75 1769 1 75 1773 1 75 1776 1 75 1778 1 75 1780 1 75 1805 1 75 1825 1 75 1829 1 75 1832 1 75 1834 1 75 1836 1 75 1860 1 75 1864 1 75 1867 1 75 1869 1 75 1871 1 75 1894 1 75 1897 1 75 1899 1 75 1901 1 75 1903 1 75 1905 1 75 1907 1 75 1908 1 75 1910 1 75 1911 1 75 1931 1 75 1951 1 75 1955 1 75 1958 1 75 1960 1 75 1962 1 75 1986 1 75 1990 1 75 1993 1 75 1995 1 75 1997 1 75 2020 1 75 2023 1 75 2025 1 75 2027 1 75 2029 1 75 2031 1 75 2033 1 75 2034 1 75 2036 1 75 2037 1 75 2056 1 75 2060 1 75 2063 1 75 2065 1 75 2067 1 75 2090 1 75 2093 1 75 2095 1 75 2097 1 75 2099 1 75 2101 1 75 2103 1 75 2104 1 75 2106 1 75 2107 1 75 2125 1 75 2128 1 75 2130 1 75 2132 1 75 2134 1 75 2136 1 75 2138 1 75 2139 1 75 2141 1 75 2142 1 75 2159 1 75 2161 1 75 2163 1 75 2164 1 75 2166 1 75 2167 1 75 2168 1 75 2170 1 75 2171 1 75 2172 1 75 2183 1 75 2203 1 75 2207 1 75 2210 1 75 2212 1 75 2214 1 75 2238 1 75 2242 1 75 2245 1 75 2247 1 75 2249 1 75 2272 1 75 2275 1 75 2277 1 75 2279 1 75 2281 1 75 2283 1 75 2285 1 75 2286 1 75 2288 1 75 2289 1 75 2308 1 75 2312 1 75 2315 1 75 2317 1 75 2319 1 75 2342 1 75 2345 1 75 2347 1 75 2349 1 75 2351 1 75 2353 1 75 2355 1 75 2356 1 75 2358 1 75 2359 1 75 2377 1 75 2380 1 75 2382 1 75 2384 1 75 2386 1 75 2388 1 75 2390 1 75 2391 1 75 2393 1 75 2394 1 75 2411 1 75 2413 1 75 2415 1 75 2416 1 75 2418 1 75 2419 1 75 2420 1 75 2422 1 75 2423 1 75 2424 1 75 2434 1 75 2438 1 75 2441 1 75 2443 1 75 2445 1 75 2468 1 75 2471 1 75 2473 1 75 2475 1 75 2477 1 75 2479 1 75 2481 1 75 2482 1 75 2484 1 75 2485 1 75 2503 1 75 2506 1 75 2508 1 75 2510 1 75 2512 1 75 2514 1 75 2516 1 75 2517 1 75 2519 1 75 2520 1 75 2537 1 75 2539 1 75 2541 1 75 2542 1 75 2544 1 75 2545 1 75 2546 1 75 2548 1 75 2549 1 75 2550 1 75 2559 1 75 2562 1 75 2564 1 75 2566 1 75 2568 1 75 2570 1 75 2572 1 75 2573 1 75 2575 1 75 2576 1 75 2593 1 75 2595 1 75 2597 1 75 2598 1 75 2600 1 75 2601 1 75 2602 1 75 2604 1 75 2605 1 75 2606 1 75 2614 1 75 2616 1 75 2618 1 75 2619 1 75 2621 1 75 2622 1 75 2623 1 75 2625 1 75 2626 1 75 2627 1 75 2634 1 75 2636 1 75 2637 1 75 2638 1 75 2639 1 75 2645 1 75 2665 1 75 2669 1 75 2672 1 75 2674 1 75 2676 1 75 2700 1 75 2704 1 75 2707 1 75 2709 1 75 2711 1 75 2734 1 75 2737 1 75 2739 1 75 2741 1 75 2743 1 75 2745 1 75 2747 1 75 2748 1 75 2750 1 75 2751 1 75 2770 1 75 2774 1 75 2777 1 75 2779 1 75 2781 1 75 2804 1 75 2807 1 75 2809 1 75 2811 1 75 2813 1 75 2815 1 75 2817 1 75 2818 1 75 2820 1 75 2821 1 75 2839 1 75 2842 1 75 2844 1 75 2846 1 75 2848 1 75 2850 1 75 2852 1 75 2853 1 75 2855 1 75 2856 1 75 2873 1 75 2875 1 75 2877 1 75 2878 1 75 2880 1 75 2881 1 75 2882 1 75 2884 1 75 2885 1 75 2886 1 75 2896 1 75 2900 1 75 2903 1 75 2905 1 75 2907 1 75 2930 1 75 2933 1 75 2935 1 75 2937 1 75 2939 1 75 2941 1 75 2943 1 75 2944 1 75 2946 1 75 2947 1 75 2965 1 75 2968 1 75 2970 1 75 2972 1 75 2974 1 75 2976 1 75 2978 1 75 2979 1 75 2981 1 75 2982 1 75 2999 1 75 3001 1 75 3003 1 75 3004 1 75 3006 1 75 3007 1 75 3008 1 75 3010 1 75 3011 1 75 3012 1 75 3021 1 75 3024 1 75 3026 1 75 3028 1 75 3030 1 75 3032 1 75 3034 1 75 3035 1 75 3037 1 75 3038 1 75 3055 1 75 3057 1 75 3059 1 75 3060 1 75 3062 1 75 3063 1 75 3064 1 75 3066 1 75 3067 1 75 3068 1 75 3076 1 75 3078 1 75 3080 1 75 3081 1 75 3083 1 75 3084 1 75 3085 1 75 3087 1 75 3088 1 75 3089 1 75 3096 1 75 3098 1 75 3099 1 75 3100 1 75 3101 1 75 3106 1 75 3110 1 75 3113 1 75 3115 1 75 3117 1 75 3140 1 75 3143 1 75 3145 1 75 3147 1 75 3149 1 75 3151 1 75 3153 1 75 3154 1 75 3156 1 75 3157 1 75 3175 1 75 3178 1 75 3180 1 75 3182 1 75 3184 1 75 3186 1 75 3188 1 75 3189 1 75 3191 1 75 3192 1 75 3209 1 75 3211 1 75 3213 1 75 3214 1 75 3216 1 75 3217 1 75 3218 1 75 3220 1 75 3221 1 75 3222 1 75 3231 1 75 3234 1 75 3236 1 75 3238 1 75 3240 1 75 3242 1 75 3244 1 75 3245 1 75 3247 1 75 3248 1 75 3265 1 75 3267 1 75 3269 1 75 3270 1 75 3272 1 75 3273 1 75 3274 1 75 3276 1 75 3277 1 75 3278 1 75 3286 1 75 3288 1 75 3290 1 75 3291 1 75 3293 1 75 3294 1 75 3295 1 75 3297 1 75 3298 1 75 3299 1 75 3306 1 75 3308 1 75 3309 1 75 3310 1 75 3311 1 75 3315 1 75 3318 1 75 3320 1 75 3322 1 75 3324 1 75 3326 1 75 3328 1 75 3329 1 75 3331 1 75 3332 1 75 3349 1 75 3351 1 75 3353 1 75 3354 1 75 3356 1 75 3357 1 75 3358 1 75 3360 1 75 3361 1 75 3362 1 75 3370 1 75 3372 1 75 3374 1 75 3375 1 75 3377 1 75 3378 1 75 3379 1 75 3381 1 75 3382 1 75 3383 1 75 3390 1 75 3392 1 75 3393 1 75 3394 1 75 3395 1 75 3398 1 75 3400 1 75 3402 1 75 3403 1 75 3405 1 75 3406 1 75 3407 1 75 3409 1 75 3410 1 75 3411 1 75 3418 1 75 3420 1 75 3421 1 75 3422 1 75 3423 1 75 3425 1 75 3427 1 75 3428 1 75 3429 1 75 3430 1 75 3432 1 76 21 1 76 49 1 76 70 1 76 90 1 76 94 1 76 97 1 76 99 1 76 100 1 76 133 1 76 154 1 76 174 1 76 178 1 76 181 1 76 183 1 76 184 1 76 210 1 76 230 1 76 234 1 76 237 1 76 239 1 76 240 1 76 265 1 76 269 1 76 272 1 76 274 1 76 275 1 76 299 1 76 302 1 76 304 1 76 305 1 76 308 1 76 310 1 76 311 1 76 313 1 76 314 1 76 315 1 76 343 1 76 364 1 76 384 1 76 388 1 76 391 1 76 393 1 76 394 1 76 420 1 76 440 1 76 444 1 76 447 1 76 449 1 76 450 1 76 475 1 76 479 1 76 482 1 76 484 1 76 485 1 76 509 1 76 512 1 76 514 1 76 515 1 76 518 1 76 520 1 76 521 1 76 523 1 76 524 1 76 525 1 76 546 1 76 566 1 76 570 1 76 573 1 76 575 1 76 576 1 76 601 1 76 605 1 76 608 1 76 610 1 76 611 1 76 635 1 76 638 1 76 640 1 76 641 1 76 644 1 76 646 1 76 647 1 76 649 1 76 650 1 76 651 1 76 671 1 76 675 1 76 678 1 76 680 1 76 681 1 76 705 1 76 708 1 76 710 1 76 711 1 76 714 1 76 716 1 76 717 1 76 719 1 76 720 1 76 721 1 76 740 1 76 743 1 76 745 1 76 746 1 76 749 1 76 751 1 76 752 1 76 754 1 76 755 1 76 756 1 76 774 1 76 776 1 76 777 1 76 779 1 76 780 1 76 781 1 76 783 1 76 784 1 76 785 1 76 786 1 76 805 1 76 826 1 76 846 1 76 850 1 76 853 1 76 855 1 76 856 1 76 882 1 76 902 1 76 906 1 76 909 1 76 911 1 76 912 1 76 937 1 76 941 1 76 944 1 76 946 1 76 947 1 76 971 1 76 974 1 76 976 1 76 977 1 76 980 1 76 982 1 76 983 1 76 985 1 76 986 1 76 987 1 76 1008 1 76 1028 1 76 1032 1 76 1035 1 76 1037 1 76 1038 1 76 1063 1 76 1067 1 76 1070 1 76 1072 1 76 1073 1 76 1097 1 76 1100 1 76 1102 1 76 1103 1 76 1106 1 76 1108 1 76 1109 1 76 1111 1 76 1112 1 76 1113 1 76 1133 1 76 1137 1 76 1140 1 76 1142 1 76 1143 1 76 1167 1 76 1170 1 76 1172 1 76 1173 1 76 1176 1 76 1178 1 76 1179 1 76 1181 1 76 1182 1 76 1183 1 76 1202 1 76 1205 1 76 1207 1 76 1208 1 76 1211 1 76 1213 1 76 1214 1 76 1216 1 76 1217 1 76 1218 1 76 1236 1 76 1238 1 76 1239 1 76 1241 1 76 1242 1 76 1243 1 76 1245 1 76 1246 1 76 1247 1 76 1248 1 76 1260 1 76 1280 1 76 1284 1 76 1287 1 76 1289 1 76 1290 1 76 1315 1 76 1319 1 76 1322 1 76 1324 1 76 1325 1 76 1349 1 76 1352 1 76 1354 1 76 1355 1 76 1358 1 76 1360 1 76 1361 1 76 1363 1 76 1364 1 76 1365 1 76 1385 1 76 1389 1 76 1392 1 76 1394 1 76 1395 1 76 1419 1 76 1422 1 76 1424 1 76 1425 1 76 1428 1 76 1430 1 76 1431 1 76 1433 1 76 1434 1 76 1435 1 76 1454 1 76 1457 1 76 1459 1 76 1460 1 76 1463 1 76 1465 1 76 1466 1 76 1468 1 76 1469 1 76 1470 1 76 1488 1 76 1490 1 76 1491 1 76 1493 1 76 1494 1 76 1495 1 76 1497 1 76 1498 1 76 1499 1 76 1500 1 76 1511 1 76 1515 1 76 1518 1 76 1520 1 76 1521 1 76 1545 1 76 1548 1 76 1550 1 76 1551 1 76 1554 1 76 1556 1 76 1557 1 76 1559 1 76 1560 1 76 1561 1 76 1580 1 76 1583 1 76 1585 1 76 1586 1 76 1589 1 76 1591 1 76 1592 1 76 1594 1 76 1595 1 76 1596 1 76 1614 1 76 1616 1 76 1617 1 76 1619 1 76 1620 1 76 1621 1 76 1623 1 76 1624 1 76 1625 1 76 1626 1 76 1636 1 76 1639 1 76 1641 1 76 1642 1 76 1645 1 76 1647 1 76 1648 1 76 1650 1 76 1651 1 76 1652 1 76 1670 1 76 1672 1 76 1673 1 76 1675 1 76 1676 1 76 1677 1 76 1679 1 76 1680 1 76 1681 1 76 1682 1 76 1691 1 76 1693 1 76 1694 1 76 1696 1 76 1697 1 76 1698 1 76 1700 1 76 1701 1 76 1702 1 76 1703 1 76 1711 1 76 1712 1 76 1713 1 76 1714 1 76 1715 1 76 1729 1 76 1750 1 76 1770 1 76 1774 1 76 1777 1 76 1779 1 76 1780 1 76 1806 1 76 1826 1 76 1830 1 76 1833 1 76 1835 1 76 1836 1 76 1861 1 76 1865 1 76 1868 1 76 1870 1 76 1871 1 76 1895 1 76 1898 1 76 1900 1 76 1901 1 76 1904 1 76 1906 1 76 1907 1 76 1909 1 76 1910 1 76 1911 1 76 1932 1 76 1952 1 76 1956 1 76 1959 1 76 1961 1 76 1962 1 76 1987 1 76 1991 1 76 1994 1 76 1996 1 76 1997 1 76 2021 1 76 2024 1 76 2026 1 76 2027 1 76 2030 1 76 2032 1 76 2033 1 76 2035 1 76 2036 1 76 2037 1 76 2057 1 76 2061 1 76 2064 1 76 2066 1 76 2067 1 76 2091 1 76 2094 1 76 2096 1 76 2097 1 76 2100 1 76 2102 1 76 2103 1 76 2105 1 76 2106 1 76 2107 1 76 2126 1 76 2129 1 76 2131 1 76 2132 1 76 2135 1 76 2137 1 76 2138 1 76 2140 1 76 2141 1 76 2142 1 76 2160 1 76 2162 1 76 2163 1 76 2165 1 76 2166 1 76 2167 1 76 2169 1 76 2170 1 76 2171 1 76 2172 1 76 2184 1 76 2204 1 76 2208 1 76 2211 1 76 2213 1 76 2214 1 76 2239 1 76 2243 1 76 2246 1 76 2248 1 76 2249 1 76 2273 1 76 2276 1 76 2278 1 76 2279 1 76 2282 1 76 2284 1 76 2285 1 76 2287 1 76 2288 1 76 2289 1 76 2309 1 76 2313 1 76 2316 1 76 2318 1 76 2319 1 76 2343 1 76 2346 1 76 2348 1 76 2349 1 76 2352 1 76 2354 1 76 2355 1 76 2357 1 76 2358 1 76 2359 1 76 2378 1 76 2381 1 76 2383 1 76 2384 1 76 2387 1 76 2389 1 76 2390 1 76 2392 1 76 2393 1 76 2394 1 76 2412 1 76 2414 1 76 2415 1 76 2417 1 76 2418 1 76 2419 1 76 2421 1 76 2422 1 76 2423 1 76 2424 1 76 2435 1 76 2439 1 76 2442 1 76 2444 1 76 2445 1 76 2469 1 76 2472 1 76 2474 1 76 2475 1 76 2478 1 76 2480 1 76 2481 1 76 2483 1 76 2484 1 76 2485 1 76 2504 1 76 2507 1 76 2509 1 76 2510 1 76 2513 1 76 2515 1 76 2516 1 76 2518 1 76 2519 1 76 2520 1 76 2538 1 76 2540 1 76 2541 1 76 2543 1 76 2544 1 76 2545 1 76 2547 1 76 2548 1 76 2549 1 76 2550 1 76 2560 1 76 2563 1 76 2565 1 76 2566 1 76 2569 1 76 2571 1 76 2572 1 76 2574 1 76 2575 1 76 2576 1 76 2594 1 76 2596 1 76 2597 1 76 2599 1 76 2600 1 76 2601 1 76 2603 1 76 2604 1 76 2605 1 76 2606 1 76 2615 1 76 2617 1 76 2618 1 76 2620 1 76 2621 1 76 2622 1 76 2624 1 76 2625 1 76 2626 1 76 2627 1 76 2635 1 76 2636 1 76 2637 1 76 2638 1 76 2639 1 76 2646 1 76 2666 1 76 2670 1 76 2673 1 76 2675 1 76 2676 1 76 2701 1 76 2705 1 76 2708 1 76 2710 1 76 2711 1 76 2735 1 76 2738 1 76 2740 1 76 2741 1 76 2744 1 76 2746 1 76 2747 1 76 2749 1 76 2750 1 76 2751 1 76 2771 1 76 2775 1 76 2778 1 76 2780 1 76 2781 1 76 2805 1 76 2808 1 76 2810 1 76 2811 1 76 2814 1 76 2816 1 76 2817 1 76 2819 1 76 2820 1 76 2821 1 76 2840 1 76 2843 1 76 2845 1 76 2846 1 76 2849 1 76 2851 1 76 2852 1 76 2854 1 76 2855 1 76 2856 1 76 2874 1 76 2876 1 76 2877 1 76 2879 1 76 2880 1 76 2881 1 76 2883 1 76 2884 1 76 2885 1 76 2886 1 76 2897 1 76 2901 1 76 2904 1 76 2906 1 76 2907 1 76 2931 1 76 2934 1 76 2936 1 76 2937 1 76 2940 1 76 2942 1 76 2943 1 76 2945 1 76 2946 1 76 2947 1 76 2966 1 76 2969 1 76 2971 1 76 2972 1 76 2975 1 76 2977 1 76 2978 1 76 2980 1 76 2981 1 76 2982 1 76 3000 1 76 3002 1 76 3003 1 76 3005 1 76 3006 1 76 3007 1 76 3009 1 76 3010 1 76 3011 1 76 3012 1 76 3022 1 76 3025 1 76 3027 1 76 3028 1 76 3031 1 76 3033 1 76 3034 1 76 3036 1 76 3037 1 76 3038 1 76 3056 1 76 3058 1 76 3059 1 76 3061 1 76 3062 1 76 3063 1 76 3065 1 76 3066 1 76 3067 1 76 3068 1 76 3077 1 76 3079 1 76 3080 1 76 3082 1 76 3083 1 76 3084 1 76 3086 1 76 3087 1 76 3088 1 76 3089 1 76 3097 1 76 3098 1 76 3099 1 76 3100 1 76 3101 1 76 3107 1 76 3111 1 76 3114 1 76 3116 1 76 3117 1 76 3141 1 76 3144 1 76 3146 1 76 3147 1 76 3150 1 76 3152 1 76 3153 1 76 3155 1 76 3156 1 76 3157 1 76 3176 1 76 3179 1 76 3181 1 76 3182 1 76 3185 1 76 3187 1 76 3188 1 76 3190 1 76 3191 1 76 3192 1 76 3210 1 76 3212 1 76 3213 1 76 3215 1 76 3216 1 76 3217 1 76 3219 1 76 3220 1 76 3221 1 76 3222 1 76 3232 1 76 3235 1 76 3237 1 76 3238 1 76 3241 1 76 3243 1 76 3244 1 76 3246 1 76 3247 1 76 3248 1 76 3266 1 76 3268 1 76 3269 1 76 3271 1 76 3272 1 76 3273 1 76 3275 1 76 3276 1 76 3277 1 76 3278 1 76 3287 1 76 3289 1 76 3290 1 76 3292 1 76 3293 1 76 3294 1 76 3296 1 76 3297 1 76 3298 1 76 3299 1 76 3307 1 76 3308 1 76 3309 1 76 3310 1 76 3311 1 76 3316 1 76 3319 1 76 3321 1 76 3322 1 76 3325 1 76 3327 1 76 3328 1 76 3330 1 76 3331 1 76 3332 1 76 3350 1 76 3352 1 76 3353 1 76 3355 1 76 3356 1 76 3357 1 76 3359 1 76 3360 1 76 3361 1 76 3362 1 76 3371 1 76 3373 1 76 3374 1 76 3376 1 76 3377 1 76 3378 1 76 3380 1 76 3381 1 76 3382 1 76 3383 1 76 3391 1 76 3392 1 76 3393 1 76 3394 1 76 3395 1 76 3399 1 76 3401 1 76 3402 1 76 3404 1 76 3405 1 76 3406 1 76 3408 1 76 3409 1 76 3410 1 76 3411 1 76 3419 1 76 3420 1 76 3421 1 76 3422 1 76 3423 1 76 3426 1 76 3427 1 76 3428 1 76 3429 1 76 3430 1 76 3432 1 77 22 1 77 50 1 77 71 1 77 86 1 77 101 1 77 102 1 77 103 1 77 104 1 77 134 1 77 155 1 77 170 1 77 185 1 77 186 1 77 187 1 77 188 1 77 211 1 77 226 1 77 241 1 77 242 1 77 243 1 77 244 1 77 261 1 77 276 1 77 277 1 77 278 1 77 279 1 77 296 1 77 297 1 77 298 1 77 299 1 77 316 1 77 317 1 77 318 1 77 319 1 77 320 1 77 321 1 77 344 1 77 365 1 77 380 1 77 395 1 77 396 1 77 397 1 77 398 1 77 421 1 77 436 1 77 451 1 77 452 1 77 453 1 77 454 1 77 471 1 77 486 1 77 487 1 77 488 1 77 489 1 77 506 1 77 507 1 77 508 1 77 509 1 77 526 1 77 527 1 77 528 1 77 529 1 77 530 1 77 531 1 77 547 1 77 562 1 77 577 1 77 578 1 77 579 1 77 580 1 77 597 1 77 612 1 77 613 1 77 614 1 77 615 1 77 632 1 77 633 1 77 634 1 77 635 1 77 652 1 77 653 1 77 654 1 77 655 1 77 656 1 77 657 1 77 667 1 77 682 1 77 683 1 77 684 1 77 685 1 77 702 1 77 703 1 77 704 1 77 705 1 77 722 1 77 723 1 77 724 1 77 725 1 77 726 1 77 727 1 77 737 1 77 738 1 77 739 1 77 740 1 77 757 1 77 758 1 77 759 1 77 760 1 77 761 1 77 762 1 77 772 1 77 773 1 77 774 1 77 775 1 77 776 1 77 777 1 77 787 1 77 788 1 77 789 1 77 790 1 77 806 1 77 827 1 77 842 1 77 857 1 77 858 1 77 859 1 77 860 1 77 883 1 77 898 1 77 913 1 77 914 1 77 915 1 77 916 1 77 933 1 77 948 1 77 949 1 77 950 1 77 951 1 77 968 1 77 969 1 77 970 1 77 971 1 77 988 1 77 989 1 77 990 1 77 991 1 77 992 1 77 993 1 77 1009 1 77 1024 1 77 1039 1 77 1040 1 77 1041 1 77 1042 1 77 1059 1 77 1074 1 77 1075 1 77 1076 1 77 1077 1 77 1094 1 77 1095 1 77 1096 1 77 1097 1 77 1114 1 77 1115 1 77 1116 1 77 1117 1 77 1118 1 77 1119 1 77 1129 1 77 1144 1 77 1145 1 77 1146 1 77 1147 1 77 1164 1 77 1165 1 77 1166 1 77 1167 1 77 1184 1 77 1185 1 77 1186 1 77 1187 1 77 1188 1 77 1189 1 77 1199 1 77 1200 1 77 1201 1 77 1202 1 77 1219 1 77 1220 1 77 1221 1 77 1222 1 77 1223 1 77 1224 1 77 1234 1 77 1235 1 77 1236 1 77 1237 1 77 1238 1 77 1239 1 77 1249 1 77 1250 1 77 1251 1 77 1252 1 77 1261 1 77 1276 1 77 1291 1 77 1292 1 77 1293 1 77 1294 1 77 1311 1 77 1326 1 77 1327 1 77 1328 1 77 1329 1 77 1346 1 77 1347 1 77 1348 1 77 1349 1 77 1366 1 77 1367 1 77 1368 1 77 1369 1 77 1370 1 77 1371 1 77 1381 1 77 1396 1 77 1397 1 77 1398 1 77 1399 1 77 1416 1 77 1417 1 77 1418 1 77 1419 1 77 1436 1 77 1437 1 77 1438 1 77 1439 1 77 1440 1 77 1441 1 77 1451 1 77 1452 1 77 1453 1 77 1454 1 77 1471 1 77 1472 1 77 1473 1 77 1474 1 77 1475 1 77 1476 1 77 1486 1 77 1487 1 77 1488 1 77 1489 1 77 1490 1 77 1491 1 77 1501 1 77 1502 1 77 1503 1 77 1504 1 77 1507 1 77 1522 1 77 1523 1 77 1524 1 77 1525 1 77 1542 1 77 1543 1 77 1544 1 77 1545 1 77 1562 1 77 1563 1 77 1564 1 77 1565 1 77 1566 1 77 1567 1 77 1577 1 77 1578 1 77 1579 1 77 1580 1 77 1597 1 77 1598 1 77 1599 1 77 1600 1 77 1601 1 77 1602 1 77 1612 1 77 1613 1 77 1614 1 77 1615 1 77 1616 1 77 1617 1 77 1627 1 77 1628 1 77 1629 1 77 1630 1 77 1633 1 77 1634 1 77 1635 1 77 1636 1 77 1653 1 77 1654 1 77 1655 1 77 1656 1 77 1657 1 77 1658 1 77 1668 1 77 1669 1 77 1670 1 77 1671 1 77 1672 1 77 1673 1 77 1683 1 77 1684 1 77 1685 1 77 1686 1 77 1689 1 77 1690 1 77 1691 1 77 1692 1 77 1693 1 77 1694 1 77 1704 1 77 1705 1 77 1706 1 77 1707 1 77 1710 1 77 1711 1 77 1712 1 77 1713 1 77 1716 1 77 1730 1 77 1751 1 77 1766 1 77 1781 1 77 1782 1 77 1783 1 77 1784 1 77 1807 1 77 1822 1 77 1837 1 77 1838 1 77 1839 1 77 1840 1 77 1857 1 77 1872 1 77 1873 1 77 1874 1 77 1875 1 77 1892 1 77 1893 1 77 1894 1 77 1895 1 77 1912 1 77 1913 1 77 1914 1 77 1915 1 77 1916 1 77 1917 1 77 1933 1 77 1948 1 77 1963 1 77 1964 1 77 1965 1 77 1966 1 77 1983 1 77 1998 1 77 1999 1 77 2000 1 77 2001 1 77 2018 1 77 2019 1 77 2020 1 77 2021 1 77 2038 1 77 2039 1 77 2040 1 77 2041 1 77 2042 1 77 2043 1 77 2053 1 77 2068 1 77 2069 1 77 2070 1 77 2071 1 77 2088 1 77 2089 1 77 2090 1 77 2091 1 77 2108 1 77 2109 1 77 2110 1 77 2111 1 77 2112 1 77 2113 1 77 2123 1 77 2124 1 77 2125 1 77 2126 1 77 2143 1 77 2144 1 77 2145 1 77 2146 1 77 2147 1 77 2148 1 77 2158 1 77 2159 1 77 2160 1 77 2161 1 77 2162 1 77 2163 1 77 2173 1 77 2174 1 77 2175 1 77 2176 1 77 2185 1 77 2200 1 77 2215 1 77 2216 1 77 2217 1 77 2218 1 77 2235 1 77 2250 1 77 2251 1 77 2252 1 77 2253 1 77 2270 1 77 2271 1 77 2272 1 77 2273 1 77 2290 1 77 2291 1 77 2292 1 77 2293 1 77 2294 1 77 2295 1 77 2305 1 77 2320 1 77 2321 1 77 2322 1 77 2323 1 77 2340 1 77 2341 1 77 2342 1 77 2343 1 77 2360 1 77 2361 1 77 2362 1 77 2363 1 77 2364 1 77 2365 1 77 2375 1 77 2376 1 77 2377 1 77 2378 1 77 2395 1 77 2396 1 77 2397 1 77 2398 1 77 2399 1 77 2400 1 77 2410 1 77 2411 1 77 2412 1 77 2413 1 77 2414 1 77 2415 1 77 2425 1 77 2426 1 77 2427 1 77 2428 1 77 2431 1 77 2446 1 77 2447 1 77 2448 1 77 2449 1 77 2466 1 77 2467 1 77 2468 1 77 2469 1 77 2486 1 77 2487 1 77 2488 1 77 2489 1 77 2490 1 77 2491 1 77 2501 1 77 2502 1 77 2503 1 77 2504 1 77 2521 1 77 2522 1 77 2523 1 77 2524 1 77 2525 1 77 2526 1 77 2536 1 77 2537 1 77 2538 1 77 2539 1 77 2540 1 77 2541 1 77 2551 1 77 2552 1 77 2553 1 77 2554 1 77 2557 1 77 2558 1 77 2559 1 77 2560 1 77 2577 1 77 2578 1 77 2579 1 77 2580 1 77 2581 1 77 2582 1 77 2592 1 77 2593 1 77 2594 1 77 2595 1 77 2596 1 77 2597 1 77 2607 1 77 2608 1 77 2609 1 77 2610 1 77 2613 1 77 2614 1 77 2615 1 77 2616 1 77 2617 1 77 2618 1 77 2628 1 77 2629 1 77 2630 1 77 2631 1 77 2634 1 77 2635 1 77 2636 1 77 2637 1 77 2640 1 77 2647 1 77 2662 1 77 2677 1 77 2678 1 77 2679 1 77 2680 1 77 2697 1 77 2712 1 77 2713 1 77 2714 1 77 2715 1 77 2732 1 77 2733 1 77 2734 1 77 2735 1 77 2752 1 77 2753 1 77 2754 1 77 2755 1 77 2756 1 77 2757 1 77 2767 1 77 2782 1 77 2783 1 77 2784 1 77 2785 1 77 2802 1 77 2803 1 77 2804 1 77 2805 1 77 2822 1 77 2823 1 77 2824 1 77 2825 1 77 2826 1 77 2827 1 77 2837 1 77 2838 1 77 2839 1 77 2840 1 77 2857 1 77 2858 1 77 2859 1 77 2860 1 77 2861 1 77 2862 1 77 2872 1 77 2873 1 77 2874 1 77 2875 1 77 2876 1 77 2877 1 77 2887 1 77 2888 1 77 2889 1 77 2890 1 77 2893 1 77 2908 1 77 2909 1 77 2910 1 77 2911 1 77 2928 1 77 2929 1 77 2930 1 77 2931 1 77 2948 1 77 2949 1 77 2950 1 77 2951 1 77 2952 1 77 2953 1 77 2963 1 77 2964 1 77 2965 1 77 2966 1 77 2983 1 77 2984 1 77 2985 1 77 2986 1 77 2987 1 77 2988 1 77 2998 1 77 2999 1 77 3000 1 77 3001 1 77 3002 1 77 3003 1 77 3013 1 77 3014 1 77 3015 1 77 3016 1 77 3019 1 77 3020 1 77 3021 1 77 3022 1 77 3039 1 77 3040 1 77 3041 1 77 3042 1 77 3043 1 77 3044 1 77 3054 1 77 3055 1 77 3056 1 77 3057 1 77 3058 1 77 3059 1 77 3069 1 77 3070 1 77 3071 1 77 3072 1 77 3075 1 77 3076 1 77 3077 1 77 3078 1 77 3079 1 77 3080 1 77 3090 1 77 3091 1 77 3092 1 77 3093 1 77 3096 1 77 3097 1 77 3098 1 77 3099 1 77 3102 1 77 3103 1 77 3118 1 77 3119 1 77 3120 1 77 3121 1 77 3138 1 77 3139 1 77 3140 1 77 3141 1 77 3158 1 77 3159 1 77 3160 1 77 3161 1 77 3162 1 77 3163 1 77 3173 1 77 3174 1 77 3175 1 77 3176 1 77 3193 1 77 3194 1 77 3195 1 77 3196 1 77 3197 1 77 3198 1 77 3208 1 77 3209 1 77 3210 1 77 3211 1 77 3212 1 77 3213 1 77 3223 1 77 3224 1 77 3225 1 77 3226 1 77 3229 1 77 3230 1 77 3231 1 77 3232 1 77 3249 1 77 3250 1 77 3251 1 77 3252 1 77 3253 1 77 3254 1 77 3264 1 77 3265 1 77 3266 1 77 3267 1 77 3268 1 77 3269 1 77 3279 1 77 3280 1 77 3281 1 77 3282 1 77 3285 1 77 3286 1 77 3287 1 77 3288 1 77 3289 1 77 3290 1 77 3300 1 77 3301 1 77 3302 1 77 3303 1 77 3306 1 77 3307 1 77 3308 1 77 3309 1 77 3312 1 77 3313 1 77 3314 1 77 3315 1 77 3316 1 77 3333 1 77 3334 1 77 3335 1 77 3336 1 77 3337 1 77 3338 1 77 3348 1 77 3349 1 77 3350 1 77 3351 1 77 3352 1 77 3353 1 77 3363 1 77 3364 1 77 3365 1 77 3366 1 77 3369 1 77 3370 1 77 3371 1 77 3372 1 77 3373 1 77 3374 1 77 3384 1 77 3385 1 77 3386 1 77 3387 1 77 3390 1 77 3391 1 77 3392 1 77 3393 1 77 3396 1 77 3397 1 77 3398 1 77 3399 1 77 3400 1 77 3401 1 77 3402 1 77 3412 1 77 3413 1 77 3414 1 77 3415 1 77 3418 1 77 3419 1 77 3420 1 77 3421 1 77 3424 1 77 3425 1 77 3426 1 77 3427 1 77 3428 1 77 3431 1 77 3432 1 78 23 1 78 51 1 78 72 1 78 87 1 78 101 1 78 105 1 78 106 1 78 107 1 78 135 1 78 156 1 78 171 1 78 185 1 78 189 1 78 190 1 78 191 1 78 212 1 78 227 1 78 241 1 78 245 1 78 246 1 78 247 1 78 262 1 78 276 1 78 280 1 78 281 1 78 282 1 78 296 1 78 300 1 78 301 1 78 302 1 78 316 1 78 317 1 78 318 1 78 322 1 78 323 1 78 324 1 78 345 1 78 366 1 78 381 1 78 395 1 78 399 1 78 400 1 78 401 1 78 422 1 78 437 1 78 451 1 78 455 1 78 456 1 78 457 1 78 472 1 78 486 1 78 490 1 78 491 1 78 492 1 78 506 1 78 510 1 78 511 1 78 512 1 78 526 1 78 527 1 78 528 1 78 532 1 78 533 1 78 534 1 78 548 1 78 563 1 78 577 1 78 581 1 78 582 1 78 583 1 78 598 1 78 612 1 78 616 1 78 617 1 78 618 1 78 632 1 78 636 1 78 637 1 78 638 1 78 652 1 78 653 1 78 654 1 78 658 1 78 659 1 78 660 1 78 668 1 78 682 1 78 686 1 78 687 1 78 688 1 78 702 1 78 706 1 78 707 1 78 708 1 78 722 1 78 723 1 78 724 1 78 728 1 78 729 1 78 730 1 78 737 1 78 741 1 78 742 1 78 743 1 78 757 1 78 758 1 78 759 1 78 763 1 78 764 1 78 765 1 78 772 1 78 773 1 78 774 1 78 778 1 78 779 1 78 780 1 78 787 1 78 788 1 78 789 1 78 791 1 78 807 1 78 828 1 78 843 1 78 857 1 78 861 1 78 862 1 78 863 1 78 884 1 78 899 1 78 913 1 78 917 1 78 918 1 78 919 1 78 934 1 78 948 1 78 952 1 78 953 1 78 954 1 78 968 1 78 972 1 78 973 1 78 974 1 78 988 1 78 989 1 78 990 1 78 994 1 78 995 1 78 996 1 78 1010 1 78 1025 1 78 1039 1 78 1043 1 78 1044 1 78 1045 1 78 1060 1 78 1074 1 78 1078 1 78 1079 1 78 1080 1 78 1094 1 78 1098 1 78 1099 1 78 1100 1 78 1114 1 78 1115 1 78 1116 1 78 1120 1 78 1121 1 78 1122 1 78 1130 1 78 1144 1 78 1148 1 78 1149 1 78 1150 1 78 1164 1 78 1168 1 78 1169 1 78 1170 1 78 1184 1 78 1185 1 78 1186 1 78 1190 1 78 1191 1 78 1192 1 78 1199 1 78 1203 1 78 1204 1 78 1205 1 78 1219 1 78 1220 1 78 1221 1 78 1225 1 78 1226 1 78 1227 1 78 1234 1 78 1235 1 78 1236 1 78 1240 1 78 1241 1 78 1242 1 78 1249 1 78 1250 1 78 1251 1 78 1253 1 78 1262 1 78 1277 1 78 1291 1 78 1295 1 78 1296 1 78 1297 1 78 1312 1 78 1326 1 78 1330 1 78 1331 1 78 1332 1 78 1346 1 78 1350 1 78 1351 1 78 1352 1 78 1366 1 78 1367 1 78 1368 1 78 1372 1 78 1373 1 78 1374 1 78 1382 1 78 1396 1 78 1400 1 78 1401 1 78 1402 1 78 1416 1 78 1420 1 78 1421 1 78 1422 1 78 1436 1 78 1437 1 78 1438 1 78 1442 1 78 1443 1 78 1444 1 78 1451 1 78 1455 1 78 1456 1 78 1457 1 78 1471 1 78 1472 1 78 1473 1 78 1477 1 78 1478 1 78 1479 1 78 1486 1 78 1487 1 78 1488 1 78 1492 1 78 1493 1 78 1494 1 78 1501 1 78 1502 1 78 1503 1 78 1505 1 78 1508 1 78 1522 1 78 1526 1 78 1527 1 78 1528 1 78 1542 1 78 1546 1 78 1547 1 78 1548 1 78 1562 1 78 1563 1 78 1564 1 78 1568 1 78 1569 1 78 1570 1 78 1577 1 78 1581 1 78 1582 1 78 1583 1 78 1597 1 78 1598 1 78 1599 1 78 1603 1 78 1604 1 78 1605 1 78 1612 1 78 1613 1 78 1614 1 78 1618 1 78 1619 1 78 1620 1 78 1627 1 78 1628 1 78 1629 1 78 1631 1 78 1633 1 78 1637 1 78 1638 1 78 1639 1 78 1653 1 78 1654 1 78 1655 1 78 1659 1 78 1660 1 78 1661 1 78 1668 1 78 1669 1 78 1670 1 78 1674 1 78 1675 1 78 1676 1 78 1683 1 78 1684 1 78 1685 1 78 1687 1 78 1689 1 78 1690 1 78 1691 1 78 1695 1 78 1696 1 78 1697 1 78 1704 1 78 1705 1 78 1706 1 78 1708 1 78 1710 1 78 1711 1 78 1712 1 78 1714 1 78 1716 1 78 1731 1 78 1752 1 78 1767 1 78 1781 1 78 1785 1 78 1786 1 78 1787 1 78 1808 1 78 1823 1 78 1837 1 78 1841 1 78 1842 1 78 1843 1 78 1858 1 78 1872 1 78 1876 1 78 1877 1 78 1878 1 78 1892 1 78 1896 1 78 1897 1 78 1898 1 78 1912 1 78 1913 1 78 1914 1 78 1918 1 78 1919 1 78 1920 1 78 1934 1 78 1949 1 78 1963 1 78 1967 1 78 1968 1 78 1969 1 78 1984 1 78 1998 1 78 2002 1 78 2003 1 78 2004 1 78 2018 1 78 2022 1 78 2023 1 78 2024 1 78 2038 1 78 2039 1 78 2040 1 78 2044 1 78 2045 1 78 2046 1 78 2054 1 78 2068 1 78 2072 1 78 2073 1 78 2074 1 78 2088 1 78 2092 1 78 2093 1 78 2094 1 78 2108 1 78 2109 1 78 2110 1 78 2114 1 78 2115 1 78 2116 1 78 2123 1 78 2127 1 78 2128 1 78 2129 1 78 2143 1 78 2144 1 78 2145 1 78 2149 1 78 2150 1 78 2151 1 78 2158 1 78 2159 1 78 2160 1 78 2164 1 78 2165 1 78 2166 1 78 2173 1 78 2174 1 78 2175 1 78 2177 1 78 2186 1 78 2201 1 78 2215 1 78 2219 1 78 2220 1 78 2221 1 78 2236 1 78 2250 1 78 2254 1 78 2255 1 78 2256 1 78 2270 1 78 2274 1 78 2275 1 78 2276 1 78 2290 1 78 2291 1 78 2292 1 78 2296 1 78 2297 1 78 2298 1 78 2306 1 78 2320 1 78 2324 1 78 2325 1 78 2326 1 78 2340 1 78 2344 1 78 2345 1 78 2346 1 78 2360 1 78 2361 1 78 2362 1 78 2366 1 78 2367 1 78 2368 1 78 2375 1 78 2379 1 78 2380 1 78 2381 1 78 2395 1 78 2396 1 78 2397 1 78 2401 1 78 2402 1 78 2403 1 78 2410 1 78 2411 1 78 2412 1 78 2416 1 78 2417 1 78 2418 1 78 2425 1 78 2426 1 78 2427 1 78 2429 1 78 2432 1 78 2446 1 78 2450 1 78 2451 1 78 2452 1 78 2466 1 78 2470 1 78 2471 1 78 2472 1 78 2486 1 78 2487 1 78 2488 1 78 2492 1 78 2493 1 78 2494 1 78 2501 1 78 2505 1 78 2506 1 78 2507 1 78 2521 1 78 2522 1 78 2523 1 78 2527 1 78 2528 1 78 2529 1 78 2536 1 78 2537 1 78 2538 1 78 2542 1 78 2543 1 78 2544 1 78 2551 1 78 2552 1 78 2553 1 78 2555 1 78 2557 1 78 2561 1 78 2562 1 78 2563 1 78 2577 1 78 2578 1 78 2579 1 78 2583 1 78 2584 1 78 2585 1 78 2592 1 78 2593 1 78 2594 1 78 2598 1 78 2599 1 78 2600 1 78 2607 1 78 2608 1 78 2609 1 78 2611 1 78 2613 1 78 2614 1 78 2615 1 78 2619 1 78 2620 1 78 2621 1 78 2628 1 78 2629 1 78 2630 1 78 2632 1 78 2634 1 78 2635 1 78 2636 1 78 2638 1 78 2640 1 78 2648 1 78 2663 1 78 2677 1 78 2681 1 78 2682 1 78 2683 1 78 2698 1 78 2712 1 78 2716 1 78 2717 1 78 2718 1 78 2732 1 78 2736 1 78 2737 1 78 2738 1 78 2752 1 78 2753 1 78 2754 1 78 2758 1 78 2759 1 78 2760 1 78 2768 1 78 2782 1 78 2786 1 78 2787 1 78 2788 1 78 2802 1 78 2806 1 78 2807 1 78 2808 1 78 2822 1 78 2823 1 78 2824 1 78 2828 1 78 2829 1 78 2830 1 78 2837 1 78 2841 1 78 2842 1 78 2843 1 78 2857 1 78 2858 1 78 2859 1 78 2863 1 78 2864 1 78 2865 1 78 2872 1 78 2873 1 78 2874 1 78 2878 1 78 2879 1 78 2880 1 78 2887 1 78 2888 1 78 2889 1 78 2891 1 78 2894 1 78 2908 1 78 2912 1 78 2913 1 78 2914 1 78 2928 1 78 2932 1 78 2933 1 78 2934 1 78 2948 1 78 2949 1 78 2950 1 78 2954 1 78 2955 1 78 2956 1 78 2963 1 78 2967 1 78 2968 1 78 2969 1 78 2983 1 78 2984 1 78 2985 1 78 2989 1 78 2990 1 78 2991 1 78 2998 1 78 2999 1 78 3000 1 78 3004 1 78 3005 1 78 3006 1 78 3013 1 78 3014 1 78 3015 1 78 3017 1 78 3019 1 78 3023 1 78 3024 1 78 3025 1 78 3039 1 78 3040 1 78 3041 1 78 3045 1 78 3046 1 78 3047 1 78 3054 1 78 3055 1 78 3056 1 78 3060 1 78 3061 1 78 3062 1 78 3069 1 78 3070 1 78 3071 1 78 3073 1 78 3075 1 78 3076 1 78 3077 1 78 3081 1 78 3082 1 78 3083 1 78 3090 1 78 3091 1 78 3092 1 78 3094 1 78 3096 1 78 3097 1 78 3098 1 78 3100 1 78 3102 1 78 3104 1 78 3118 1 78 3122 1 78 3123 1 78 3124 1 78 3138 1 78 3142 1 78 3143 1 78 3144 1 78 3158 1 78 3159 1 78 3160 1 78 3164 1 78 3165 1 78 3166 1 78 3173 1 78 3177 1 78 3178 1 78 3179 1 78 3193 1 78 3194 1 78 3195 1 78 3199 1 78 3200 1 78 3201 1 78 3208 1 78 3209 1 78 3210 1 78 3214 1 78 3215 1 78 3216 1 78 3223 1 78 3224 1 78 3225 1 78 3227 1 78 3229 1 78 3233 1 78 3234 1 78 3235 1 78 3249 1 78 3250 1 78 3251 1 78 3255 1 78 3256 1 78 3257 1 78 3264 1 78 3265 1 78 3266 1 78 3270 1 78 3271 1 78 3272 1 78 3279 1 78 3280 1 78 3281 1 78 3283 1 78 3285 1 78 3286 1 78 3287 1 78 3291 1 78 3292 1 78 3293 1 78 3300 1 78 3301 1 78 3302 1 78 3304 1 78 3306 1 78 3307 1 78 3308 1 78 3310 1 78 3312 1 78 3313 1 78 3317 1 78 3318 1 78 3319 1 78 3333 1 78 3334 1 78 3335 1 78 3339 1 78 3340 1 78 3341 1 78 3348 1 78 3349 1 78 3350 1 78 3354 1 78 3355 1 78 3356 1 78 3363 1 78 3364 1 78 3365 1 78 3367 1 78 3369 1 78 3370 1 78 3371 1 78 3375 1 78 3376 1 78 3377 1 78 3384 1 78 3385 1 78 3386 1 78 3388 1 78 3390 1 78 3391 1 78 3392 1 78 3394 1 78 3396 1 78 3397 1 78 3398 1 78 3399 1 78 3403 1 78 3404 1 78 3405 1 78 3412 1 78 3413 1 78 3414 1 78 3416 1 78 3418 1 78 3419 1 78 3420 1 78 3422 1 78 3424 1 78 3425 1 78 3426 1 78 3427 1 78 3429 1 78 3431 1 78 3432 1 79 24 1 79 52 1 79 73 1 79 88 1 79 102 1 79 105 1 79 108 1 79 109 1 79 136 1 79 157 1 79 172 1 79 186 1 79 189 1 79 192 1 79 193 1 79 213 1 79 228 1 79 242 1 79 245 1 79 248 1 79 249 1 79 263 1 79 277 1 79 280 1 79 283 1 79 284 1 79 297 1 79 300 1 79 303 1 79 304 1 79 316 1 79 319 1 79 320 1 79 322 1 79 323 1 79 325 1 79 346 1 79 367 1 79 382 1 79 396 1 79 399 1 79 402 1 79 403 1 79 423 1 79 438 1 79 452 1 79 455 1 79 458 1 79 459 1 79 473 1 79 487 1 79 490 1 79 493 1 79 494 1 79 507 1 79 510 1 79 513 1 79 514 1 79 526 1 79 529 1 79 530 1 79 532 1 79 533 1 79 535 1 79 549 1 79 564 1 79 578 1 79 581 1 79 584 1 79 585 1 79 599 1 79 613 1 79 616 1 79 619 1 79 620 1 79 633 1 79 636 1 79 639 1 79 640 1 79 652 1 79 655 1 79 656 1 79 658 1 79 659 1 79 661 1 79 669 1 79 683 1 79 686 1 79 689 1 79 690 1 79 703 1 79 706 1 79 709 1 79 710 1 79 722 1 79 725 1 79 726 1 79 728 1 79 729 1 79 731 1 79 738 1 79 741 1 79 744 1 79 745 1 79 757 1 79 760 1 79 761 1 79 763 1 79 764 1 79 766 1 79 772 1 79 775 1 79 776 1 79 778 1 79 779 1 79 781 1 79 787 1 79 788 1 79 790 1 79 791 1 79 808 1 79 829 1 79 844 1 79 858 1 79 861 1 79 864 1 79 865 1 79 885 1 79 900 1 79 914 1 79 917 1 79 920 1 79 921 1 79 935 1 79 949 1 79 952 1 79 955 1 79 956 1 79 969 1 79 972 1 79 975 1 79 976 1 79 988 1 79 991 1 79 992 1 79 994 1 79 995 1 79 997 1 79 1011 1 79 1026 1 79 1040 1 79 1043 1 79 1046 1 79 1047 1 79 1061 1 79 1075 1 79 1078 1 79 1081 1 79 1082 1 79 1095 1 79 1098 1 79 1101 1 79 1102 1 79 1114 1 79 1117 1 79 1118 1 79 1120 1 79 1121 1 79 1123 1 79 1131 1 79 1145 1 79 1148 1 79 1151 1 79 1152 1 79 1165 1 79 1168 1 79 1171 1 79 1172 1 79 1184 1 79 1187 1 79 1188 1 79 1190 1 79 1191 1 79 1193 1 79 1200 1 79 1203 1 79 1206 1 79 1207 1 79 1219 1 79 1222 1 79 1223 1 79 1225 1 79 1226 1 79 1228 1 79 1234 1 79 1237 1 79 1238 1 79 1240 1 79 1241 1 79 1243 1 79 1249 1 79 1250 1 79 1252 1 79 1253 1 79 1263 1 79 1278 1 79 1292 1 79 1295 1 79 1298 1 79 1299 1 79 1313 1 79 1327 1 79 1330 1 79 1333 1 79 1334 1 79 1347 1 79 1350 1 79 1353 1 79 1354 1 79 1366 1 79 1369 1 79 1370 1 79 1372 1 79 1373 1 79 1375 1 79 1383 1 79 1397 1 79 1400 1 79 1403 1 79 1404 1 79 1417 1 79 1420 1 79 1423 1 79 1424 1 79 1436 1 79 1439 1 79 1440 1 79 1442 1 79 1443 1 79 1445 1 79 1452 1 79 1455 1 79 1458 1 79 1459 1 79 1471 1 79 1474 1 79 1475 1 79 1477 1 79 1478 1 79 1480 1 79 1486 1 79 1489 1 79 1490 1 79 1492 1 79 1493 1 79 1495 1 79 1501 1 79 1502 1 79 1504 1 79 1505 1 79 1509 1 79 1523 1 79 1526 1 79 1529 1 79 1530 1 79 1543 1 79 1546 1 79 1549 1 79 1550 1 79 1562 1 79 1565 1 79 1566 1 79 1568 1 79 1569 1 79 1571 1 79 1578 1 79 1581 1 79 1584 1 79 1585 1 79 1597 1 79 1600 1 79 1601 1 79 1603 1 79 1604 1 79 1606 1 79 1612 1 79 1615 1 79 1616 1 79 1618 1 79 1619 1 79 1621 1 79 1627 1 79 1628 1 79 1630 1 79 1631 1 79 1634 1 79 1637 1 79 1640 1 79 1641 1 79 1653 1 79 1656 1 79 1657 1 79 1659 1 79 1660 1 79 1662 1 79 1668 1 79 1671 1 79 1672 1 79 1674 1 79 1675 1 79 1677 1 79 1683 1 79 1684 1 79 1686 1 79 1687 1 79 1689 1 79 1692 1 79 1693 1 79 1695 1 79 1696 1 79 1698 1 79 1704 1 79 1705 1 79 1707 1 79 1708 1 79 1710 1 79 1711 1 79 1713 1 79 1714 1 79 1716 1 79 1732 1 79 1753 1 79 1768 1 79 1782 1 79 1785 1 79 1788 1 79 1789 1 79 1809 1 79 1824 1 79 1838 1 79 1841 1 79 1844 1 79 1845 1 79 1859 1 79 1873 1 79 1876 1 79 1879 1 79 1880 1 79 1893 1 79 1896 1 79 1899 1 79 1900 1 79 1912 1 79 1915 1 79 1916 1 79 1918 1 79 1919 1 79 1921 1 79 1935 1 79 1950 1 79 1964 1 79 1967 1 79 1970 1 79 1971 1 79 1985 1 79 1999 1 79 2002 1 79 2005 1 79 2006 1 79 2019 1 79 2022 1 79 2025 1 79 2026 1 79 2038 1 79 2041 1 79 2042 1 79 2044 1 79 2045 1 79 2047 1 79 2055 1 79 2069 1 79 2072 1 79 2075 1 79 2076 1 79 2089 1 79 2092 1 79 2095 1 79 2096 1 79 2108 1 79 2111 1 79 2112 1 79 2114 1 79 2115 1 79 2117 1 79 2124 1 79 2127 1 79 2130 1 79 2131 1 79 2143 1 79 2146 1 79 2147 1 79 2149 1 79 2150 1 79 2152 1 79 2158 1 79 2161 1 79 2162 1 79 2164 1 79 2165 1 79 2167 1 79 2173 1 79 2174 1 79 2176 1 79 2177 1 79 2187 1 79 2202 1 79 2216 1 79 2219 1 79 2222 1 79 2223 1 79 2237 1 79 2251 1 79 2254 1 79 2257 1 79 2258 1 79 2271 1 79 2274 1 79 2277 1 79 2278 1 79 2290 1 79 2293 1 79 2294 1 79 2296 1 79 2297 1 79 2299 1 79 2307 1 79 2321 1 79 2324 1 79 2327 1 79 2328 1 79 2341 1 79 2344 1 79 2347 1 79 2348 1 79 2360 1 79 2363 1 79 2364 1 79 2366 1 79 2367 1 79 2369 1 79 2376 1 79 2379 1 79 2382 1 79 2383 1 79 2395 1 79 2398 1 79 2399 1 79 2401 1 79 2402 1 79 2404 1 79 2410 1 79 2413 1 79 2414 1 79 2416 1 79 2417 1 79 2419 1 79 2425 1 79 2426 1 79 2428 1 79 2429 1 79 2433 1 79 2447 1 79 2450 1 79 2453 1 79 2454 1 79 2467 1 79 2470 1 79 2473 1 79 2474 1 79 2486 1 79 2489 1 79 2490 1 79 2492 1 79 2493 1 79 2495 1 79 2502 1 79 2505 1 79 2508 1 79 2509 1 79 2521 1 79 2524 1 79 2525 1 79 2527 1 79 2528 1 79 2530 1 79 2536 1 79 2539 1 79 2540 1 79 2542 1 79 2543 1 79 2545 1 79 2551 1 79 2552 1 79 2554 1 79 2555 1 79 2558 1 79 2561 1 79 2564 1 79 2565 1 79 2577 1 79 2580 1 79 2581 1 79 2583 1 79 2584 1 79 2586 1 79 2592 1 79 2595 1 79 2596 1 79 2598 1 79 2599 1 79 2601 1 79 2607 1 79 2608 1 79 2610 1 79 2611 1 79 2613 1 79 2616 1 79 2617 1 79 2619 1 79 2620 1 79 2622 1 79 2628 1 79 2629 1 79 2631 1 79 2632 1 79 2634 1 79 2635 1 79 2637 1 79 2638 1 79 2640 1 79 2649 1 79 2664 1 79 2678 1 79 2681 1 79 2684 1 79 2685 1 79 2699 1 79 2713 1 79 2716 1 79 2719 1 79 2720 1 79 2733 1 79 2736 1 79 2739 1 79 2740 1 79 2752 1 79 2755 1 79 2756 1 79 2758 1 79 2759 1 79 2761 1 79 2769 1 79 2783 1 79 2786 1 79 2789 1 79 2790 1 79 2803 1 79 2806 1 79 2809 1 79 2810 1 79 2822 1 79 2825 1 79 2826 1 79 2828 1 79 2829 1 79 2831 1 79 2838 1 79 2841 1 79 2844 1 79 2845 1 79 2857 1 79 2860 1 79 2861 1 79 2863 1 79 2864 1 79 2866 1 79 2872 1 79 2875 1 79 2876 1 79 2878 1 79 2879 1 79 2881 1 79 2887 1 79 2888 1 79 2890 1 79 2891 1 79 2895 1 79 2909 1 79 2912 1 79 2915 1 79 2916 1 79 2929 1 79 2932 1 79 2935 1 79 2936 1 79 2948 1 79 2951 1 79 2952 1 79 2954 1 79 2955 1 79 2957 1 79 2964 1 79 2967 1 79 2970 1 79 2971 1 79 2983 1 79 2986 1 79 2987 1 79 2989 1 79 2990 1 79 2992 1 79 2998 1 79 3001 1 79 3002 1 79 3004 1 79 3005 1 79 3007 1 79 3013 1 79 3014 1 79 3016 1 79 3017 1 79 3020 1 79 3023 1 79 3026 1 79 3027 1 79 3039 1 79 3042 1 79 3043 1 79 3045 1 79 3046 1 79 3048 1 79 3054 1 79 3057 1 79 3058 1 79 3060 1 79 3061 1 79 3063 1 79 3069 1 79 3070 1 79 3072 1 79 3073 1 79 3075 1 79 3078 1 79 3079 1 79 3081 1 79 3082 1 79 3084 1 79 3090 1 79 3091 1 79 3093 1 79 3094 1 79 3096 1 79 3097 1 79 3099 1 79 3100 1 79 3102 1 79 3105 1 79 3119 1 79 3122 1 79 3125 1 79 3126 1 79 3139 1 79 3142 1 79 3145 1 79 3146 1 79 3158 1 79 3161 1 79 3162 1 79 3164 1 79 3165 1 79 3167 1 79 3174 1 79 3177 1 79 3180 1 79 3181 1 79 3193 1 79 3196 1 79 3197 1 79 3199 1 79 3200 1 79 3202 1 79 3208 1 79 3211 1 79 3212 1 79 3214 1 79 3215 1 79 3217 1 79 3223 1 79 3224 1 79 3226 1 79 3227 1 79 3230 1 79 3233 1 79 3236 1 79 3237 1 79 3249 1 79 3252 1 79 3253 1 79 3255 1 79 3256 1 79 3258 1 79 3264 1 79 3267 1 79 3268 1 79 3270 1 79 3271 1 79 3273 1 79 3279 1 79 3280 1 79 3282 1 79 3283 1 79 3285 1 79 3288 1 79 3289 1 79 3291 1 79 3292 1 79 3294 1 79 3300 1 79 3301 1 79 3303 1 79 3304 1 79 3306 1 79 3307 1 79 3309 1 79 3310 1 79 3312 1 79 3314 1 79 3317 1 79 3320 1 79 3321 1 79 3333 1 79 3336 1 79 3337 1 79 3339 1 79 3340 1 79 3342 1 79 3348 1 79 3351 1 79 3352 1 79 3354 1 79 3355 1 79 3357 1 79 3363 1 79 3364 1 79 3366 1 79 3367 1 79 3369 1 79 3372 1 79 3373 1 79 3375 1 79 3376 1 79 3378 1 79 3384 1 79 3385 1 79 3387 1 79 3388 1 79 3390 1 79 3391 1 79 3393 1 79 3394 1 79 3396 1 79 3397 1 79 3400 1 79 3401 1 79 3403 1 79 3404 1 79 3406 1 79 3412 1 79 3413 1 79 3415 1 79 3416 1 79 3418 1 79 3419 1 79 3421 1 79 3422 1 79 3424 1 79 3425 1 79 3426 1 79 3428 1 79 3429 1 79 3431 1 79 3432 1 80 25 1 80 53 1 80 74 1 80 89 1 80 103 1 80 106 1 80 108 1 80 110 1 80 137 1 80 158 1 80 173 1 80 187 1 80 190 1 80 192 1 80 194 1 80 214 1 80 229 1 80 243 1 80 246 1 80 248 1 80 250 1 80 264 1 80 278 1 80 281 1 80 283 1 80 285 1 80 298 1 80 301 1 80 303 1 80 305 1 80 317 1 80 319 1 80 321 1 80 322 1 80 324 1 80 325 1 80 347 1 80 368 1 80 383 1 80 397 1 80 400 1 80 402 1 80 404 1 80 424 1 80 439 1 80 453 1 80 456 1 80 458 1 80 460 1 80 474 1 80 488 1 80 491 1 80 493 1 80 495 1 80 508 1 80 511 1 80 513 1 80 515 1 80 527 1 80 529 1 80 531 1 80 532 1 80 534 1 80 535 1 80 550 1 80 565 1 80 579 1 80 582 1 80 584 1 80 586 1 80 600 1 80 614 1 80 617 1 80 619 1 80 621 1 80 634 1 80 637 1 80 639 1 80 641 1 80 653 1 80 655 1 80 657 1 80 658 1 80 660 1 80 661 1 80 670 1 80 684 1 80 687 1 80 689 1 80 691 1 80 704 1 80 707 1 80 709 1 80 711 1 80 723 1 80 725 1 80 727 1 80 728 1 80 730 1 80 731 1 80 739 1 80 742 1 80 744 1 80 746 1 80 758 1 80 760 1 80 762 1 80 763 1 80 765 1 80 766 1 80 773 1 80 775 1 80 777 1 80 778 1 80 780 1 80 781 1 80 787 1 80 789 1 80 790 1 80 791 1 80 809 1 80 830 1 80 845 1 80 859 1 80 862 1 80 864 1 80 866 1 80 886 1 80 901 1 80 915 1 80 918 1 80 920 1 80 922 1 80 936 1 80 950 1 80 953 1 80 955 1 80 957 1 80 970 1 80 973 1 80 975 1 80 977 1 80 989 1 80 991 1 80 993 1 80 994 1 80 996 1 80 997 1 80 1012 1 80 1027 1 80 1041 1 80 1044 1 80 1046 1 80 1048 1 80 1062 1 80 1076 1 80 1079 1 80 1081 1 80 1083 1 80 1096 1 80 1099 1 80 1101 1 80 1103 1 80 1115 1 80 1117 1 80 1119 1 80 1120 1 80 1122 1 80 1123 1 80 1132 1 80 1146 1 80 1149 1 80 1151 1 80 1153 1 80 1166 1 80 1169 1 80 1171 1 80 1173 1 80 1185 1 80 1187 1 80 1189 1 80 1190 1 80 1192 1 80 1193 1 80 1201 1 80 1204 1 80 1206 1 80 1208 1 80 1220 1 80 1222 1 80 1224 1 80 1225 1 80 1227 1 80 1228 1 80 1235 1 80 1237 1 80 1239 1 80 1240 1 80 1242 1 80 1243 1 80 1249 1 80 1251 1 80 1252 1 80 1253 1 80 1264 1 80 1279 1 80 1293 1 80 1296 1 80 1298 1 80 1300 1 80 1314 1 80 1328 1 80 1331 1 80 1333 1 80 1335 1 80 1348 1 80 1351 1 80 1353 1 80 1355 1 80 1367 1 80 1369 1 80 1371 1 80 1372 1 80 1374 1 80 1375 1 80 1384 1 80 1398 1 80 1401 1 80 1403 1 80 1405 1 80 1418 1 80 1421 1 80 1423 1 80 1425 1 80 1437 1 80 1439 1 80 1441 1 80 1442 1 80 1444 1 80 1445 1 80 1453 1 80 1456 1 80 1458 1 80 1460 1 80 1472 1 80 1474 1 80 1476 1 80 1477 1 80 1479 1 80 1480 1 80 1487 1 80 1489 1 80 1491 1 80 1492 1 80 1494 1 80 1495 1 80 1501 1 80 1503 1 80 1504 1 80 1505 1 80 1510 1 80 1524 1 80 1527 1 80 1529 1 80 1531 1 80 1544 1 80 1547 1 80 1549 1 80 1551 1 80 1563 1 80 1565 1 80 1567 1 80 1568 1 80 1570 1 80 1571 1 80 1579 1 80 1582 1 80 1584 1 80 1586 1 80 1598 1 80 1600 1 80 1602 1 80 1603 1 80 1605 1 80 1606 1 80 1613 1 80 1615 1 80 1617 1 80 1618 1 80 1620 1 80 1621 1 80 1627 1 80 1629 1 80 1630 1 80 1631 1 80 1635 1 80 1638 1 80 1640 1 80 1642 1 80 1654 1 80 1656 1 80 1658 1 80 1659 1 80 1661 1 80 1662 1 80 1669 1 80 1671 1 80 1673 1 80 1674 1 80 1676 1 80 1677 1 80 1683 1 80 1685 1 80 1686 1 80 1687 1 80 1690 1 80 1692 1 80 1694 1 80 1695 1 80 1697 1 80 1698 1 80 1704 1 80 1706 1 80 1707 1 80 1708 1 80 1710 1 80 1712 1 80 1713 1 80 1714 1 80 1716 1 80 1733 1 80 1754 1 80 1769 1 80 1783 1 80 1786 1 80 1788 1 80 1790 1 80 1810 1 80 1825 1 80 1839 1 80 1842 1 80 1844 1 80 1846 1 80 1860 1 80 1874 1 80 1877 1 80 1879 1 80 1881 1 80 1894 1 80 1897 1 80 1899 1 80 1901 1 80 1913 1 80 1915 1 80 1917 1 80 1918 1 80 1920 1 80 1921 1 80 1936 1 80 1951 1 80 1965 1 80 1968 1 80 1970 1 80 1972 1 80 1986 1 80 2000 1 80 2003 1 80 2005 1 80 2007 1 80 2020 1 80 2023 1 80 2025 1 80 2027 1 80 2039 1 80 2041 1 80 2043 1 80 2044 1 80 2046 1 80 2047 1 80 2056 1 80 2070 1 80 2073 1 80 2075 1 80 2077 1 80 2090 1 80 2093 1 80 2095 1 80 2097 1 80 2109 1 80 2111 1 80 2113 1 80 2114 1 80 2116 1 80 2117 1 80 2125 1 80 2128 1 80 2130 1 80 2132 1 80 2144 1 80 2146 1 80 2148 1 80 2149 1 80 2151 1 80 2152 1 80 2159 1 80 2161 1 80 2163 1 80 2164 1 80 2166 1 80 2167 1 80 2173 1 80 2175 1 80 2176 1 80 2177 1 80 2188 1 80 2203 1 80 2217 1 80 2220 1 80 2222 1 80 2224 1 80 2238 1 80 2252 1 80 2255 1 80 2257 1 80 2259 1 80 2272 1 80 2275 1 80 2277 1 80 2279 1 80 2291 1 80 2293 1 80 2295 1 80 2296 1 80 2298 1 80 2299 1 80 2308 1 80 2322 1 80 2325 1 80 2327 1 80 2329 1 80 2342 1 80 2345 1 80 2347 1 80 2349 1 80 2361 1 80 2363 1 80 2365 1 80 2366 1 80 2368 1 80 2369 1 80 2377 1 80 2380 1 80 2382 1 80 2384 1 80 2396 1 80 2398 1 80 2400 1 80 2401 1 80 2403 1 80 2404 1 80 2411 1 80 2413 1 80 2415 1 80 2416 1 80 2418 1 80 2419 1 80 2425 1 80 2427 1 80 2428 1 80 2429 1 80 2434 1 80 2448 1 80 2451 1 80 2453 1 80 2455 1 80 2468 1 80 2471 1 80 2473 1 80 2475 1 80 2487 1 80 2489 1 80 2491 1 80 2492 1 80 2494 1 80 2495 1 80 2503 1 80 2506 1 80 2508 1 80 2510 1 80 2522 1 80 2524 1 80 2526 1 80 2527 1 80 2529 1 80 2530 1 80 2537 1 80 2539 1 80 2541 1 80 2542 1 80 2544 1 80 2545 1 80 2551 1 80 2553 1 80 2554 1 80 2555 1 80 2559 1 80 2562 1 80 2564 1 80 2566 1 80 2578 1 80 2580 1 80 2582 1 80 2583 1 80 2585 1 80 2586 1 80 2593 1 80 2595 1 80 2597 1 80 2598 1 80 2600 1 80 2601 1 80 2607 1 80 2609 1 80 2610 1 80 2611 1 80 2614 1 80 2616 1 80 2618 1 80 2619 1 80 2621 1 80 2622 1 80 2628 1 80 2630 1 80 2631 1 80 2632 1 80 2634 1 80 2636 1 80 2637 1 80 2638 1 80 2640 1 80 2650 1 80 2665 1 80 2679 1 80 2682 1 80 2684 1 80 2686 1 80 2700 1 80 2714 1 80 2717 1 80 2719 1 80 2721 1 80 2734 1 80 2737 1 80 2739 1 80 2741 1 80 2753 1 80 2755 1 80 2757 1 80 2758 1 80 2760 1 80 2761 1 80 2770 1 80 2784 1 80 2787 1 80 2789 1 80 2791 1 80 2804 1 80 2807 1 80 2809 1 80 2811 1 80 2823 1 80 2825 1 80 2827 1 80 2828 1 80 2830 1 80 2831 1 80 2839 1 80 2842 1 80 2844 1 80 2846 1 80 2858 1 80 2860 1 80 2862 1 80 2863 1 80 2865 1 80 2866 1 80 2873 1 80 2875 1 80 2877 1 80 2878 1 80 2880 1 80 2881 1 80 2887 1 80 2889 1 80 2890 1 80 2891 1 80 2896 1 80 2910 1 80 2913 1 80 2915 1 80 2917 1 80 2930 1 80 2933 1 80 2935 1 80 2937 1 80 2949 1 80 2951 1 80 2953 1 80 2954 1 80 2956 1 80 2957 1 80 2965 1 80 2968 1 80 2970 1 80 2972 1 80 2984 1 80 2986 1 80 2988 1 80 2989 1 80 2991 1 80 2992 1 80 2999 1 80 3001 1 80 3003 1 80 3004 1 80 3006 1 80 3007 1 80 3013 1 80 3015 1 80 3016 1 80 3017 1 80 3021 1 80 3024 1 80 3026 1 80 3028 1 80 3040 1 80 3042 1 80 3044 1 80 3045 1 80 3047 1 80 3048 1 80 3055 1 80 3057 1 80 3059 1 80 3060 1 80 3062 1 80 3063 1 80 3069 1 80 3071 1 80 3072 1 80 3073 1 80 3076 1 80 3078 1 80 3080 1 80 3081 1 80 3083 1 80 3084 1 80 3090 1 80 3092 1 80 3093 1 80 3094 1 80 3096 1 80 3098 1 80 3099 1 80 3100 1 80 3102 1 80 3106 1 80 3120 1 80 3123 1 80 3125 1 80 3127 1 80 3140 1 80 3143 1 80 3145 1 80 3147 1 80 3159 1 80 3161 1 80 3163 1 80 3164 1 80 3166 1 80 3167 1 80 3175 1 80 3178 1 80 3180 1 80 3182 1 80 3194 1 80 3196 1 80 3198 1 80 3199 1 80 3201 1 80 3202 1 80 3209 1 80 3211 1 80 3213 1 80 3214 1 80 3216 1 80 3217 1 80 3223 1 80 3225 1 80 3226 1 80 3227 1 80 3231 1 80 3234 1 80 3236 1 80 3238 1 80 3250 1 80 3252 1 80 3254 1 80 3255 1 80 3257 1 80 3258 1 80 3265 1 80 3267 1 80 3269 1 80 3270 1 80 3272 1 80 3273 1 80 3279 1 80 3281 1 80 3282 1 80 3283 1 80 3286 1 80 3288 1 80 3290 1 80 3291 1 80 3293 1 80 3294 1 80 3300 1 80 3302 1 80 3303 1 80 3304 1 80 3306 1 80 3308 1 80 3309 1 80 3310 1 80 3312 1 80 3315 1 80 3318 1 80 3320 1 80 3322 1 80 3334 1 80 3336 1 80 3338 1 80 3339 1 80 3341 1 80 3342 1 80 3349 1 80 3351 1 80 3353 1 80 3354 1 80 3356 1 80 3357 1 80 3363 1 80 3365 1 80 3366 1 80 3367 1 80 3370 1 80 3372 1 80 3374 1 80 3375 1 80 3377 1 80 3378 1 80 3384 1 80 3386 1 80 3387 1 80 3388 1 80 3390 1 80 3392 1 80 3393 1 80 3394 1 80 3396 1 80 3398 1 80 3400 1 80 3402 1 80 3403 1 80 3405 1 80 3406 1 80 3412 1 80 3414 1 80 3415 1 80 3416 1 80 3418 1 80 3420 1 80 3421 1 80 3422 1 80 3424 1 80 3425 1 80 3427 1 80 3428 1 80 3429 1 80 3431 1 80 3432 1 81 26 1 81 54 1 81 75 1 81 90 1 81 104 1 81 107 1 81 109 1 81 110 1 81 138 1 81 159 1 81 174 1 81 188 1 81 191 1 81 193 1 81 194 1 81 215 1 81 230 1 81 244 1 81 247 1 81 249 1 81 250 1 81 265 1 81 279 1 81 282 1 81 284 1 81 285 1 81 299 1 81 302 1 81 304 1 81 305 1 81 318 1 81 320 1 81 321 1 81 323 1 81 324 1 81 325 1 81 348 1 81 369 1 81 384 1 81 398 1 81 401 1 81 403 1 81 404 1 81 425 1 81 440 1 81 454 1 81 457 1 81 459 1 81 460 1 81 475 1 81 489 1 81 492 1 81 494 1 81 495 1 81 509 1 81 512 1 81 514 1 81 515 1 81 528 1 81 530 1 81 531 1 81 533 1 81 534 1 81 535 1 81 551 1 81 566 1 81 580 1 81 583 1 81 585 1 81 586 1 81 601 1 81 615 1 81 618 1 81 620 1 81 621 1 81 635 1 81 638 1 81 640 1 81 641 1 81 654 1 81 656 1 81 657 1 81 659 1 81 660 1 81 661 1 81 671 1 81 685 1 81 688 1 81 690 1 81 691 1 81 705 1 81 708 1 81 710 1 81 711 1 81 724 1 81 726 1 81 727 1 81 729 1 81 730 1 81 731 1 81 740 1 81 743 1 81 745 1 81 746 1 81 759 1 81 761 1 81 762 1 81 764 1 81 765 1 81 766 1 81 774 1 81 776 1 81 777 1 81 779 1 81 780 1 81 781 1 81 788 1 81 789 1 81 790 1 81 791 1 81 810 1 81 831 1 81 846 1 81 860 1 81 863 1 81 865 1 81 866 1 81 887 1 81 902 1 81 916 1 81 919 1 81 921 1 81 922 1 81 937 1 81 951 1 81 954 1 81 956 1 81 957 1 81 971 1 81 974 1 81 976 1 81 977 1 81 990 1 81 992 1 81 993 1 81 995 1 81 996 1 81 997 1 81 1013 1 81 1028 1 81 1042 1 81 1045 1 81 1047 1 81 1048 1 81 1063 1 81 1077 1 81 1080 1 81 1082 1 81 1083 1 81 1097 1 81 1100 1 81 1102 1 81 1103 1 81 1116 1 81 1118 1 81 1119 1 81 1121 1 81 1122 1 81 1123 1 81 1133 1 81 1147 1 81 1150 1 81 1152 1 81 1153 1 81 1167 1 81 1170 1 81 1172 1 81 1173 1 81 1186 1 81 1188 1 81 1189 1 81 1191 1 81 1192 1 81 1193 1 81 1202 1 81 1205 1 81 1207 1 81 1208 1 81 1221 1 81 1223 1 81 1224 1 81 1226 1 81 1227 1 81 1228 1 81 1236 1 81 1238 1 81 1239 1 81 1241 1 81 1242 1 81 1243 1 81 1250 1 81 1251 1 81 1252 1 81 1253 1 81 1265 1 81 1280 1 81 1294 1 81 1297 1 81 1299 1 81 1300 1 81 1315 1 81 1329 1 81 1332 1 81 1334 1 81 1335 1 81 1349 1 81 1352 1 81 1354 1 81 1355 1 81 1368 1 81 1370 1 81 1371 1 81 1373 1 81 1374 1 81 1375 1 81 1385 1 81 1399 1 81 1402 1 81 1404 1 81 1405 1 81 1419 1 81 1422 1 81 1424 1 81 1425 1 81 1438 1 81 1440 1 81 1441 1 81 1443 1 81 1444 1 81 1445 1 81 1454 1 81 1457 1 81 1459 1 81 1460 1 81 1473 1 81 1475 1 81 1476 1 81 1478 1 81 1479 1 81 1480 1 81 1488 1 81 1490 1 81 1491 1 81 1493 1 81 1494 1 81 1495 1 81 1502 1 81 1503 1 81 1504 1 81 1505 1 81 1511 1 81 1525 1 81 1528 1 81 1530 1 81 1531 1 81 1545 1 81 1548 1 81 1550 1 81 1551 1 81 1564 1 81 1566 1 81 1567 1 81 1569 1 81 1570 1 81 1571 1 81 1580 1 81 1583 1 81 1585 1 81 1586 1 81 1599 1 81 1601 1 81 1602 1 81 1604 1 81 1605 1 81 1606 1 81 1614 1 81 1616 1 81 1617 1 81 1619 1 81 1620 1 81 1621 1 81 1628 1 81 1629 1 81 1630 1 81 1631 1 81 1636 1 81 1639 1 81 1641 1 81 1642 1 81 1655 1 81 1657 1 81 1658 1 81 1660 1 81 1661 1 81 1662 1 81 1670 1 81 1672 1 81 1673 1 81 1675 1 81 1676 1 81 1677 1 81 1684 1 81 1685 1 81 1686 1 81 1687 1 81 1691 1 81 1693 1 81 1694 1 81 1696 1 81 1697 1 81 1698 1 81 1705 1 81 1706 1 81 1707 1 81 1708 1 81 1711 1 81 1712 1 81 1713 1 81 1714 1 81 1716 1 81 1734 1 81 1755 1 81 1770 1 81 1784 1 81 1787 1 81 1789 1 81 1790 1 81 1811 1 81 1826 1 81 1840 1 81 1843 1 81 1845 1 81 1846 1 81 1861 1 81 1875 1 81 1878 1 81 1880 1 81 1881 1 81 1895 1 81 1898 1 81 1900 1 81 1901 1 81 1914 1 81 1916 1 81 1917 1 81 1919 1 81 1920 1 81 1921 1 81 1937 1 81 1952 1 81 1966 1 81 1969 1 81 1971 1 81 1972 1 81 1987 1 81 2001 1 81 2004 1 81 2006 1 81 2007 1 81 2021 1 81 2024 1 81 2026 1 81 2027 1 81 2040 1 81 2042 1 81 2043 1 81 2045 1 81 2046 1 81 2047 1 81 2057 1 81 2071 1 81 2074 1 81 2076 1 81 2077 1 81 2091 1 81 2094 1 81 2096 1 81 2097 1 81 2110 1 81 2112 1 81 2113 1 81 2115 1 81 2116 1 81 2117 1 81 2126 1 81 2129 1 81 2131 1 81 2132 1 81 2145 1 81 2147 1 81 2148 1 81 2150 1 81 2151 1 81 2152 1 81 2160 1 81 2162 1 81 2163 1 81 2165 1 81 2166 1 81 2167 1 81 2174 1 81 2175 1 81 2176 1 81 2177 1 81 2189 1 81 2204 1 81 2218 1 81 2221 1 81 2223 1 81 2224 1 81 2239 1 81 2253 1 81 2256 1 81 2258 1 81 2259 1 81 2273 1 81 2276 1 81 2278 1 81 2279 1 81 2292 1 81 2294 1 81 2295 1 81 2297 1 81 2298 1 81 2299 1 81 2309 1 81 2323 1 81 2326 1 81 2328 1 81 2329 1 81 2343 1 81 2346 1 81 2348 1 81 2349 1 81 2362 1 81 2364 1 81 2365 1 81 2367 1 81 2368 1 81 2369 1 81 2378 1 81 2381 1 81 2383 1 81 2384 1 81 2397 1 81 2399 1 81 2400 1 81 2402 1 81 2403 1 81 2404 1 81 2412 1 81 2414 1 81 2415 1 81 2417 1 81 2418 1 81 2419 1 81 2426 1 81 2427 1 81 2428 1 81 2429 1 81 2435 1 81 2449 1 81 2452 1 81 2454 1 81 2455 1 81 2469 1 81 2472 1 81 2474 1 81 2475 1 81 2488 1 81 2490 1 81 2491 1 81 2493 1 81 2494 1 81 2495 1 81 2504 1 81 2507 1 81 2509 1 81 2510 1 81 2523 1 81 2525 1 81 2526 1 81 2528 1 81 2529 1 81 2530 1 81 2538 1 81 2540 1 81 2541 1 81 2543 1 81 2544 1 81 2545 1 81 2552 1 81 2553 1 81 2554 1 81 2555 1 81 2560 1 81 2563 1 81 2565 1 81 2566 1 81 2579 1 81 2581 1 81 2582 1 81 2584 1 81 2585 1 81 2586 1 81 2594 1 81 2596 1 81 2597 1 81 2599 1 81 2600 1 81 2601 1 81 2608 1 81 2609 1 81 2610 1 81 2611 1 81 2615 1 81 2617 1 81 2618 1 81 2620 1 81 2621 1 81 2622 1 81 2629 1 81 2630 1 81 2631 1 81 2632 1 81 2635 1 81 2636 1 81 2637 1 81 2638 1 81 2640 1 81 2651 1 81 2666 1 81 2680 1 81 2683 1 81 2685 1 81 2686 1 81 2701 1 81 2715 1 81 2718 1 81 2720 1 81 2721 1 81 2735 1 81 2738 1 81 2740 1 81 2741 1 81 2754 1 81 2756 1 81 2757 1 81 2759 1 81 2760 1 81 2761 1 81 2771 1 81 2785 1 81 2788 1 81 2790 1 81 2791 1 81 2805 1 81 2808 1 81 2810 1 81 2811 1 81 2824 1 81 2826 1 81 2827 1 81 2829 1 81 2830 1 81 2831 1 81 2840 1 81 2843 1 81 2845 1 81 2846 1 81 2859 1 81 2861 1 81 2862 1 81 2864 1 81 2865 1 81 2866 1 81 2874 1 81 2876 1 81 2877 1 81 2879 1 81 2880 1 81 2881 1 81 2888 1 81 2889 1 81 2890 1 81 2891 1 81 2897 1 81 2911 1 81 2914 1 81 2916 1 81 2917 1 81 2931 1 81 2934 1 81 2936 1 81 2937 1 81 2950 1 81 2952 1 81 2953 1 81 2955 1 81 2956 1 81 2957 1 81 2966 1 81 2969 1 81 2971 1 81 2972 1 81 2985 1 81 2987 1 81 2988 1 81 2990 1 81 2991 1 81 2992 1 81 3000 1 81 3002 1 81 3003 1 81 3005 1 81 3006 1 81 3007 1 81 3014 1 81 3015 1 81 3016 1 81 3017 1 81 3022 1 81 3025 1 81 3027 1 81 3028 1 81 3041 1 81 3043 1 81 3044 1 81 3046 1 81 3047 1 81 3048 1 81 3056 1 81 3058 1 81 3059 1 81 3061 1 81 3062 1 81 3063 1 81 3070 1 81 3071 1 81 3072 1 81 3073 1 81 3077 1 81 3079 1 81 3080 1 81 3082 1 81 3083 1 81 3084 1 81 3091 1 81 3092 1 81 3093 1 81 3094 1 81 3097 1 81 3098 1 81 3099 1 81 3100 1 81 3102 1 81 3107 1 81 3121 1 81 3124 1 81 3126 1 81 3127 1 81 3141 1 81 3144 1 81 3146 1 81 3147 1 81 3160 1 81 3162 1 81 3163 1 81 3165 1 81 3166 1 81 3167 1 81 3176 1 81 3179 1 81 3181 1 81 3182 1 81 3195 1 81 3197 1 81 3198 1 81 3200 1 81 3201 1 81 3202 1 81 3210 1 81 3212 1 81 3213 1 81 3215 1 81 3216 1 81 3217 1 81 3224 1 81 3225 1 81 3226 1 81 3227 1 81 3232 1 81 3235 1 81 3237 1 81 3238 1 81 3251 1 81 3253 1 81 3254 1 81 3256 1 81 3257 1 81 3258 1 81 3266 1 81 3268 1 81 3269 1 81 3271 1 81 3272 1 81 3273 1 81 3280 1 81 3281 1 81 3282 1 81 3283 1 81 3287 1 81 3289 1 81 3290 1 81 3292 1 81 3293 1 81 3294 1 81 3301 1 81 3302 1 81 3303 1 81 3304 1 81 3307 1 81 3308 1 81 3309 1 81 3310 1 81 3312 1 81 3316 1 81 3319 1 81 3321 1 81 3322 1 81 3335 1 81 3337 1 81 3338 1 81 3340 1 81 3341 1 81 3342 1 81 3350 1 81 3352 1 81 3353 1 81 3355 1 81 3356 1 81 3357 1 81 3364 1 81 3365 1 81 3366 1 81 3367 1 81 3371 1 81 3373 1 81 3374 1 81 3376 1 81 3377 1 81 3378 1 81 3385 1 81 3386 1 81 3387 1 81 3388 1 81 3391 1 81 3392 1 81 3393 1 81 3394 1 81 3396 1 81 3399 1 81 3401 1 81 3402 1 81 3404 1 81 3405 1 81 3406 1 81 3413 1 81 3414 1 81 3415 1 81 3416 1 81 3419 1 81 3420 1 81 3421 1 81 3422 1 81 3424 1 81 3426 1 81 3427 1 81 3428 1 81 3429 1 81 3431 1 81 3432 1 82 27 1 82 55 1 82 76 1 82 91 1 82 101 1 82 111 1 82 112 1 82 113 1 82 139 1 82 160 1 82 175 1 82 185 1 82 195 1 82 196 1 82 197 1 82 216 1 82 231 1 82 241 1 82 251 1 82 252 1 82 253 1 82 266 1 82 276 1 82 286 1 82 287 1 82 288 1 82 296 1 82 306 1 82 307 1 82 308 1 82 316 1 82 317 1 82 318 1 82 326 1 82 327 1 82 328 1 82 349 1 82 370 1 82 385 1 82 395 1 82 405 1 82 406 1 82 407 1 82 426 1 82 441 1 82 451 1 82 461 1 82 462 1 82 463 1 82 476 1 82 486 1 82 496 1 82 497 1 82 498 1 82 506 1 82 516 1 82 517 1 82 518 1 82 526 1 82 527 1 82 528 1 82 536 1 82 537 1 82 538 1 82 552 1 82 567 1 82 577 1 82 587 1 82 588 1 82 589 1 82 602 1 82 612 1 82 622 1 82 623 1 82 624 1 82 632 1 82 642 1 82 643 1 82 644 1 82 652 1 82 653 1 82 654 1 82 662 1 82 663 1 82 664 1 82 672 1 82 682 1 82 692 1 82 693 1 82 694 1 82 702 1 82 712 1 82 713 1 82 714 1 82 722 1 82 723 1 82 724 1 82 732 1 82 733 1 82 734 1 82 737 1 82 747 1 82 748 1 82 749 1 82 757 1 82 758 1 82 759 1 82 767 1 82 768 1 82 769 1 82 772 1 82 773 1 82 774 1 82 782 1 82 783 1 82 784 1 82 787 1 82 788 1 82 789 1 82 792 1 82 811 1 82 832 1 82 847 1 82 857 1 82 867 1 82 868 1 82 869 1 82 888 1 82 903 1 82 913 1 82 923 1 82 924 1 82 925 1 82 938 1 82 948 1 82 958 1 82 959 1 82 960 1 82 968 1 82 978 1 82 979 1 82 980 1 82 988 1 82 989 1 82 990 1 82 998 1 82 999 1 82 1000 1 82 1014 1 82 1029 1 82 1039 1 82 1049 1 82 1050 1 82 1051 1 82 1064 1 82 1074 1 82 1084 1 82 1085 1 82 1086 1 82 1094 1 82 1104 1 82 1105 1 82 1106 1 82 1114 1 82 1115 1 82 1116 1 82 1124 1 82 1125 1 82 1126 1 82 1134 1 82 1144 1 82 1154 1 82 1155 1 82 1156 1 82 1164 1 82 1174 1 82 1175 1 82 1176 1 82 1184 1 82 1185 1 82 1186 1 82 1194 1 82 1195 1 82 1196 1 82 1199 1 82 1209 1 82 1210 1 82 1211 1 82 1219 1 82 1220 1 82 1221 1 82 1229 1 82 1230 1 82 1231 1 82 1234 1 82 1235 1 82 1236 1 82 1244 1 82 1245 1 82 1246 1 82 1249 1 82 1250 1 82 1251 1 82 1254 1 82 1266 1 82 1281 1 82 1291 1 82 1301 1 82 1302 1 82 1303 1 82 1316 1 82 1326 1 82 1336 1 82 1337 1 82 1338 1 82 1346 1 82 1356 1 82 1357 1 82 1358 1 82 1366 1 82 1367 1 82 1368 1 82 1376 1 82 1377 1 82 1378 1 82 1386 1 82 1396 1 82 1406 1 82 1407 1 82 1408 1 82 1416 1 82 1426 1 82 1427 1 82 1428 1 82 1436 1 82 1437 1 82 1438 1 82 1446 1 82 1447 1 82 1448 1 82 1451 1 82 1461 1 82 1462 1 82 1463 1 82 1471 1 82 1472 1 82 1473 1 82 1481 1 82 1482 1 82 1483 1 82 1486 1 82 1487 1 82 1488 1 82 1496 1 82 1497 1 82 1498 1 82 1501 1 82 1502 1 82 1503 1 82 1506 1 82 1512 1 82 1522 1 82 1532 1 82 1533 1 82 1534 1 82 1542 1 82 1552 1 82 1553 1 82 1554 1 82 1562 1 82 1563 1 82 1564 1 82 1572 1 82 1573 1 82 1574 1 82 1577 1 82 1587 1 82 1588 1 82 1589 1 82 1597 1 82 1598 1 82 1599 1 82 1607 1 82 1608 1 82 1609 1 82 1612 1 82 1613 1 82 1614 1 82 1622 1 82 1623 1 82 1624 1 82 1627 1 82 1628 1 82 1629 1 82 1632 1 82 1633 1 82 1643 1 82 1644 1 82 1645 1 82 1653 1 82 1654 1 82 1655 1 82 1663 1 82 1664 1 82 1665 1 82 1668 1 82 1669 1 82 1670 1 82 1678 1 82 1679 1 82 1680 1 82 1683 1 82 1684 1 82 1685 1 82 1688 1 82 1689 1 82 1690 1 82 1691 1 82 1699 1 82 1700 1 82 1701 1 82 1704 1 82 1705 1 82 1706 1 82 1709 1 82 1710 1 82 1711 1 82 1712 1 82 1715 1 82 1716 1 82 1735 1 82 1756 1 82 1771 1 82 1781 1 82 1791 1 82 1792 1 82 1793 1 82 1812 1 82 1827 1 82 1837 1 82 1847 1 82 1848 1 82 1849 1 82 1862 1 82 1872 1 82 1882 1 82 1883 1 82 1884 1 82 1892 1 82 1902 1 82 1903 1 82 1904 1 82 1912 1 82 1913 1 82 1914 1 82 1922 1 82 1923 1 82 1924 1 82 1938 1 82 1953 1 82 1963 1 82 1973 1 82 1974 1 82 1975 1 82 1988 1 82 1998 1 82 2008 1 82 2009 1 82 2010 1 82 2018 1 82 2028 1 82 2029 1 82 2030 1 82 2038 1 82 2039 1 82 2040 1 82 2048 1 82 2049 1 82 2050 1 82 2058 1 82 2068 1 82 2078 1 82 2079 1 82 2080 1 82 2088 1 82 2098 1 82 2099 1 82 2100 1 82 2108 1 82 2109 1 82 2110 1 82 2118 1 82 2119 1 82 2120 1 82 2123 1 82 2133 1 82 2134 1 82 2135 1 82 2143 1 82 2144 1 82 2145 1 82 2153 1 82 2154 1 82 2155 1 82 2158 1 82 2159 1 82 2160 1 82 2168 1 82 2169 1 82 2170 1 82 2173 1 82 2174 1 82 2175 1 82 2178 1 82 2190 1 82 2205 1 82 2215 1 82 2225 1 82 2226 1 82 2227 1 82 2240 1 82 2250 1 82 2260 1 82 2261 1 82 2262 1 82 2270 1 82 2280 1 82 2281 1 82 2282 1 82 2290 1 82 2291 1 82 2292 1 82 2300 1 82 2301 1 82 2302 1 82 2310 1 82 2320 1 82 2330 1 82 2331 1 82 2332 1 82 2340 1 82 2350 1 82 2351 1 82 2352 1 82 2360 1 82 2361 1 82 2362 1 82 2370 1 82 2371 1 82 2372 1 82 2375 1 82 2385 1 82 2386 1 82 2387 1 82 2395 1 82 2396 1 82 2397 1 82 2405 1 82 2406 1 82 2407 1 82 2410 1 82 2411 1 82 2412 1 82 2420 1 82 2421 1 82 2422 1 82 2425 1 82 2426 1 82 2427 1 82 2430 1 82 2436 1 82 2446 1 82 2456 1 82 2457 1 82 2458 1 82 2466 1 82 2476 1 82 2477 1 82 2478 1 82 2486 1 82 2487 1 82 2488 1 82 2496 1 82 2497 1 82 2498 1 82 2501 1 82 2511 1 82 2512 1 82 2513 1 82 2521 1 82 2522 1 82 2523 1 82 2531 1 82 2532 1 82 2533 1 82 2536 1 82 2537 1 82 2538 1 82 2546 1 82 2547 1 82 2548 1 82 2551 1 82 2552 1 82 2553 1 82 2556 1 82 2557 1 82 2567 1 82 2568 1 82 2569 1 82 2577 1 82 2578 1 82 2579 1 82 2587 1 82 2588 1 82 2589 1 82 2592 1 82 2593 1 82 2594 1 82 2602 1 82 2603 1 82 2604 1 82 2607 1 82 2608 1 82 2609 1 82 2612 1 82 2613 1 82 2614 1 82 2615 1 82 2623 1 82 2624 1 82 2625 1 82 2628 1 82 2629 1 82 2630 1 82 2633 1 82 2634 1 82 2635 1 82 2636 1 82 2639 1 82 2640 1 82 2652 1 82 2667 1 82 2677 1 82 2687 1 82 2688 1 82 2689 1 82 2702 1 82 2712 1 82 2722 1 82 2723 1 82 2724 1 82 2732 1 82 2742 1 82 2743 1 82 2744 1 82 2752 1 82 2753 1 82 2754 1 82 2762 1 82 2763 1 82 2764 1 82 2772 1 82 2782 1 82 2792 1 82 2793 1 82 2794 1 82 2802 1 82 2812 1 82 2813 1 82 2814 1 82 2822 1 82 2823 1 82 2824 1 82 2832 1 82 2833 1 82 2834 1 82 2837 1 82 2847 1 82 2848 1 82 2849 1 82 2857 1 82 2858 1 82 2859 1 82 2867 1 82 2868 1 82 2869 1 82 2872 1 82 2873 1 82 2874 1 82 2882 1 82 2883 1 82 2884 1 82 2887 1 82 2888 1 82 2889 1 82 2892 1 82 2898 1 82 2908 1 82 2918 1 82 2919 1 82 2920 1 82 2928 1 82 2938 1 82 2939 1 82 2940 1 82 2948 1 82 2949 1 82 2950 1 82 2958 1 82 2959 1 82 2960 1 82 2963 1 82 2973 1 82 2974 1 82 2975 1 82 2983 1 82 2984 1 82 2985 1 82 2993 1 82 2994 1 82 2995 1 82 2998 1 82 2999 1 82 3000 1 82 3008 1 82 3009 1 82 3010 1 82 3013 1 82 3014 1 82 3015 1 82 3018 1 82 3019 1 82 3029 1 82 3030 1 82 3031 1 82 3039 1 82 3040 1 82 3041 1 82 3049 1 82 3050 1 82 3051 1 82 3054 1 82 3055 1 82 3056 1 82 3064 1 82 3065 1 82 3066 1 82 3069 1 82 3070 1 82 3071 1 82 3074 1 82 3075 1 82 3076 1 82 3077 1 82 3085 1 82 3086 1 82 3087 1 82 3090 1 82 3091 1 82 3092 1 82 3095 1 82 3096 1 82 3097 1 82 3098 1 82 3101 1 82 3102 1 82 3108 1 82 3118 1 82 3128 1 82 3129 1 82 3130 1 82 3138 1 82 3148 1 82 3149 1 82 3150 1 82 3158 1 82 3159 1 82 3160 1 82 3168 1 82 3169 1 82 3170 1 82 3173 1 82 3183 1 82 3184 1 82 3185 1 82 3193 1 82 3194 1 82 3195 1 82 3203 1 82 3204 1 82 3205 1 82 3208 1 82 3209 1 82 3210 1 82 3218 1 82 3219 1 82 3220 1 82 3223 1 82 3224 1 82 3225 1 82 3228 1 82 3229 1 82 3239 1 82 3240 1 82 3241 1 82 3249 1 82 3250 1 82 3251 1 82 3259 1 82 3260 1 82 3261 1 82 3264 1 82 3265 1 82 3266 1 82 3274 1 82 3275 1 82 3276 1 82 3279 1 82 3280 1 82 3281 1 82 3284 1 82 3285 1 82 3286 1 82 3287 1 82 3295 1 82 3296 1 82 3297 1 82 3300 1 82 3301 1 82 3302 1 82 3305 1 82 3306 1 82 3307 1 82 3308 1 82 3311 1 82 3312 1 82 3313 1 82 3323 1 82 3324 1 82 3325 1 82 3333 1 82 3334 1 82 3335 1 82 3343 1 82 3344 1 82 3345 1 82 3348 1 82 3349 1 82 3350 1 82 3358 1 82 3359 1 82 3360 1 82 3363 1 82 3364 1 82 3365 1 82 3368 1 82 3369 1 82 3370 1 82 3371 1 82 3379 1 82 3380 1 82 3381 1 82 3384 1 82 3385 1 82 3386 1 82 3389 1 82 3390 1 82 3391 1 82 3392 1 82 3395 1 82 3396 1 82 3397 1 82 3398 1 82 3399 1 82 3407 1 82 3408 1 82 3409 1 82 3412 1 82 3413 1 82 3414 1 82 3417 1 82 3418 1 82 3419 1 82 3420 1 82 3423 1 82 3424 1 82 3425 1 82 3426 1 82 3427 1 82 3430 1 82 3431 1 82 3432 1 83 28 1 83 56 1 83 77 1 83 92 1 83 102 1 83 111 1 83 114 1 83 115 1 83 140 1 83 161 1 83 176 1 83 186 1 83 195 1 83 198 1 83 199 1 83 217 1 83 232 1 83 242 1 83 251 1 83 254 1 83 255 1 83 267 1 83 277 1 83 286 1 83 289 1 83 290 1 83 297 1 83 306 1 83 309 1 83 310 1 83 316 1 83 319 1 83 320 1 83 326 1 83 327 1 83 329 1 83 350 1 83 371 1 83 386 1 83 396 1 83 405 1 83 408 1 83 409 1 83 427 1 83 442 1 83 452 1 83 461 1 83 464 1 83 465 1 83 477 1 83 487 1 83 496 1 83 499 1 83 500 1 83 507 1 83 516 1 83 519 1 83 520 1 83 526 1 83 529 1 83 530 1 83 536 1 83 537 1 83 539 1 83 553 1 83 568 1 83 578 1 83 587 1 83 590 1 83 591 1 83 603 1 83 613 1 83 622 1 83 625 1 83 626 1 83 633 1 83 642 1 83 645 1 83 646 1 83 652 1 83 655 1 83 656 1 83 662 1 83 663 1 83 665 1 83 673 1 83 683 1 83 692 1 83 695 1 83 696 1 83 703 1 83 712 1 83 715 1 83 716 1 83 722 1 83 725 1 83 726 1 83 732 1 83 733 1 83 735 1 83 738 1 83 747 1 83 750 1 83 751 1 83 757 1 83 760 1 83 761 1 83 767 1 83 768 1 83 770 1 83 772 1 83 775 1 83 776 1 83 782 1 83 783 1 83 785 1 83 787 1 83 788 1 83 790 1 83 792 1 83 812 1 83 833 1 83 848 1 83 858 1 83 867 1 83 870 1 83 871 1 83 889 1 83 904 1 83 914 1 83 923 1 83 926 1 83 927 1 83 939 1 83 949 1 83 958 1 83 961 1 83 962 1 83 969 1 83 978 1 83 981 1 83 982 1 83 988 1 83 991 1 83 992 1 83 998 1 83 999 1 83 1001 1 83 1015 1 83 1030 1 83 1040 1 83 1049 1 83 1052 1 83 1053 1 83 1065 1 83 1075 1 83 1084 1 83 1087 1 83 1088 1 83 1095 1 83 1104 1 83 1107 1 83 1108 1 83 1114 1 83 1117 1 83 1118 1 83 1124 1 83 1125 1 83 1127 1 83 1135 1 83 1145 1 83 1154 1 83 1157 1 83 1158 1 83 1165 1 83 1174 1 83 1177 1 83 1178 1 83 1184 1 83 1187 1 83 1188 1 83 1194 1 83 1195 1 83 1197 1 83 1200 1 83 1209 1 83 1212 1 83 1213 1 83 1219 1 83 1222 1 83 1223 1 83 1229 1 83 1230 1 83 1232 1 83 1234 1 83 1237 1 83 1238 1 83 1244 1 83 1245 1 83 1247 1 83 1249 1 83 1250 1 83 1252 1 83 1254 1 83 1267 1 83 1282 1 83 1292 1 83 1301 1 83 1304 1 83 1305 1 83 1317 1 83 1327 1 83 1336 1 83 1339 1 83 1340 1 83 1347 1 83 1356 1 83 1359 1 83 1360 1 83 1366 1 83 1369 1 83 1370 1 83 1376 1 83 1377 1 83 1379 1 83 1387 1 83 1397 1 83 1406 1 83 1409 1 83 1410 1 83 1417 1 83 1426 1 83 1429 1 83 1430 1 83 1436 1 83 1439 1 83 1440 1 83 1446 1 83 1447 1 83 1449 1 83 1452 1 83 1461 1 83 1464 1 83 1465 1 83 1471 1 83 1474 1 83 1475 1 83 1481 1 83 1482 1 83 1484 1 83 1486 1 83 1489 1 83 1490 1 83 1496 1 83 1497 1 83 1499 1 83 1501 1 83 1502 1 83 1504 1 83 1506 1 83 1513 1 83 1523 1 83 1532 1 83 1535 1 83 1536 1 83 1543 1 83 1552 1 83 1555 1 83 1556 1 83 1562 1 83 1565 1 83 1566 1 83 1572 1 83 1573 1 83 1575 1 83 1578 1 83 1587 1 83 1590 1 83 1591 1 83 1597 1 83 1600 1 83 1601 1 83 1607 1 83 1608 1 83 1610 1 83 1612 1 83 1615 1 83 1616 1 83 1622 1 83 1623 1 83 1625 1 83 1627 1 83 1628 1 83 1630 1 83 1632 1 83 1634 1 83 1643 1 83 1646 1 83 1647 1 83 1653 1 83 1656 1 83 1657 1 83 1663 1 83 1664 1 83 1666 1 83 1668 1 83 1671 1 83 1672 1 83 1678 1 83 1679 1 83 1681 1 83 1683 1 83 1684 1 83 1686 1 83 1688 1 83 1689 1 83 1692 1 83 1693 1 83 1699 1 83 1700 1 83 1702 1 83 1704 1 83 1705 1 83 1707 1 83 1709 1 83 1710 1 83 1711 1 83 1713 1 83 1715 1 83 1716 1 83 1736 1 83 1757 1 83 1772 1 83 1782 1 83 1791 1 83 1794 1 83 1795 1 83 1813 1 83 1828 1 83 1838 1 83 1847 1 83 1850 1 83 1851 1 83 1863 1 83 1873 1 83 1882 1 83 1885 1 83 1886 1 83 1893 1 83 1902 1 83 1905 1 83 1906 1 83 1912 1 83 1915 1 83 1916 1 83 1922 1 83 1923 1 83 1925 1 83 1939 1 83 1954 1 83 1964 1 83 1973 1 83 1976 1 83 1977 1 83 1989 1 83 1999 1 83 2008 1 83 2011 1 83 2012 1 83 2019 1 83 2028 1 83 2031 1 83 2032 1 83 2038 1 83 2041 1 83 2042 1 83 2048 1 83 2049 1 83 2051 1 83 2059 1 83 2069 1 83 2078 1 83 2081 1 83 2082 1 83 2089 1 83 2098 1 83 2101 1 83 2102 1 83 2108 1 83 2111 1 83 2112 1 83 2118 1 83 2119 1 83 2121 1 83 2124 1 83 2133 1 83 2136 1 83 2137 1 83 2143 1 83 2146 1 83 2147 1 83 2153 1 83 2154 1 83 2156 1 83 2158 1 83 2161 1 83 2162 1 83 2168 1 83 2169 1 83 2171 1 83 2173 1 83 2174 1 83 2176 1 83 2178 1 83 2191 1 83 2206 1 83 2216 1 83 2225 1 83 2228 1 83 2229 1 83 2241 1 83 2251 1 83 2260 1 83 2263 1 83 2264 1 83 2271 1 83 2280 1 83 2283 1 83 2284 1 83 2290 1 83 2293 1 83 2294 1 83 2300 1 83 2301 1 83 2303 1 83 2311 1 83 2321 1 83 2330 1 83 2333 1 83 2334 1 83 2341 1 83 2350 1 83 2353 1 83 2354 1 83 2360 1 83 2363 1 83 2364 1 83 2370 1 83 2371 1 83 2373 1 83 2376 1 83 2385 1 83 2388 1 83 2389 1 83 2395 1 83 2398 1 83 2399 1 83 2405 1 83 2406 1 83 2408 1 83 2410 1 83 2413 1 83 2414 1 83 2420 1 83 2421 1 83 2423 1 83 2425 1 83 2426 1 83 2428 1 83 2430 1 83 2437 1 83 2447 1 83 2456 1 83 2459 1 83 2460 1 83 2467 1 83 2476 1 83 2479 1 83 2480 1 83 2486 1 83 2489 1 83 2490 1 83 2496 1 83 2497 1 83 2499 1 83 2502 1 83 2511 1 83 2514 1 83 2515 1 83 2521 1 83 2524 1 83 2525 1 83 2531 1 83 2532 1 83 2534 1 83 2536 1 83 2539 1 83 2540 1 83 2546 1 83 2547 1 83 2549 1 83 2551 1 83 2552 1 83 2554 1 83 2556 1 83 2558 1 83 2567 1 83 2570 1 83 2571 1 83 2577 1 83 2580 1 83 2581 1 83 2587 1 83 2588 1 83 2590 1 83 2592 1 83 2595 1 83 2596 1 83 2602 1 83 2603 1 83 2605 1 83 2607 1 83 2608 1 83 2610 1 83 2612 1 83 2613 1 83 2616 1 83 2617 1 83 2623 1 83 2624 1 83 2626 1 83 2628 1 83 2629 1 83 2631 1 83 2633 1 83 2634 1 83 2635 1 83 2637 1 83 2639 1 83 2640 1 83 2653 1 83 2668 1 83 2678 1 83 2687 1 83 2690 1 83 2691 1 83 2703 1 83 2713 1 83 2722 1 83 2725 1 83 2726 1 83 2733 1 83 2742 1 83 2745 1 83 2746 1 83 2752 1 83 2755 1 83 2756 1 83 2762 1 83 2763 1 83 2765 1 83 2773 1 83 2783 1 83 2792 1 83 2795 1 83 2796 1 83 2803 1 83 2812 1 83 2815 1 83 2816 1 83 2822 1 83 2825 1 83 2826 1 83 2832 1 83 2833 1 83 2835 1 83 2838 1 83 2847 1 83 2850 1 83 2851 1 83 2857 1 83 2860 1 83 2861 1 83 2867 1 83 2868 1 83 2870 1 83 2872 1 83 2875 1 83 2876 1 83 2882 1 83 2883 1 83 2885 1 83 2887 1 83 2888 1 83 2890 1 83 2892 1 83 2899 1 83 2909 1 83 2918 1 83 2921 1 83 2922 1 83 2929 1 83 2938 1 83 2941 1 83 2942 1 83 2948 1 83 2951 1 83 2952 1 83 2958 1 83 2959 1 83 2961 1 83 2964 1 83 2973 1 83 2976 1 83 2977 1 83 2983 1 83 2986 1 83 2987 1 83 2993 1 83 2994 1 83 2996 1 83 2998 1 83 3001 1 83 3002 1 83 3008 1 83 3009 1 83 3011 1 83 3013 1 83 3014 1 83 3016 1 83 3018 1 83 3020 1 83 3029 1 83 3032 1 83 3033 1 83 3039 1 83 3042 1 83 3043 1 83 3049 1 83 3050 1 83 3052 1 83 3054 1 83 3057 1 83 3058 1 83 3064 1 83 3065 1 83 3067 1 83 3069 1 83 3070 1 83 3072 1 83 3074 1 83 3075 1 83 3078 1 83 3079 1 83 3085 1 83 3086 1 83 3088 1 83 3090 1 83 3091 1 83 3093 1 83 3095 1 83 3096 1 83 3097 1 83 3099 1 83 3101 1 83 3102 1 83 3109 1 83 3119 1 83 3128 1 83 3131 1 83 3132 1 83 3139 1 83 3148 1 83 3151 1 83 3152 1 83 3158 1 83 3161 1 83 3162 1 83 3168 1 83 3169 1 83 3171 1 83 3174 1 83 3183 1 83 3186 1 83 3187 1 83 3193 1 83 3196 1 83 3197 1 83 3203 1 83 3204 1 83 3206 1 83 3208 1 83 3211 1 83 3212 1 83 3218 1 83 3219 1 83 3221 1 83 3223 1 83 3224 1 83 3226 1 83 3228 1 83 3230 1 83 3239 1 83 3242 1 83 3243 1 83 3249 1 83 3252 1 83 3253 1 83 3259 1 83 3260 1 83 3262 1 83 3264 1 83 3267 1 83 3268 1 83 3274 1 83 3275 1 83 3277 1 83 3279 1 83 3280 1 83 3282 1 83 3284 1 83 3285 1 83 3288 1 83 3289 1 83 3295 1 83 3296 1 83 3298 1 83 3300 1 83 3301 1 83 3303 1 83 3305 1 83 3306 1 83 3307 1 83 3309 1 83 3311 1 83 3312 1 83 3314 1 83 3323 1 83 3326 1 83 3327 1 83 3333 1 83 3336 1 83 3337 1 83 3343 1 83 3344 1 83 3346 1 83 3348 1 83 3351 1 83 3352 1 83 3358 1 83 3359 1 83 3361 1 83 3363 1 83 3364 1 83 3366 1 83 3368 1 83 3369 1 83 3372 1 83 3373 1 83 3379 1 83 3380 1 83 3382 1 83 3384 1 83 3385 1 83 3387 1 83 3389 1 83 3390 1 83 3391 1 83 3393 1 83 3395 1 83 3396 1 83 3397 1 83 3400 1 83 3401 1 83 3407 1 83 3408 1 83 3410 1 83 3412 1 83 3413 1 83 3415 1 83 3417 1 83 3418 1 83 3419 1 83 3421 1 83 3423 1 83 3424 1 83 3425 1 83 3426 1 83 3428 1 83 3430 1 83 3431 1 83 3432 1 84 29 1 84 57 1 84 78 1 84 93 1 84 103 1 84 112 1 84 114 1 84 116 1 84 141 1 84 162 1 84 177 1 84 187 1 84 196 1 84 198 1 84 200 1 84 218 1 84 233 1 84 243 1 84 252 1 84 254 1 84 256 1 84 268 1 84 278 1 84 287 1 84 289 1 84 291 1 84 298 1 84 307 1 84 309 1 84 311 1 84 317 1 84 319 1 84 321 1 84 326 1 84 328 1 84 329 1 84 351 1 84 372 1 84 387 1 84 397 1 84 406 1 84 408 1 84 410 1 84 428 1 84 443 1 84 453 1 84 462 1 84 464 1 84 466 1 84 478 1 84 488 1 84 497 1 84 499 1 84 501 1 84 508 1 84 517 1 84 519 1 84 521 1 84 527 1 84 529 1 84 531 1 84 536 1 84 538 1 84 539 1 84 554 1 84 569 1 84 579 1 84 588 1 84 590 1 84 592 1 84 604 1 84 614 1 84 623 1 84 625 1 84 627 1 84 634 1 84 643 1 84 645 1 84 647 1 84 653 1 84 655 1 84 657 1 84 662 1 84 664 1 84 665 1 84 674 1 84 684 1 84 693 1 84 695 1 84 697 1 84 704 1 84 713 1 84 715 1 84 717 1 84 723 1 84 725 1 84 727 1 84 732 1 84 734 1 84 735 1 84 739 1 84 748 1 84 750 1 84 752 1 84 758 1 84 760 1 84 762 1 84 767 1 84 769 1 84 770 1 84 773 1 84 775 1 84 777 1 84 782 1 84 784 1 84 785 1 84 787 1 84 789 1 84 790 1 84 792 1 84 813 1 84 834 1 84 849 1 84 859 1 84 868 1 84 870 1 84 872 1 84 890 1 84 905 1 84 915 1 84 924 1 84 926 1 84 928 1 84 940 1 84 950 1 84 959 1 84 961 1 84 963 1 84 970 1 84 979 1 84 981 1 84 983 1 84 989 1 84 991 1 84 993 1 84 998 1 84 1000 1 84 1001 1 84 1016 1 84 1031 1 84 1041 1 84 1050 1 84 1052 1 84 1054 1 84 1066 1 84 1076 1 84 1085 1 84 1087 1 84 1089 1 84 1096 1 84 1105 1 84 1107 1 84 1109 1 84 1115 1 84 1117 1 84 1119 1 84 1124 1 84 1126 1 84 1127 1 84 1136 1 84 1146 1 84 1155 1 84 1157 1 84 1159 1 84 1166 1 84 1175 1 84 1177 1 84 1179 1 84 1185 1 84 1187 1 84 1189 1 84 1194 1 84 1196 1 84 1197 1 84 1201 1 84 1210 1 84 1212 1 84 1214 1 84 1220 1 84 1222 1 84 1224 1 84 1229 1 84 1231 1 84 1232 1 84 1235 1 84 1237 1 84 1239 1 84 1244 1 84 1246 1 84 1247 1 84 1249 1 84 1251 1 84 1252 1 84 1254 1 84 1268 1 84 1283 1 84 1293 1 84 1302 1 84 1304 1 84 1306 1 84 1318 1 84 1328 1 84 1337 1 84 1339 1 84 1341 1 84 1348 1 84 1357 1 84 1359 1 84 1361 1 84 1367 1 84 1369 1 84 1371 1 84 1376 1 84 1378 1 84 1379 1 84 1388 1 84 1398 1 84 1407 1 84 1409 1 84 1411 1 84 1418 1 84 1427 1 84 1429 1 84 1431 1 84 1437 1 84 1439 1 84 1441 1 84 1446 1 84 1448 1 84 1449 1 84 1453 1 84 1462 1 84 1464 1 84 1466 1 84 1472 1 84 1474 1 84 1476 1 84 1481 1 84 1483 1 84 1484 1 84 1487 1 84 1489 1 84 1491 1 84 1496 1 84 1498 1 84 1499 1 84 1501 1 84 1503 1 84 1504 1 84 1506 1 84 1514 1 84 1524 1 84 1533 1 84 1535 1 84 1537 1 84 1544 1 84 1553 1 84 1555 1 84 1557 1 84 1563 1 84 1565 1 84 1567 1 84 1572 1 84 1574 1 84 1575 1 84 1579 1 84 1588 1 84 1590 1 84 1592 1 84 1598 1 84 1600 1 84 1602 1 84 1607 1 84 1609 1 84 1610 1 84 1613 1 84 1615 1 84 1617 1 84 1622 1 84 1624 1 84 1625 1 84 1627 1 84 1629 1 84 1630 1 84 1632 1 84 1635 1 84 1644 1 84 1646 1 84 1648 1 84 1654 1 84 1656 1 84 1658 1 84 1663 1 84 1665 1 84 1666 1 84 1669 1 84 1671 1 84 1673 1 84 1678 1 84 1680 1 84 1681 1 84 1683 1 84 1685 1 84 1686 1 84 1688 1 84 1690 1 84 1692 1 84 1694 1 84 1699 1 84 1701 1 84 1702 1 84 1704 1 84 1706 1 84 1707 1 84 1709 1 84 1710 1 84 1712 1 84 1713 1 84 1715 1 84 1716 1 84 1737 1 84 1758 1 84 1773 1 84 1783 1 84 1792 1 84 1794 1 84 1796 1 84 1814 1 84 1829 1 84 1839 1 84 1848 1 84 1850 1 84 1852 1 84 1864 1 84 1874 1 84 1883 1 84 1885 1 84 1887 1 84 1894 1 84 1903 1 84 1905 1 84 1907 1 84 1913 1 84 1915 1 84 1917 1 84 1922 1 84 1924 1 84 1925 1 84 1940 1 84 1955 1 84 1965 1 84 1974 1 84 1976 1 84 1978 1 84 1990 1 84 2000 1 84 2009 1 84 2011 1 84 2013 1 84 2020 1 84 2029 1 84 2031 1 84 2033 1 84 2039 1 84 2041 1 84 2043 1 84 2048 1 84 2050 1 84 2051 1 84 2060 1 84 2070 1 84 2079 1 84 2081 1 84 2083 1 84 2090 1 84 2099 1 84 2101 1 84 2103 1 84 2109 1 84 2111 1 84 2113 1 84 2118 1 84 2120 1 84 2121 1 84 2125 1 84 2134 1 84 2136 1 84 2138 1 84 2144 1 84 2146 1 84 2148 1 84 2153 1 84 2155 1 84 2156 1 84 2159 1 84 2161 1 84 2163 1 84 2168 1 84 2170 1 84 2171 1 84 2173 1 84 2175 1 84 2176 1 84 2178 1 84 2192 1 84 2207 1 84 2217 1 84 2226 1 84 2228 1 84 2230 1 84 2242 1 84 2252 1 84 2261 1 84 2263 1 84 2265 1 84 2272 1 84 2281 1 84 2283 1 84 2285 1 84 2291 1 84 2293 1 84 2295 1 84 2300 1 84 2302 1 84 2303 1 84 2312 1 84 2322 1 84 2331 1 84 2333 1 84 2335 1 84 2342 1 84 2351 1 84 2353 1 84 2355 1 84 2361 1 84 2363 1 84 2365 1 84 2370 1 84 2372 1 84 2373 1 84 2377 1 84 2386 1 84 2388 1 84 2390 1 84 2396 1 84 2398 1 84 2400 1 84 2405 1 84 2407 1 84 2408 1 84 2411 1 84 2413 1 84 2415 1 84 2420 1 84 2422 1 84 2423 1 84 2425 1 84 2427 1 84 2428 1 84 2430 1 84 2438 1 84 2448 1 84 2457 1 84 2459 1 84 2461 1 84 2468 1 84 2477 1 84 2479 1 84 2481 1 84 2487 1 84 2489 1 84 2491 1 84 2496 1 84 2498 1 84 2499 1 84 2503 1 84 2512 1 84 2514 1 84 2516 1 84 2522 1 84 2524 1 84 2526 1 84 2531 1 84 2533 1 84 2534 1 84 2537 1 84 2539 1 84 2541 1 84 2546 1 84 2548 1 84 2549 1 84 2551 1 84 2553 1 84 2554 1 84 2556 1 84 2559 1 84 2568 1 84 2570 1 84 2572 1 84 2578 1 84 2580 1 84 2582 1 84 2587 1 84 2589 1 84 2590 1 84 2593 1 84 2595 1 84 2597 1 84 2602 1 84 2604 1 84 2605 1 84 2607 1 84 2609 1 84 2610 1 84 2612 1 84 2614 1 84 2616 1 84 2618 1 84 2623 1 84 2625 1 84 2626 1 84 2628 1 84 2630 1 84 2631 1 84 2633 1 84 2634 1 84 2636 1 84 2637 1 84 2639 1 84 2640 1 84 2654 1 84 2669 1 84 2679 1 84 2688 1 84 2690 1 84 2692 1 84 2704 1 84 2714 1 84 2723 1 84 2725 1 84 2727 1 84 2734 1 84 2743 1 84 2745 1 84 2747 1 84 2753 1 84 2755 1 84 2757 1 84 2762 1 84 2764 1 84 2765 1 84 2774 1 84 2784 1 84 2793 1 84 2795 1 84 2797 1 84 2804 1 84 2813 1 84 2815 1 84 2817 1 84 2823 1 84 2825 1 84 2827 1 84 2832 1 84 2834 1 84 2835 1 84 2839 1 84 2848 1 84 2850 1 84 2852 1 84 2858 1 84 2860 1 84 2862 1 84 2867 1 84 2869 1 84 2870 1 84 2873 1 84 2875 1 84 2877 1 84 2882 1 84 2884 1 84 2885 1 84 2887 1 84 2889 1 84 2890 1 84 2892 1 84 2900 1 84 2910 1 84 2919 1 84 2921 1 84 2923 1 84 2930 1 84 2939 1 84 2941 1 84 2943 1 84 2949 1 84 2951 1 84 2953 1 84 2958 1 84 2960 1 84 2961 1 84 2965 1 84 2974 1 84 2976 1 84 2978 1 84 2984 1 84 2986 1 84 2988 1 84 2993 1 84 2995 1 84 2996 1 84 2999 1 84 3001 1 84 3003 1 84 3008 1 84 3010 1 84 3011 1 84 3013 1 84 3015 1 84 3016 1 84 3018 1 84 3021 1 84 3030 1 84 3032 1 84 3034 1 84 3040 1 84 3042 1 84 3044 1 84 3049 1 84 3051 1 84 3052 1 84 3055 1 84 3057 1 84 3059 1 84 3064 1 84 3066 1 84 3067 1 84 3069 1 84 3071 1 84 3072 1 84 3074 1 84 3076 1 84 3078 1 84 3080 1 84 3085 1 84 3087 1 84 3088 1 84 3090 1 84 3092 1 84 3093 1 84 3095 1 84 3096 1 84 3098 1 84 3099 1 84 3101 1 84 3102 1 84 3110 1 84 3120 1 84 3129 1 84 3131 1 84 3133 1 84 3140 1 84 3149 1 84 3151 1 84 3153 1 84 3159 1 84 3161 1 84 3163 1 84 3168 1 84 3170 1 84 3171 1 84 3175 1 84 3184 1 84 3186 1 84 3188 1 84 3194 1 84 3196 1 84 3198 1 84 3203 1 84 3205 1 84 3206 1 84 3209 1 84 3211 1 84 3213 1 84 3218 1 84 3220 1 84 3221 1 84 3223 1 84 3225 1 84 3226 1 84 3228 1 84 3231 1 84 3240 1 84 3242 1 84 3244 1 84 3250 1 84 3252 1 84 3254 1 84 3259 1 84 3261 1 84 3262 1 84 3265 1 84 3267 1 84 3269 1 84 3274 1 84 3276 1 84 3277 1 84 3279 1 84 3281 1 84 3282 1 84 3284 1 84 3286 1 84 3288 1 84 3290 1 84 3295 1 84 3297 1 84 3298 1 84 3300 1 84 3302 1 84 3303 1 84 3305 1 84 3306 1 84 3308 1 84 3309 1 84 3311 1 84 3312 1 84 3315 1 84 3324 1 84 3326 1 84 3328 1 84 3334 1 84 3336 1 84 3338 1 84 3343 1 84 3345 1 84 3346 1 84 3349 1 84 3351 1 84 3353 1 84 3358 1 84 3360 1 84 3361 1 84 3363 1 84 3365 1 84 3366 1 84 3368 1 84 3370 1 84 3372 1 84 3374 1 84 3379 1 84 3381 1 84 3382 1 84 3384 1 84 3386 1 84 3387 1 84 3389 1 84 3390 1 84 3392 1 84 3393 1 84 3395 1 84 3396 1 84 3398 1 84 3400 1 84 3402 1 84 3407 1 84 3409 1 84 3410 1 84 3412 1 84 3414 1 84 3415 1 84 3417 1 84 3418 1 84 3420 1 84 3421 1 84 3423 1 84 3424 1 84 3425 1 84 3427 1 84 3428 1 84 3430 1 84 3431 1 84 3432 1 85 30 1 85 58 1 85 79 1 85 94 1 85 104 1 85 113 1 85 115 1 85 116 1 85 142 1 85 163 1 85 178 1 85 188 1 85 197 1 85 199 1 85 200 1 85 219 1 85 234 1 85 244 1 85 253 1 85 255 1 85 256 1 85 269 1 85 279 1 85 288 1 85 290 1 85 291 1 85 299 1 85 308 1 85 310 1 85 311 1 85 318 1 85 320 1 85 321 1 85 327 1 85 328 1 85 329 1 85 352 1 85 373 1 85 388 1 85 398 1 85 407 1 85 409 1 85 410 1 85 429 1 85 444 1 85 454 1 85 463 1 85 465 1 85 466 1 85 479 1 85 489 1 85 498 1 85 500 1 85 501 1 85 509 1 85 518 1 85 520 1 85 521 1 85 528 1 85 530 1 85 531 1 85 537 1 85 538 1 85 539 1 85 555 1 85 570 1 85 580 1 85 589 1 85 591 1 85 592 1 85 605 1 85 615 1 85 624 1 85 626 1 85 627 1 85 635 1 85 644 1 85 646 1 85 647 1 85 654 1 85 656 1 85 657 1 85 663 1 85 664 1 85 665 1 85 675 1 85 685 1 85 694 1 85 696 1 85 697 1 85 705 1 85 714 1 85 716 1 85 717 1 85 724 1 85 726 1 85 727 1 85 733 1 85 734 1 85 735 1 85 740 1 85 749 1 85 751 1 85 752 1 85 759 1 85 761 1 85 762 1 85 768 1 85 769 1 85 770 1 85 774 1 85 776 1 85 777 1 85 783 1 85 784 1 85 785 1 85 788 1 85 789 1 85 790 1 85 792 1 85 814 1 85 835 1 85 850 1 85 860 1 85 869 1 85 871 1 85 872 1 85 891 1 85 906 1 85 916 1 85 925 1 85 927 1 85 928 1 85 941 1 85 951 1 85 960 1 85 962 1 85 963 1 85 971 1 85 980 1 85 982 1 85 983 1 85 990 1 85 992 1 85 993 1 85 999 1 85 1000 1 85 1001 1 85 1017 1 85 1032 1 85 1042 1 85 1051 1 85 1053 1 85 1054 1 85 1067 1 85 1077 1 85 1086 1 85 1088 1 85 1089 1 85 1097 1 85 1106 1 85 1108 1 85 1109 1 85 1116 1 85 1118 1 85 1119 1 85 1125 1 85 1126 1 85 1127 1 85 1137 1 85 1147 1 85 1156 1 85 1158 1 85 1159 1 85 1167 1 85 1176 1 85 1178 1 85 1179 1 85 1186 1 85 1188 1 85 1189 1 85 1195 1 85 1196 1 85 1197 1 85 1202 1 85 1211 1 85 1213 1 85 1214 1 85 1221 1 85 1223 1 85 1224 1 85 1230 1 85 1231 1 85 1232 1 85 1236 1 85 1238 1 85 1239 1 85 1245 1 85 1246 1 85 1247 1 85 1250 1 85 1251 1 85 1252 1 85 1254 1 85 1269 1 85 1284 1 85 1294 1 85 1303 1 85 1305 1 85 1306 1 85 1319 1 85 1329 1 85 1338 1 85 1340 1 85 1341 1 85 1349 1 85 1358 1 85 1360 1 85 1361 1 85 1368 1 85 1370 1 85 1371 1 85 1377 1 85 1378 1 85 1379 1 85 1389 1 85 1399 1 85 1408 1 85 1410 1 85 1411 1 85 1419 1 85 1428 1 85 1430 1 85 1431 1 85 1438 1 85 1440 1 85 1441 1 85 1447 1 85 1448 1 85 1449 1 85 1454 1 85 1463 1 85 1465 1 85 1466 1 85 1473 1 85 1475 1 85 1476 1 85 1482 1 85 1483 1 85 1484 1 85 1488 1 85 1490 1 85 1491 1 85 1497 1 85 1498 1 85 1499 1 85 1502 1 85 1503 1 85 1504 1 85 1506 1 85 1515 1 85 1525 1 85 1534 1 85 1536 1 85 1537 1 85 1545 1 85 1554 1 85 1556 1 85 1557 1 85 1564 1 85 1566 1 85 1567 1 85 1573 1 85 1574 1 85 1575 1 85 1580 1 85 1589 1 85 1591 1 85 1592 1 85 1599 1 85 1601 1 85 1602 1 85 1608 1 85 1609 1 85 1610 1 85 1614 1 85 1616 1 85 1617 1 85 1623 1 85 1624 1 85 1625 1 85 1628 1 85 1629 1 85 1630 1 85 1632 1 85 1636 1 85 1645 1 85 1647 1 85 1648 1 85 1655 1 85 1657 1 85 1658 1 85 1664 1 85 1665 1 85 1666 1 85 1670 1 85 1672 1 85 1673 1 85 1679 1 85 1680 1 85 1681 1 85 1684 1 85 1685 1 85 1686 1 85 1688 1 85 1691 1 85 1693 1 85 1694 1 85 1700 1 85 1701 1 85 1702 1 85 1705 1 85 1706 1 85 1707 1 85 1709 1 85 1711 1 85 1712 1 85 1713 1 85 1715 1 85 1716 1 85 1738 1 85 1759 1 85 1774 1 85 1784 1 85 1793 1 85 1795 1 85 1796 1 85 1815 1 85 1830 1 85 1840 1 85 1849 1 85 1851 1 85 1852 1 85 1865 1 85 1875 1 85 1884 1 85 1886 1 85 1887 1 85 1895 1 85 1904 1 85 1906 1 85 1907 1 85 1914 1 85 1916 1 85 1917 1 85 1923 1 85 1924 1 85 1925 1 85 1941 1 85 1956 1 85 1966 1 85 1975 1 85 1977 1 85 1978 1 85 1991 1 85 2001 1 85 2010 1 85 2012 1 85 2013 1 85 2021 1 85 2030 1 85 2032 1 85 2033 1 85 2040 1 85 2042 1 85 2043 1 85 2049 1 85 2050 1 85 2051 1 85 2061 1 85 2071 1 85 2080 1 85 2082 1 85 2083 1 85 2091 1 85 2100 1 85 2102 1 85 2103 1 85 2110 1 85 2112 1 85 2113 1 85 2119 1 85 2120 1 85 2121 1 85 2126 1 85 2135 1 85 2137 1 85 2138 1 85 2145 1 85 2147 1 85 2148 1 85 2154 1 85 2155 1 85 2156 1 85 2160 1 85 2162 1 85 2163 1 85 2169 1 85 2170 1 85 2171 1 85 2174 1 85 2175 1 85 2176 1 85 2178 1 85 2193 1 85 2208 1 85 2218 1 85 2227 1 85 2229 1 85 2230 1 85 2243 1 85 2253 1 85 2262 1 85 2264 1 85 2265 1 85 2273 1 85 2282 1 85 2284 1 85 2285 1 85 2292 1 85 2294 1 85 2295 1 85 2301 1 85 2302 1 85 2303 1 85 2313 1 85 2323 1 85 2332 1 85 2334 1 85 2335 1 85 2343 1 85 2352 1 85 2354 1 85 2355 1 85 2362 1 85 2364 1 85 2365 1 85 2371 1 85 2372 1 85 2373 1 85 2378 1 85 2387 1 85 2389 1 85 2390 1 85 2397 1 85 2399 1 85 2400 1 85 2406 1 85 2407 1 85 2408 1 85 2412 1 85 2414 1 85 2415 1 85 2421 1 85 2422 1 85 2423 1 85 2426 1 85 2427 1 85 2428 1 85 2430 1 85 2439 1 85 2449 1 85 2458 1 85 2460 1 85 2461 1 85 2469 1 85 2478 1 85 2480 1 85 2481 1 85 2488 1 85 2490 1 85 2491 1 85 2497 1 85 2498 1 85 2499 1 85 2504 1 85 2513 1 85 2515 1 85 2516 1 85 2523 1 85 2525 1 85 2526 1 85 2532 1 85 2533 1 85 2534 1 85 2538 1 85 2540 1 85 2541 1 85 2547 1 85 2548 1 85 2549 1 85 2552 1 85 2553 1 85 2554 1 85 2556 1 85 2560 1 85 2569 1 85 2571 1 85 2572 1 85 2579 1 85 2581 1 85 2582 1 85 2588 1 85 2589 1 85 2590 1 85 2594 1 85 2596 1 85 2597 1 85 2603 1 85 2604 1 85 2605 1 85 2608 1 85 2609 1 85 2610 1 85 2612 1 85 2615 1 85 2617 1 85 2618 1 85 2624 1 85 2625 1 85 2626 1 85 2629 1 85 2630 1 85 2631 1 85 2633 1 85 2635 1 85 2636 1 85 2637 1 85 2639 1 85 2640 1 85 2655 1 85 2670 1 85 2680 1 85 2689 1 85 2691 1 85 2692 1 85 2705 1 85 2715 1 85 2724 1 85 2726 1 85 2727 1 85 2735 1 85 2744 1 85 2746 1 85 2747 1 85 2754 1 85 2756 1 85 2757 1 85 2763 1 85 2764 1 85 2765 1 85 2775 1 85 2785 1 85 2794 1 85 2796 1 85 2797 1 85 2805 1 85 2814 1 85 2816 1 85 2817 1 85 2824 1 85 2826 1 85 2827 1 85 2833 1 85 2834 1 85 2835 1 85 2840 1 85 2849 1 85 2851 1 85 2852 1 85 2859 1 85 2861 1 85 2862 1 85 2868 1 85 2869 1 85 2870 1 85 2874 1 85 2876 1 85 2877 1 85 2883 1 85 2884 1 85 2885 1 85 2888 1 85 2889 1 85 2890 1 85 2892 1 85 2901 1 85 2911 1 85 2920 1 85 2922 1 85 2923 1 85 2931 1 85 2940 1 85 2942 1 85 2943 1 85 2950 1 85 2952 1 85 2953 1 85 2959 1 85 2960 1 85 2961 1 85 2966 1 85 2975 1 85 2977 1 85 2978 1 85 2985 1 85 2987 1 85 2988 1 85 2994 1 85 2995 1 85 2996 1 85 3000 1 85 3002 1 85 3003 1 85 3009 1 85 3010 1 85 3011 1 85 3014 1 85 3015 1 85 3016 1 85 3018 1 85 3022 1 85 3031 1 85 3033 1 85 3034 1 85 3041 1 85 3043 1 85 3044 1 85 3050 1 85 3051 1 85 3052 1 85 3056 1 85 3058 1 85 3059 1 85 3065 1 85 3066 1 85 3067 1 85 3070 1 85 3071 1 85 3072 1 85 3074 1 85 3077 1 85 3079 1 85 3080 1 85 3086 1 85 3087 1 85 3088 1 85 3091 1 85 3092 1 85 3093 1 85 3095 1 85 3097 1 85 3098 1 85 3099 1 85 3101 1 85 3102 1 85 3111 1 85 3121 1 85 3130 1 85 3132 1 85 3133 1 85 3141 1 85 3150 1 85 3152 1 85 3153 1 85 3160 1 85 3162 1 85 3163 1 85 3169 1 85 3170 1 85 3171 1 85 3176 1 85 3185 1 85 3187 1 85 3188 1 85 3195 1 85 3197 1 85 3198 1 85 3204 1 85 3205 1 85 3206 1 85 3210 1 85 3212 1 85 3213 1 85 3219 1 85 3220 1 85 3221 1 85 3224 1 85 3225 1 85 3226 1 85 3228 1 85 3232 1 85 3241 1 85 3243 1 85 3244 1 85 3251 1 85 3253 1 85 3254 1 85 3260 1 85 3261 1 85 3262 1 85 3266 1 85 3268 1 85 3269 1 85 3275 1 85 3276 1 85 3277 1 85 3280 1 85 3281 1 85 3282 1 85 3284 1 85 3287 1 85 3289 1 85 3290 1 85 3296 1 85 3297 1 85 3298 1 85 3301 1 85 3302 1 85 3303 1 85 3305 1 85 3307 1 85 3308 1 85 3309 1 85 3311 1 85 3312 1 85 3316 1 85 3325 1 85 3327 1 85 3328 1 85 3335 1 85 3337 1 85 3338 1 85 3344 1 85 3345 1 85 3346 1 85 3350 1 85 3352 1 85 3353 1 85 3359 1 85 3360 1 85 3361 1 85 3364 1 85 3365 1 85 3366 1 85 3368 1 85 3371 1 85 3373 1 85 3374 1 85 3380 1 85 3381 1 85 3382 1 85 3385 1 85 3386 1 85 3387 1 85 3389 1 85 3391 1 85 3392 1 85 3393 1 85 3395 1 85 3396 1 85 3399 1 85 3401 1 85 3402 1 85 3408 1 85 3409 1 85 3410 1 85 3413 1 85 3414 1 85 3415 1 85 3417 1 85 3419 1 85 3420 1 85 3421 1 85 3423 1 85 3424 1 85 3426 1 85 3427 1 85 3428 1 85 3430 1 85 3431 1 85 3432 1 86 31 1 86 59 1 86 80 1 86 95 1 86 105 1 86 111 1 86 117 1 86 118 1 86 143 1 86 164 1 86 179 1 86 189 1 86 195 1 86 201 1 86 202 1 86 220 1 86 235 1 86 245 1 86 251 1 86 257 1 86 258 1 86 270 1 86 280 1 86 286 1 86 292 1 86 293 1 86 300 1 86 306 1 86 312 1 86 313 1 86 316 1 86 322 1 86 323 1 86 326 1 86 327 1 86 330 1 86 353 1 86 374 1 86 389 1 86 399 1 86 405 1 86 411 1 86 412 1 86 430 1 86 445 1 86 455 1 86 461 1 86 467 1 86 468 1 86 480 1 86 490 1 86 496 1 86 502 1 86 503 1 86 510 1 86 516 1 86 522 1 86 523 1 86 526 1 86 532 1 86 533 1 86 536 1 86 537 1 86 540 1 86 556 1 86 571 1 86 581 1 86 587 1 86 593 1 86 594 1 86 606 1 86 616 1 86 622 1 86 628 1 86 629 1 86 636 1 86 642 1 86 648 1 86 649 1 86 652 1 86 658 1 86 659 1 86 662 1 86 663 1 86 666 1 86 676 1 86 686 1 86 692 1 86 698 1 86 699 1 86 706 1 86 712 1 86 718 1 86 719 1 86 722 1 86 728 1 86 729 1 86 732 1 86 733 1 86 736 1 86 741 1 86 747 1 86 753 1 86 754 1 86 757 1 86 763 1 86 764 1 86 767 1 86 768 1 86 771 1 86 772 1 86 778 1 86 779 1 86 782 1 86 783 1 86 786 1 86 787 1 86 788 1 86 791 1 86 792 1 86 815 1 86 836 1 86 851 1 86 861 1 86 867 1 86 873 1 86 874 1 86 892 1 86 907 1 86 917 1 86 923 1 86 929 1 86 930 1 86 942 1 86 952 1 86 958 1 86 964 1 86 965 1 86 972 1 86 978 1 86 984 1 86 985 1 86 988 1 86 994 1 86 995 1 86 998 1 86 999 1 86 1002 1 86 1018 1 86 1033 1 86 1043 1 86 1049 1 86 1055 1 86 1056 1 86 1068 1 86 1078 1 86 1084 1 86 1090 1 86 1091 1 86 1098 1 86 1104 1 86 1110 1 86 1111 1 86 1114 1 86 1120 1 86 1121 1 86 1124 1 86 1125 1 86 1128 1 86 1138 1 86 1148 1 86 1154 1 86 1160 1 86 1161 1 86 1168 1 86 1174 1 86 1180 1 86 1181 1 86 1184 1 86 1190 1 86 1191 1 86 1194 1 86 1195 1 86 1198 1 86 1203 1 86 1209 1 86 1215 1 86 1216 1 86 1219 1 86 1225 1 86 1226 1 86 1229 1 86 1230 1 86 1233 1 86 1234 1 86 1240 1 86 1241 1 86 1244 1 86 1245 1 86 1248 1 86 1249 1 86 1250 1 86 1253 1 86 1254 1 86 1270 1 86 1285 1 86 1295 1 86 1301 1 86 1307 1 86 1308 1 86 1320 1 86 1330 1 86 1336 1 86 1342 1 86 1343 1 86 1350 1 86 1356 1 86 1362 1 86 1363 1 86 1366 1 86 1372 1 86 1373 1 86 1376 1 86 1377 1 86 1380 1 86 1390 1 86 1400 1 86 1406 1 86 1412 1 86 1413 1 86 1420 1 86 1426 1 86 1432 1 86 1433 1 86 1436 1 86 1442 1 86 1443 1 86 1446 1 86 1447 1 86 1450 1 86 1455 1 86 1461 1 86 1467 1 86 1468 1 86 1471 1 86 1477 1 86 1478 1 86 1481 1 86 1482 1 86 1485 1 86 1486 1 86 1492 1 86 1493 1 86 1496 1 86 1497 1 86 1500 1 86 1501 1 86 1502 1 86 1505 1 86 1506 1 86 1516 1 86 1526 1 86 1532 1 86 1538 1 86 1539 1 86 1546 1 86 1552 1 86 1558 1 86 1559 1 86 1562 1 86 1568 1 86 1569 1 86 1572 1 86 1573 1 86 1576 1 86 1581 1 86 1587 1 86 1593 1 86 1594 1 86 1597 1 86 1603 1 86 1604 1 86 1607 1 86 1608 1 86 1611 1 86 1612 1 86 1618 1 86 1619 1 86 1622 1 86 1623 1 86 1626 1 86 1627 1 86 1628 1 86 1631 1 86 1632 1 86 1637 1 86 1643 1 86 1649 1 86 1650 1 86 1653 1 86 1659 1 86 1660 1 86 1663 1 86 1664 1 86 1667 1 86 1668 1 86 1674 1 86 1675 1 86 1678 1 86 1679 1 86 1682 1 86 1683 1 86 1684 1 86 1687 1 86 1688 1 86 1689 1 86 1695 1 86 1696 1 86 1699 1 86 1700 1 86 1703 1 86 1704 1 86 1705 1 86 1708 1 86 1709 1 86 1710 1 86 1711 1 86 1714 1 86 1715 1 86 1716 1 86 1739 1 86 1760 1 86 1775 1 86 1785 1 86 1791 1 86 1797 1 86 1798 1 86 1816 1 86 1831 1 86 1841 1 86 1847 1 86 1853 1 86 1854 1 86 1866 1 86 1876 1 86 1882 1 86 1888 1 86 1889 1 86 1896 1 86 1902 1 86 1908 1 86 1909 1 86 1912 1 86 1918 1 86 1919 1 86 1922 1 86 1923 1 86 1926 1 86 1942 1 86 1957 1 86 1967 1 86 1973 1 86 1979 1 86 1980 1 86 1992 1 86 2002 1 86 2008 1 86 2014 1 86 2015 1 86 2022 1 86 2028 1 86 2034 1 86 2035 1 86 2038 1 86 2044 1 86 2045 1 86 2048 1 86 2049 1 86 2052 1 86 2062 1 86 2072 1 86 2078 1 86 2084 1 86 2085 1 86 2092 1 86 2098 1 86 2104 1 86 2105 1 86 2108 1 86 2114 1 86 2115 1 86 2118 1 86 2119 1 86 2122 1 86 2127 1 86 2133 1 86 2139 1 86 2140 1 86 2143 1 86 2149 1 86 2150 1 86 2153 1 86 2154 1 86 2157 1 86 2158 1 86 2164 1 86 2165 1 86 2168 1 86 2169 1 86 2172 1 86 2173 1 86 2174 1 86 2177 1 86 2178 1 86 2194 1 86 2209 1 86 2219 1 86 2225 1 86 2231 1 86 2232 1 86 2244 1 86 2254 1 86 2260 1 86 2266 1 86 2267 1 86 2274 1 86 2280 1 86 2286 1 86 2287 1 86 2290 1 86 2296 1 86 2297 1 86 2300 1 86 2301 1 86 2304 1 86 2314 1 86 2324 1 86 2330 1 86 2336 1 86 2337 1 86 2344 1 86 2350 1 86 2356 1 86 2357 1 86 2360 1 86 2366 1 86 2367 1 86 2370 1 86 2371 1 86 2374 1 86 2379 1 86 2385 1 86 2391 1 86 2392 1 86 2395 1 86 2401 1 86 2402 1 86 2405 1 86 2406 1 86 2409 1 86 2410 1 86 2416 1 86 2417 1 86 2420 1 86 2421 1 86 2424 1 86 2425 1 86 2426 1 86 2429 1 86 2430 1 86 2440 1 86 2450 1 86 2456 1 86 2462 1 86 2463 1 86 2470 1 86 2476 1 86 2482 1 86 2483 1 86 2486 1 86 2492 1 86 2493 1 86 2496 1 86 2497 1 86 2500 1 86 2505 1 86 2511 1 86 2517 1 86 2518 1 86 2521 1 86 2527 1 86 2528 1 86 2531 1 86 2532 1 86 2535 1 86 2536 1 86 2542 1 86 2543 1 86 2546 1 86 2547 1 86 2550 1 86 2551 1 86 2552 1 86 2555 1 86 2556 1 86 2561 1 86 2567 1 86 2573 1 86 2574 1 86 2577 1 86 2583 1 86 2584 1 86 2587 1 86 2588 1 86 2591 1 86 2592 1 86 2598 1 86 2599 1 86 2602 1 86 2603 1 86 2606 1 86 2607 1 86 2608 1 86 2611 1 86 2612 1 86 2613 1 86 2619 1 86 2620 1 86 2623 1 86 2624 1 86 2627 1 86 2628 1 86 2629 1 86 2632 1 86 2633 1 86 2634 1 86 2635 1 86 2638 1 86 2639 1 86 2640 1 86 2656 1 86 2671 1 86 2681 1 86 2687 1 86 2693 1 86 2694 1 86 2706 1 86 2716 1 86 2722 1 86 2728 1 86 2729 1 86 2736 1 86 2742 1 86 2748 1 86 2749 1 86 2752 1 86 2758 1 86 2759 1 86 2762 1 86 2763 1 86 2766 1 86 2776 1 86 2786 1 86 2792 1 86 2798 1 86 2799 1 86 2806 1 86 2812 1 86 2818 1 86 2819 1 86 2822 1 86 2828 1 86 2829 1 86 2832 1 86 2833 1 86 2836 1 86 2841 1 86 2847 1 86 2853 1 86 2854 1 86 2857 1 86 2863 1 86 2864 1 86 2867 1 86 2868 1 86 2871 1 86 2872 1 86 2878 1 86 2879 1 86 2882 1 86 2883 1 86 2886 1 86 2887 1 86 2888 1 86 2891 1 86 2892 1 86 2902 1 86 2912 1 86 2918 1 86 2924 1 86 2925 1 86 2932 1 86 2938 1 86 2944 1 86 2945 1 86 2948 1 86 2954 1 86 2955 1 86 2958 1 86 2959 1 86 2962 1 86 2967 1 86 2973 1 86 2979 1 86 2980 1 86 2983 1 86 2989 1 86 2990 1 86 2993 1 86 2994 1 86 2997 1 86 2998 1 86 3004 1 86 3005 1 86 3008 1 86 3009 1 86 3012 1 86 3013 1 86 3014 1 86 3017 1 86 3018 1 86 3023 1 86 3029 1 86 3035 1 86 3036 1 86 3039 1 86 3045 1 86 3046 1 86 3049 1 86 3050 1 86 3053 1 86 3054 1 86 3060 1 86 3061 1 86 3064 1 86 3065 1 86 3068 1 86 3069 1 86 3070 1 86 3073 1 86 3074 1 86 3075 1 86 3081 1 86 3082 1 86 3085 1 86 3086 1 86 3089 1 86 3090 1 86 3091 1 86 3094 1 86 3095 1 86 3096 1 86 3097 1 86 3100 1 86 3101 1 86 3102 1 86 3112 1 86 3122 1 86 3128 1 86 3134 1 86 3135 1 86 3142 1 86 3148 1 86 3154 1 86 3155 1 86 3158 1 86 3164 1 86 3165 1 86 3168 1 86 3169 1 86 3172 1 86 3177 1 86 3183 1 86 3189 1 86 3190 1 86 3193 1 86 3199 1 86 3200 1 86 3203 1 86 3204 1 86 3207 1 86 3208 1 86 3214 1 86 3215 1 86 3218 1 86 3219 1 86 3222 1 86 3223 1 86 3224 1 86 3227 1 86 3228 1 86 3233 1 86 3239 1 86 3245 1 86 3246 1 86 3249 1 86 3255 1 86 3256 1 86 3259 1 86 3260 1 86 3263 1 86 3264 1 86 3270 1 86 3271 1 86 3274 1 86 3275 1 86 3278 1 86 3279 1 86 3280 1 86 3283 1 86 3284 1 86 3285 1 86 3291 1 86 3292 1 86 3295 1 86 3296 1 86 3299 1 86 3300 1 86 3301 1 86 3304 1 86 3305 1 86 3306 1 86 3307 1 86 3310 1 86 3311 1 86 3312 1 86 3317 1 86 3323 1 86 3329 1 86 3330 1 86 3333 1 86 3339 1 86 3340 1 86 3343 1 86 3344 1 86 3347 1 86 3348 1 86 3354 1 86 3355 1 86 3358 1 86 3359 1 86 3362 1 86 3363 1 86 3364 1 86 3367 1 86 3368 1 86 3369 1 86 3375 1 86 3376 1 86 3379 1 86 3380 1 86 3383 1 86 3384 1 86 3385 1 86 3388 1 86 3389 1 86 3390 1 86 3391 1 86 3394 1 86 3395 1 86 3396 1 86 3397 1 86 3403 1 86 3404 1 86 3407 1 86 3408 1 86 3411 1 86 3412 1 86 3413 1 86 3416 1 86 3417 1 86 3418 1 86 3419 1 86 3422 1 86 3423 1 86 3424 1 86 3425 1 86 3426 1 86 3429 1 86 3430 1 86 3431 1 86 3432 1 87 32 1 87 60 1 87 81 1 87 96 1 87 106 1 87 112 1 87 117 1 87 119 1 87 144 1 87 165 1 87 180 1 87 190 1 87 196 1 87 201 1 87 203 1 87 221 1 87 236 1 87 246 1 87 252 1 87 257 1 87 259 1 87 271 1 87 281 1 87 287 1 87 292 1 87 294 1 87 301 1 87 307 1 87 312 1 87 314 1 87 317 1 87 322 1 87 324 1 87 326 1 87 328 1 87 330 1 87 354 1 87 375 1 87 390 1 87 400 1 87 406 1 87 411 1 87 413 1 87 431 1 87 446 1 87 456 1 87 462 1 87 467 1 87 469 1 87 481 1 87 491 1 87 497 1 87 502 1 87 504 1 87 511 1 87 517 1 87 522 1 87 524 1 87 527 1 87 532 1 87 534 1 87 536 1 87 538 1 87 540 1 87 557 1 87 572 1 87 582 1 87 588 1 87 593 1 87 595 1 87 607 1 87 617 1 87 623 1 87 628 1 87 630 1 87 637 1 87 643 1 87 648 1 87 650 1 87 653 1 87 658 1 87 660 1 87 662 1 87 664 1 87 666 1 87 677 1 87 687 1 87 693 1 87 698 1 87 700 1 87 707 1 87 713 1 87 718 1 87 720 1 87 723 1 87 728 1 87 730 1 87 732 1 87 734 1 87 736 1 87 742 1 87 748 1 87 753 1 87 755 1 87 758 1 87 763 1 87 765 1 87 767 1 87 769 1 87 771 1 87 773 1 87 778 1 87 780 1 87 782 1 87 784 1 87 786 1 87 787 1 87 789 1 87 791 1 87 792 1 87 816 1 87 837 1 87 852 1 87 862 1 87 868 1 87 873 1 87 875 1 87 893 1 87 908 1 87 918 1 87 924 1 87 929 1 87 931 1 87 943 1 87 953 1 87 959 1 87 964 1 87 966 1 87 973 1 87 979 1 87 984 1 87 986 1 87 989 1 87 994 1 87 996 1 87 998 1 87 1000 1 87 1002 1 87 1019 1 87 1034 1 87 1044 1 87 1050 1 87 1055 1 87 1057 1 87 1069 1 87 1079 1 87 1085 1 87 1090 1 87 1092 1 87 1099 1 87 1105 1 87 1110 1 87 1112 1 87 1115 1 87 1120 1 87 1122 1 87 1124 1 87 1126 1 87 1128 1 87 1139 1 87 1149 1 87 1155 1 87 1160 1 87 1162 1 87 1169 1 87 1175 1 87 1180 1 87 1182 1 87 1185 1 87 1190 1 87 1192 1 87 1194 1 87 1196 1 87 1198 1 87 1204 1 87 1210 1 87 1215 1 87 1217 1 87 1220 1 87 1225 1 87 1227 1 87 1229 1 87 1231 1 87 1233 1 87 1235 1 87 1240 1 87 1242 1 87 1244 1 87 1246 1 87 1248 1 87 1249 1 87 1251 1 87 1253 1 87 1254 1 87 1271 1 87 1286 1 87 1296 1 87 1302 1 87 1307 1 87 1309 1 87 1321 1 87 1331 1 87 1337 1 87 1342 1 87 1344 1 87 1351 1 87 1357 1 87 1362 1 87 1364 1 87 1367 1 87 1372 1 87 1374 1 87 1376 1 87 1378 1 87 1380 1 87 1391 1 87 1401 1 87 1407 1 87 1412 1 87 1414 1 87 1421 1 87 1427 1 87 1432 1 87 1434 1 87 1437 1 87 1442 1 87 1444 1 87 1446 1 87 1448 1 87 1450 1 87 1456 1 87 1462 1 87 1467 1 87 1469 1 87 1472 1 87 1477 1 87 1479 1 87 1481 1 87 1483 1 87 1485 1 87 1487 1 87 1492 1 87 1494 1 87 1496 1 87 1498 1 87 1500 1 87 1501 1 87 1503 1 87 1505 1 87 1506 1 87 1517 1 87 1527 1 87 1533 1 87 1538 1 87 1540 1 87 1547 1 87 1553 1 87 1558 1 87 1560 1 87 1563 1 87 1568 1 87 1570 1 87 1572 1 87 1574 1 87 1576 1 87 1582 1 87 1588 1 87 1593 1 87 1595 1 87 1598 1 87 1603 1 87 1605 1 87 1607 1 87 1609 1 87 1611 1 87 1613 1 87 1618 1 87 1620 1 87 1622 1 87 1624 1 87 1626 1 87 1627 1 87 1629 1 87 1631 1 87 1632 1 87 1638 1 87 1644 1 87 1649 1 87 1651 1 87 1654 1 87 1659 1 87 1661 1 87 1663 1 87 1665 1 87 1667 1 87 1669 1 87 1674 1 87 1676 1 87 1678 1 87 1680 1 87 1682 1 87 1683 1 87 1685 1 87 1687 1 87 1688 1 87 1690 1 87 1695 1 87 1697 1 87 1699 1 87 1701 1 87 1703 1 87 1704 1 87 1706 1 87 1708 1 87 1709 1 87 1710 1 87 1712 1 87 1714 1 87 1715 1 87 1716 1 87 1740 1 87 1761 1 87 1776 1 87 1786 1 87 1792 1 87 1797 1 87 1799 1 87 1817 1 87 1832 1 87 1842 1 87 1848 1 87 1853 1 87 1855 1 87 1867 1 87 1877 1 87 1883 1 87 1888 1 87 1890 1 87 1897 1 87 1903 1 87 1908 1 87 1910 1 87 1913 1 87 1918 1 87 1920 1 87 1922 1 87 1924 1 87 1926 1 87 1943 1 87 1958 1 87 1968 1 87 1974 1 87 1979 1 87 1981 1 87 1993 1 87 2003 1 87 2009 1 87 2014 1 87 2016 1 87 2023 1 87 2029 1 87 2034 1 87 2036 1 87 2039 1 87 2044 1 87 2046 1 87 2048 1 87 2050 1 87 2052 1 87 2063 1 87 2073 1 87 2079 1 87 2084 1 87 2086 1 87 2093 1 87 2099 1 87 2104 1 87 2106 1 87 2109 1 87 2114 1 87 2116 1 87 2118 1 87 2120 1 87 2122 1 87 2128 1 87 2134 1 87 2139 1 87 2141 1 87 2144 1 87 2149 1 87 2151 1 87 2153 1 87 2155 1 87 2157 1 87 2159 1 87 2164 1 87 2166 1 87 2168 1 87 2170 1 87 2172 1 87 2173 1 87 2175 1 87 2177 1 87 2178 1 87 2195 1 87 2210 1 87 2220 1 87 2226 1 87 2231 1 87 2233 1 87 2245 1 87 2255 1 87 2261 1 87 2266 1 87 2268 1 87 2275 1 87 2281 1 87 2286 1 87 2288 1 87 2291 1 87 2296 1 87 2298 1 87 2300 1 87 2302 1 87 2304 1 87 2315 1 87 2325 1 87 2331 1 87 2336 1 87 2338 1 87 2345 1 87 2351 1 87 2356 1 87 2358 1 87 2361 1 87 2366 1 87 2368 1 87 2370 1 87 2372 1 87 2374 1 87 2380 1 87 2386 1 87 2391 1 87 2393 1 87 2396 1 87 2401 1 87 2403 1 87 2405 1 87 2407 1 87 2409 1 87 2411 1 87 2416 1 87 2418 1 87 2420 1 87 2422 1 87 2424 1 87 2425 1 87 2427 1 87 2429 1 87 2430 1 87 2441 1 87 2451 1 87 2457 1 87 2462 1 87 2464 1 87 2471 1 87 2477 1 87 2482 1 87 2484 1 87 2487 1 87 2492 1 87 2494 1 87 2496 1 87 2498 1 87 2500 1 87 2506 1 87 2512 1 87 2517 1 87 2519 1 87 2522 1 87 2527 1 87 2529 1 87 2531 1 87 2533 1 87 2535 1 87 2537 1 87 2542 1 87 2544 1 87 2546 1 87 2548 1 87 2550 1 87 2551 1 87 2553 1 87 2555 1 87 2556 1 87 2562 1 87 2568 1 87 2573 1 87 2575 1 87 2578 1 87 2583 1 87 2585 1 87 2587 1 87 2589 1 87 2591 1 87 2593 1 87 2598 1 87 2600 1 87 2602 1 87 2604 1 87 2606 1 87 2607 1 87 2609 1 87 2611 1 87 2612 1 87 2614 1 87 2619 1 87 2621 1 87 2623 1 87 2625 1 87 2627 1 87 2628 1 87 2630 1 87 2632 1 87 2633 1 87 2634 1 87 2636 1 87 2638 1 87 2639 1 87 2640 1 87 2657 1 87 2672 1 87 2682 1 87 2688 1 87 2693 1 87 2695 1 87 2707 1 87 2717 1 87 2723 1 87 2728 1 87 2730 1 87 2737 1 87 2743 1 87 2748 1 87 2750 1 87 2753 1 87 2758 1 87 2760 1 87 2762 1 87 2764 1 87 2766 1 87 2777 1 87 2787 1 87 2793 1 87 2798 1 87 2800 1 87 2807 1 87 2813 1 87 2818 1 87 2820 1 87 2823 1 87 2828 1 87 2830 1 87 2832 1 87 2834 1 87 2836 1 87 2842 1 87 2848 1 87 2853 1 87 2855 1 87 2858 1 87 2863 1 87 2865 1 87 2867 1 87 2869 1 87 2871 1 87 2873 1 87 2878 1 87 2880 1 87 2882 1 87 2884 1 87 2886 1 87 2887 1 87 2889 1 87 2891 1 87 2892 1 87 2903 1 87 2913 1 87 2919 1 87 2924 1 87 2926 1 87 2933 1 87 2939 1 87 2944 1 87 2946 1 87 2949 1 87 2954 1 87 2956 1 87 2958 1 87 2960 1 87 2962 1 87 2968 1 87 2974 1 87 2979 1 87 2981 1 87 2984 1 87 2989 1 87 2991 1 87 2993 1 87 2995 1 87 2997 1 87 2999 1 87 3004 1 87 3006 1 87 3008 1 87 3010 1 87 3012 1 87 3013 1 87 3015 1 87 3017 1 87 3018 1 87 3024 1 87 3030 1 87 3035 1 87 3037 1 87 3040 1 87 3045 1 87 3047 1 87 3049 1 87 3051 1 87 3053 1 87 3055 1 87 3060 1 87 3062 1 87 3064 1 87 3066 1 87 3068 1 87 3069 1 87 3071 1 87 3073 1 87 3074 1 87 3076 1 87 3081 1 87 3083 1 87 3085 1 87 3087 1 87 3089 1 87 3090 1 87 3092 1 87 3094 1 87 3095 1 87 3096 1 87 3098 1 87 3100 1 87 3101 1 87 3102 1 87 3113 1 87 3123 1 87 3129 1 87 3134 1 87 3136 1 87 3143 1 87 3149 1 87 3154 1 87 3156 1 87 3159 1 87 3164 1 87 3166 1 87 3168 1 87 3170 1 87 3172 1 87 3178 1 87 3184 1 87 3189 1 87 3191 1 87 3194 1 87 3199 1 87 3201 1 87 3203 1 87 3205 1 87 3207 1 87 3209 1 87 3214 1 87 3216 1 87 3218 1 87 3220 1 87 3222 1 87 3223 1 87 3225 1 87 3227 1 87 3228 1 87 3234 1 87 3240 1 87 3245 1 87 3247 1 87 3250 1 87 3255 1 87 3257 1 87 3259 1 87 3261 1 87 3263 1 87 3265 1 87 3270 1 87 3272 1 87 3274 1 87 3276 1 87 3278 1 87 3279 1 87 3281 1 87 3283 1 87 3284 1 87 3286 1 87 3291 1 87 3293 1 87 3295 1 87 3297 1 87 3299 1 87 3300 1 87 3302 1 87 3304 1 87 3305 1 87 3306 1 87 3308 1 87 3310 1 87 3311 1 87 3312 1 87 3318 1 87 3324 1 87 3329 1 87 3331 1 87 3334 1 87 3339 1 87 3341 1 87 3343 1 87 3345 1 87 3347 1 87 3349 1 87 3354 1 87 3356 1 87 3358 1 87 3360 1 87 3362 1 87 3363 1 87 3365 1 87 3367 1 87 3368 1 87 3370 1 87 3375 1 87 3377 1 87 3379 1 87 3381 1 87 3383 1 87 3384 1 87 3386 1 87 3388 1 87 3389 1 87 3390 1 87 3392 1 87 3394 1 87 3395 1 87 3396 1 87 3398 1 87 3403 1 87 3405 1 87 3407 1 87 3409 1 87 3411 1 87 3412 1 87 3414 1 87 3416 1 87 3417 1 87 3418 1 87 3420 1 87 3422 1 87 3423 1 87 3424 1 87 3425 1 87 3427 1 87 3429 1 87 3430 1 87 3431 1 87 3432 1 88 33 1 88 61 1 88 82 1 88 97 1 88 107 1 88 113 1 88 118 1 88 119 1 88 145 1 88 166 1 88 181 1 88 191 1 88 197 1 88 202 1 88 203 1 88 222 1 88 237 1 88 247 1 88 253 1 88 258 1 88 259 1 88 272 1 88 282 1 88 288 1 88 293 1 88 294 1 88 302 1 88 308 1 88 313 1 88 314 1 88 318 1 88 323 1 88 324 1 88 327 1 88 328 1 88 330 1 88 355 1 88 376 1 88 391 1 88 401 1 88 407 1 88 412 1 88 413 1 88 432 1 88 447 1 88 457 1 88 463 1 88 468 1 88 469 1 88 482 1 88 492 1 88 498 1 88 503 1 88 504 1 88 512 1 88 518 1 88 523 1 88 524 1 88 528 1 88 533 1 88 534 1 88 537 1 88 538 1 88 540 1 88 558 1 88 573 1 88 583 1 88 589 1 88 594 1 88 595 1 88 608 1 88 618 1 88 624 1 88 629 1 88 630 1 88 638 1 88 644 1 88 649 1 88 650 1 88 654 1 88 659 1 88 660 1 88 663 1 88 664 1 88 666 1 88 678 1 88 688 1 88 694 1 88 699 1 88 700 1 88 708 1 88 714 1 88 719 1 88 720 1 88 724 1 88 729 1 88 730 1 88 733 1 88 734 1 88 736 1 88 743 1 88 749 1 88 754 1 88 755 1 88 759 1 88 764 1 88 765 1 88 768 1 88 769 1 88 771 1 88 774 1 88 779 1 88 780 1 88 783 1 88 784 1 88 786 1 88 788 1 88 789 1 88 791 1 88 792 1 88 817 1 88 838 1 88 853 1 88 863 1 88 869 1 88 874 1 88 875 1 88 894 1 88 909 1 88 919 1 88 925 1 88 930 1 88 931 1 88 944 1 88 954 1 88 960 1 88 965 1 88 966 1 88 974 1 88 980 1 88 985 1 88 986 1 88 990 1 88 995 1 88 996 1 88 999 1 88 1000 1 88 1002 1 88 1020 1 88 1035 1 88 1045 1 88 1051 1 88 1056 1 88 1057 1 88 1070 1 88 1080 1 88 1086 1 88 1091 1 88 1092 1 88 1100 1 88 1106 1 88 1111 1 88 1112 1 88 1116 1 88 1121 1 88 1122 1 88 1125 1 88 1126 1 88 1128 1 88 1140 1 88 1150 1 88 1156 1 88 1161 1 88 1162 1 88 1170 1 88 1176 1 88 1181 1 88 1182 1 88 1186 1 88 1191 1 88 1192 1 88 1195 1 88 1196 1 88 1198 1 88 1205 1 88 1211 1 88 1216 1 88 1217 1 88 1221 1 88 1226 1 88 1227 1 88 1230 1 88 1231 1 88 1233 1 88 1236 1 88 1241 1 88 1242 1 88 1245 1 88 1246 1 88 1248 1 88 1250 1 88 1251 1 88 1253 1 88 1254 1 88 1272 1 88 1287 1 88 1297 1 88 1303 1 88 1308 1 88 1309 1 88 1322 1 88 1332 1 88 1338 1 88 1343 1 88 1344 1 88 1352 1 88 1358 1 88 1363 1 88 1364 1 88 1368 1 88 1373 1 88 1374 1 88 1377 1 88 1378 1 88 1380 1 88 1392 1 88 1402 1 88 1408 1 88 1413 1 88 1414 1 88 1422 1 88 1428 1 88 1433 1 88 1434 1 88 1438 1 88 1443 1 88 1444 1 88 1447 1 88 1448 1 88 1450 1 88 1457 1 88 1463 1 88 1468 1 88 1469 1 88 1473 1 88 1478 1 88 1479 1 88 1482 1 88 1483 1 88 1485 1 88 1488 1 88 1493 1 88 1494 1 88 1497 1 88 1498 1 88 1500 1 88 1502 1 88 1503 1 88 1505 1 88 1506 1 88 1518 1 88 1528 1 88 1534 1 88 1539 1 88 1540 1 88 1548 1 88 1554 1 88 1559 1 88 1560 1 88 1564 1 88 1569 1 88 1570 1 88 1573 1 88 1574 1 88 1576 1 88 1583 1 88 1589 1 88 1594 1 88 1595 1 88 1599 1 88 1604 1 88 1605 1 88 1608 1 88 1609 1 88 1611 1 88 1614 1 88 1619 1 88 1620 1 88 1623 1 88 1624 1 88 1626 1 88 1628 1 88 1629 1 88 1631 1 88 1632 1 88 1639 1 88 1645 1 88 1650 1 88 1651 1 88 1655 1 88 1660 1 88 1661 1 88 1664 1 88 1665 1 88 1667 1 88 1670 1 88 1675 1 88 1676 1 88 1679 1 88 1680 1 88 1682 1 88 1684 1 88 1685 1 88 1687 1 88 1688 1 88 1691 1 88 1696 1 88 1697 1 88 1700 1 88 1701 1 88 1703 1 88 1705 1 88 1706 1 88 1708 1 88 1709 1 88 1711 1 88 1712 1 88 1714 1 88 1715 1 88 1716 1 88 1741 1 88 1762 1 88 1777 1 88 1787 1 88 1793 1 88 1798 1 88 1799 1 88 1818 1 88 1833 1 88 1843 1 88 1849 1 88 1854 1 88 1855 1 88 1868 1 88 1878 1 88 1884 1 88 1889 1 88 1890 1 88 1898 1 88 1904 1 88 1909 1 88 1910 1 88 1914 1 88 1919 1 88 1920 1 88 1923 1 88 1924 1 88 1926 1 88 1944 1 88 1959 1 88 1969 1 88 1975 1 88 1980 1 88 1981 1 88 1994 1 88 2004 1 88 2010 1 88 2015 1 88 2016 1 88 2024 1 88 2030 1 88 2035 1 88 2036 1 88 2040 1 88 2045 1 88 2046 1 88 2049 1 88 2050 1 88 2052 1 88 2064 1 88 2074 1 88 2080 1 88 2085 1 88 2086 1 88 2094 1 88 2100 1 88 2105 1 88 2106 1 88 2110 1 88 2115 1 88 2116 1 88 2119 1 88 2120 1 88 2122 1 88 2129 1 88 2135 1 88 2140 1 88 2141 1 88 2145 1 88 2150 1 88 2151 1 88 2154 1 88 2155 1 88 2157 1 88 2160 1 88 2165 1 88 2166 1 88 2169 1 88 2170 1 88 2172 1 88 2174 1 88 2175 1 88 2177 1 88 2178 1 88 2196 1 88 2211 1 88 2221 1 88 2227 1 88 2232 1 88 2233 1 88 2246 1 88 2256 1 88 2262 1 88 2267 1 88 2268 1 88 2276 1 88 2282 1 88 2287 1 88 2288 1 88 2292 1 88 2297 1 88 2298 1 88 2301 1 88 2302 1 88 2304 1 88 2316 1 88 2326 1 88 2332 1 88 2337 1 88 2338 1 88 2346 1 88 2352 1 88 2357 1 88 2358 1 88 2362 1 88 2367 1 88 2368 1 88 2371 1 88 2372 1 88 2374 1 88 2381 1 88 2387 1 88 2392 1 88 2393 1 88 2397 1 88 2402 1 88 2403 1 88 2406 1 88 2407 1 88 2409 1 88 2412 1 88 2417 1 88 2418 1 88 2421 1 88 2422 1 88 2424 1 88 2426 1 88 2427 1 88 2429 1 88 2430 1 88 2442 1 88 2452 1 88 2458 1 88 2463 1 88 2464 1 88 2472 1 88 2478 1 88 2483 1 88 2484 1 88 2488 1 88 2493 1 88 2494 1 88 2497 1 88 2498 1 88 2500 1 88 2507 1 88 2513 1 88 2518 1 88 2519 1 88 2523 1 88 2528 1 88 2529 1 88 2532 1 88 2533 1 88 2535 1 88 2538 1 88 2543 1 88 2544 1 88 2547 1 88 2548 1 88 2550 1 88 2552 1 88 2553 1 88 2555 1 88 2556 1 88 2563 1 88 2569 1 88 2574 1 88 2575 1 88 2579 1 88 2584 1 88 2585 1 88 2588 1 88 2589 1 88 2591 1 88 2594 1 88 2599 1 88 2600 1 88 2603 1 88 2604 1 88 2606 1 88 2608 1 88 2609 1 88 2611 1 88 2612 1 88 2615 1 88 2620 1 88 2621 1 88 2624 1 88 2625 1 88 2627 1 88 2629 1 88 2630 1 88 2632 1 88 2633 1 88 2635 1 88 2636 1 88 2638 1 88 2639 1 88 2640 1 88 2658 1 88 2673 1 88 2683 1 88 2689 1 88 2694 1 88 2695 1 88 2708 1 88 2718 1 88 2724 1 88 2729 1 88 2730 1 88 2738 1 88 2744 1 88 2749 1 88 2750 1 88 2754 1 88 2759 1 88 2760 1 88 2763 1 88 2764 1 88 2766 1 88 2778 1 88 2788 1 88 2794 1 88 2799 1 88 2800 1 88 2808 1 88 2814 1 88 2819 1 88 2820 1 88 2824 1 88 2829 1 88 2830 1 88 2833 1 88 2834 1 88 2836 1 88 2843 1 88 2849 1 88 2854 1 88 2855 1 88 2859 1 88 2864 1 88 2865 1 88 2868 1 88 2869 1 88 2871 1 88 2874 1 88 2879 1 88 2880 1 88 2883 1 88 2884 1 88 2886 1 88 2888 1 88 2889 1 88 2891 1 88 2892 1 88 2904 1 88 2914 1 88 2920 1 88 2925 1 88 2926 1 88 2934 1 88 2940 1 88 2945 1 88 2946 1 88 2950 1 88 2955 1 88 2956 1 88 2959 1 88 2960 1 88 2962 1 88 2969 1 88 2975 1 88 2980 1 88 2981 1 88 2985 1 88 2990 1 88 2991 1 88 2994 1 88 2995 1 88 2997 1 88 3000 1 88 3005 1 88 3006 1 88 3009 1 88 3010 1 88 3012 1 88 3014 1 88 3015 1 88 3017 1 88 3018 1 88 3025 1 88 3031 1 88 3036 1 88 3037 1 88 3041 1 88 3046 1 88 3047 1 88 3050 1 88 3051 1 88 3053 1 88 3056 1 88 3061 1 88 3062 1 88 3065 1 88 3066 1 88 3068 1 88 3070 1 88 3071 1 88 3073 1 88 3074 1 88 3077 1 88 3082 1 88 3083 1 88 3086 1 88 3087 1 88 3089 1 88 3091 1 88 3092 1 88 3094 1 88 3095 1 88 3097 1 88 3098 1 88 3100 1 88 3101 1 88 3102 1 88 3114 1 88 3124 1 88 3130 1 88 3135 1 88 3136 1 88 3144 1 88 3150 1 88 3155 1 88 3156 1 88 3160 1 88 3165 1 88 3166 1 88 3169 1 88 3170 1 88 3172 1 88 3179 1 88 3185 1 88 3190 1 88 3191 1 88 3195 1 88 3200 1 88 3201 1 88 3204 1 88 3205 1 88 3207 1 88 3210 1 88 3215 1 88 3216 1 88 3219 1 88 3220 1 88 3222 1 88 3224 1 88 3225 1 88 3227 1 88 3228 1 88 3235 1 88 3241 1 88 3246 1 88 3247 1 88 3251 1 88 3256 1 88 3257 1 88 3260 1 88 3261 1 88 3263 1 88 3266 1 88 3271 1 88 3272 1 88 3275 1 88 3276 1 88 3278 1 88 3280 1 88 3281 1 88 3283 1 88 3284 1 88 3287 1 88 3292 1 88 3293 1 88 3296 1 88 3297 1 88 3299 1 88 3301 1 88 3302 1 88 3304 1 88 3305 1 88 3307 1 88 3308 1 88 3310 1 88 3311 1 88 3312 1 88 3319 1 88 3325 1 88 3330 1 88 3331 1 88 3335 1 88 3340 1 88 3341 1 88 3344 1 88 3345 1 88 3347 1 88 3350 1 88 3355 1 88 3356 1 88 3359 1 88 3360 1 88 3362 1 88 3364 1 88 3365 1 88 3367 1 88 3368 1 88 3371 1 88 3376 1 88 3377 1 88 3380 1 88 3381 1 88 3383 1 88 3385 1 88 3386 1 88 3388 1 88 3389 1 88 3391 1 88 3392 1 88 3394 1 88 3395 1 88 3396 1 88 3399 1 88 3404 1 88 3405 1 88 3408 1 88 3409 1 88 3411 1 88 3413 1 88 3414 1 88 3416 1 88 3417 1 88 3419 1 88 3420 1 88 3422 1 88 3423 1 88 3424 1 88 3426 1 88 3427 1 88 3429 1 88 3430 1 88 3431 1 88 3432 1 89 34 1 89 62 1 89 83 1 89 98 1 89 108 1 89 114 1 89 117 1 89 120 1 89 146 1 89 167 1 89 182 1 89 192 1 89 198 1 89 201 1 89 204 1 89 223 1 89 238 1 89 248 1 89 254 1 89 257 1 89 260 1 89 273 1 89 283 1 89 289 1 89 292 1 89 295 1 89 303 1 89 309 1 89 312 1 89 315 1 89 319 1 89 322 1 89 325 1 89 326 1 89 329 1 89 330 1 89 356 1 89 377 1 89 392 1 89 402 1 89 408 1 89 411 1 89 414 1 89 433 1 89 448 1 89 458 1 89 464 1 89 467 1 89 470 1 89 483 1 89 493 1 89 499 1 89 502 1 89 505 1 89 513 1 89 519 1 89 522 1 89 525 1 89 529 1 89 532 1 89 535 1 89 536 1 89 539 1 89 540 1 89 559 1 89 574 1 89 584 1 89 590 1 89 593 1 89 596 1 89 609 1 89 619 1 89 625 1 89 628 1 89 631 1 89 639 1 89 645 1 89 648 1 89 651 1 89 655 1 89 658 1 89 661 1 89 662 1 89 665 1 89 666 1 89 679 1 89 689 1 89 695 1 89 698 1 89 701 1 89 709 1 89 715 1 89 718 1 89 721 1 89 725 1 89 728 1 89 731 1 89 732 1 89 735 1 89 736 1 89 744 1 89 750 1 89 753 1 89 756 1 89 760 1 89 763 1 89 766 1 89 767 1 89 770 1 89 771 1 89 775 1 89 778 1 89 781 1 89 782 1 89 785 1 89 786 1 89 787 1 89 790 1 89 791 1 89 792 1 89 818 1 89 839 1 89 854 1 89 864 1 89 870 1 89 873 1 89 876 1 89 895 1 89 910 1 89 920 1 89 926 1 89 929 1 89 932 1 89 945 1 89 955 1 89 961 1 89 964 1 89 967 1 89 975 1 89 981 1 89 984 1 89 987 1 89 991 1 89 994 1 89 997 1 89 998 1 89 1001 1 89 1002 1 89 1021 1 89 1036 1 89 1046 1 89 1052 1 89 1055 1 89 1058 1 89 1071 1 89 1081 1 89 1087 1 89 1090 1 89 1093 1 89 1101 1 89 1107 1 89 1110 1 89 1113 1 89 1117 1 89 1120 1 89 1123 1 89 1124 1 89 1127 1 89 1128 1 89 1141 1 89 1151 1 89 1157 1 89 1160 1 89 1163 1 89 1171 1 89 1177 1 89 1180 1 89 1183 1 89 1187 1 89 1190 1 89 1193 1 89 1194 1 89 1197 1 89 1198 1 89 1206 1 89 1212 1 89 1215 1 89 1218 1 89 1222 1 89 1225 1 89 1228 1 89 1229 1 89 1232 1 89 1233 1 89 1237 1 89 1240 1 89 1243 1 89 1244 1 89 1247 1 89 1248 1 89 1249 1 89 1252 1 89 1253 1 89 1254 1 89 1273 1 89 1288 1 89 1298 1 89 1304 1 89 1307 1 89 1310 1 89 1323 1 89 1333 1 89 1339 1 89 1342 1 89 1345 1 89 1353 1 89 1359 1 89 1362 1 89 1365 1 89 1369 1 89 1372 1 89 1375 1 89 1376 1 89 1379 1 89 1380 1 89 1393 1 89 1403 1 89 1409 1 89 1412 1 89 1415 1 89 1423 1 89 1429 1 89 1432 1 89 1435 1 89 1439 1 89 1442 1 89 1445 1 89 1446 1 89 1449 1 89 1450 1 89 1458 1 89 1464 1 89 1467 1 89 1470 1 89 1474 1 89 1477 1 89 1480 1 89 1481 1 89 1484 1 89 1485 1 89 1489 1 89 1492 1 89 1495 1 89 1496 1 89 1499 1 89 1500 1 89 1501 1 89 1504 1 89 1505 1 89 1506 1 89 1519 1 89 1529 1 89 1535 1 89 1538 1 89 1541 1 89 1549 1 89 1555 1 89 1558 1 89 1561 1 89 1565 1 89 1568 1 89 1571 1 89 1572 1 89 1575 1 89 1576 1 89 1584 1 89 1590 1 89 1593 1 89 1596 1 89 1600 1 89 1603 1 89 1606 1 89 1607 1 89 1610 1 89 1611 1 89 1615 1 89 1618 1 89 1621 1 89 1622 1 89 1625 1 89 1626 1 89 1627 1 89 1630 1 89 1631 1 89 1632 1 89 1640 1 89 1646 1 89 1649 1 89 1652 1 89 1656 1 89 1659 1 89 1662 1 89 1663 1 89 1666 1 89 1667 1 89 1671 1 89 1674 1 89 1677 1 89 1678 1 89 1681 1 89 1682 1 89 1683 1 89 1686 1 89 1687 1 89 1688 1 89 1692 1 89 1695 1 89 1698 1 89 1699 1 89 1702 1 89 1703 1 89 1704 1 89 1707 1 89 1708 1 89 1709 1 89 1710 1 89 1713 1 89 1714 1 89 1715 1 89 1716 1 89 1742 1 89 1763 1 89 1778 1 89 1788 1 89 1794 1 89 1797 1 89 1800 1 89 1819 1 89 1834 1 89 1844 1 89 1850 1 89 1853 1 89 1856 1 89 1869 1 89 1879 1 89 1885 1 89 1888 1 89 1891 1 89 1899 1 89 1905 1 89 1908 1 89 1911 1 89 1915 1 89 1918 1 89 1921 1 89 1922 1 89 1925 1 89 1926 1 89 1945 1 89 1960 1 89 1970 1 89 1976 1 89 1979 1 89 1982 1 89 1995 1 89 2005 1 89 2011 1 89 2014 1 89 2017 1 89 2025 1 89 2031 1 89 2034 1 89 2037 1 89 2041 1 89 2044 1 89 2047 1 89 2048 1 89 2051 1 89 2052 1 89 2065 1 89 2075 1 89 2081 1 89 2084 1 89 2087 1 89 2095 1 89 2101 1 89 2104 1 89 2107 1 89 2111 1 89 2114 1 89 2117 1 89 2118 1 89 2121 1 89 2122 1 89 2130 1 89 2136 1 89 2139 1 89 2142 1 89 2146 1 89 2149 1 89 2152 1 89 2153 1 89 2156 1 89 2157 1 89 2161 1 89 2164 1 89 2167 1 89 2168 1 89 2171 1 89 2172 1 89 2173 1 89 2176 1 89 2177 1 89 2178 1 89 2197 1 89 2212 1 89 2222 1 89 2228 1 89 2231 1 89 2234 1 89 2247 1 89 2257 1 89 2263 1 89 2266 1 89 2269 1 89 2277 1 89 2283 1 89 2286 1 89 2289 1 89 2293 1 89 2296 1 89 2299 1 89 2300 1 89 2303 1 89 2304 1 89 2317 1 89 2327 1 89 2333 1 89 2336 1 89 2339 1 89 2347 1 89 2353 1 89 2356 1 89 2359 1 89 2363 1 89 2366 1 89 2369 1 89 2370 1 89 2373 1 89 2374 1 89 2382 1 89 2388 1 89 2391 1 89 2394 1 89 2398 1 89 2401 1 89 2404 1 89 2405 1 89 2408 1 89 2409 1 89 2413 1 89 2416 1 89 2419 1 89 2420 1 89 2423 1 89 2424 1 89 2425 1 89 2428 1 89 2429 1 89 2430 1 89 2443 1 89 2453 1 89 2459 1 89 2462 1 89 2465 1 89 2473 1 89 2479 1 89 2482 1 89 2485 1 89 2489 1 89 2492 1 89 2495 1 89 2496 1 89 2499 1 89 2500 1 89 2508 1 89 2514 1 89 2517 1 89 2520 1 89 2524 1 89 2527 1 89 2530 1 89 2531 1 89 2534 1 89 2535 1 89 2539 1 89 2542 1 89 2545 1 89 2546 1 89 2549 1 89 2550 1 89 2551 1 89 2554 1 89 2555 1 89 2556 1 89 2564 1 89 2570 1 89 2573 1 89 2576 1 89 2580 1 89 2583 1 89 2586 1 89 2587 1 89 2590 1 89 2591 1 89 2595 1 89 2598 1 89 2601 1 89 2602 1 89 2605 1 89 2606 1 89 2607 1 89 2610 1 89 2611 1 89 2612 1 89 2616 1 89 2619 1 89 2622 1 89 2623 1 89 2626 1 89 2627 1 89 2628 1 89 2631 1 89 2632 1 89 2633 1 89 2634 1 89 2637 1 89 2638 1 89 2639 1 89 2640 1 89 2659 1 89 2674 1 89 2684 1 89 2690 1 89 2693 1 89 2696 1 89 2709 1 89 2719 1 89 2725 1 89 2728 1 89 2731 1 89 2739 1 89 2745 1 89 2748 1 89 2751 1 89 2755 1 89 2758 1 89 2761 1 89 2762 1 89 2765 1 89 2766 1 89 2779 1 89 2789 1 89 2795 1 89 2798 1 89 2801 1 89 2809 1 89 2815 1 89 2818 1 89 2821 1 89 2825 1 89 2828 1 89 2831 1 89 2832 1 89 2835 1 89 2836 1 89 2844 1 89 2850 1 89 2853 1 89 2856 1 89 2860 1 89 2863 1 89 2866 1 89 2867 1 89 2870 1 89 2871 1 89 2875 1 89 2878 1 89 2881 1 89 2882 1 89 2885 1 89 2886 1 89 2887 1 89 2890 1 89 2891 1 89 2892 1 89 2905 1 89 2915 1 89 2921 1 89 2924 1 89 2927 1 89 2935 1 89 2941 1 89 2944 1 89 2947 1 89 2951 1 89 2954 1 89 2957 1 89 2958 1 89 2961 1 89 2962 1 89 2970 1 89 2976 1 89 2979 1 89 2982 1 89 2986 1 89 2989 1 89 2992 1 89 2993 1 89 2996 1 89 2997 1 89 3001 1 89 3004 1 89 3007 1 89 3008 1 89 3011 1 89 3012 1 89 3013 1 89 3016 1 89 3017 1 89 3018 1 89 3026 1 89 3032 1 89 3035 1 89 3038 1 89 3042 1 89 3045 1 89 3048 1 89 3049 1 89 3052 1 89 3053 1 89 3057 1 89 3060 1 89 3063 1 89 3064 1 89 3067 1 89 3068 1 89 3069 1 89 3072 1 89 3073 1 89 3074 1 89 3078 1 89 3081 1 89 3084 1 89 3085 1 89 3088 1 89 3089 1 89 3090 1 89 3093 1 89 3094 1 89 3095 1 89 3096 1 89 3099 1 89 3100 1 89 3101 1 89 3102 1 89 3115 1 89 3125 1 89 3131 1 89 3134 1 89 3137 1 89 3145 1 89 3151 1 89 3154 1 89 3157 1 89 3161 1 89 3164 1 89 3167 1 89 3168 1 89 3171 1 89 3172 1 89 3180 1 89 3186 1 89 3189 1 89 3192 1 89 3196 1 89 3199 1 89 3202 1 89 3203 1 89 3206 1 89 3207 1 89 3211 1 89 3214 1 89 3217 1 89 3218 1 89 3221 1 89 3222 1 89 3223 1 89 3226 1 89 3227 1 89 3228 1 89 3236 1 89 3242 1 89 3245 1 89 3248 1 89 3252 1 89 3255 1 89 3258 1 89 3259 1 89 3262 1 89 3263 1 89 3267 1 89 3270 1 89 3273 1 89 3274 1 89 3277 1 89 3278 1 89 3279 1 89 3282 1 89 3283 1 89 3284 1 89 3288 1 89 3291 1 89 3294 1 89 3295 1 89 3298 1 89 3299 1 89 3300 1 89 3303 1 89 3304 1 89 3305 1 89 3306 1 89 3309 1 89 3310 1 89 3311 1 89 3312 1 89 3320 1 89 3326 1 89 3329 1 89 3332 1 89 3336 1 89 3339 1 89 3342 1 89 3343 1 89 3346 1 89 3347 1 89 3351 1 89 3354 1 89 3357 1 89 3358 1 89 3361 1 89 3362 1 89 3363 1 89 3366 1 89 3367 1 89 3368 1 89 3372 1 89 3375 1 89 3378 1 89 3379 1 89 3382 1 89 3383 1 89 3384 1 89 3387 1 89 3388 1 89 3389 1 89 3390 1 89 3393 1 89 3394 1 89 3395 1 89 3396 1 89 3400 1 89 3403 1 89 3406 1 89 3407 1 89 3410 1 89 3411 1 89 3412 1 89 3415 1 89 3416 1 89 3417 1 89 3418 1 89 3421 1 89 3422 1 89 3423 1 89 3424 1 89 3425 1 89 3428 1 89 3429 1 89 3430 1 89 3431 1 89 3432 1 90 35 1 90 63 1 90 84 1 90 99 1 90 109 1 90 115 1 90 118 1 90 120 1 90 147 1 90 168 1 90 183 1 90 193 1 90 199 1 90 202 1 90 204 1 90 224 1 90 239 1 90 249 1 90 255 1 90 258 1 90 260 1 90 274 1 90 284 1 90 290 1 90 293 1 90 295 1 90 304 1 90 310 1 90 313 1 90 315 1 90 320 1 90 323 1 90 325 1 90 327 1 90 329 1 90 330 1 90 357 1 90 378 1 90 393 1 90 403 1 90 409 1 90 412 1 90 414 1 90 434 1 90 449 1 90 459 1 90 465 1 90 468 1 90 470 1 90 484 1 90 494 1 90 500 1 90 503 1 90 505 1 90 514 1 90 520 1 90 523 1 90 525 1 90 530 1 90 533 1 90 535 1 90 537 1 90 539 1 90 540 1 90 560 1 90 575 1 90 585 1 90 591 1 90 594 1 90 596 1 90 610 1 90 620 1 90 626 1 90 629 1 90 631 1 90 640 1 90 646 1 90 649 1 90 651 1 90 656 1 90 659 1 90 661 1 90 663 1 90 665 1 90 666 1 90 680 1 90 690 1 90 696 1 90 699 1 90 701 1 90 710 1 90 716 1 90 719 1 90 721 1 90 726 1 90 729 1 90 731 1 90 733 1 90 735 1 90 736 1 90 745 1 90 751 1 90 754 1 90 756 1 90 761 1 90 764 1 90 766 1 90 768 1 90 770 1 90 771 1 90 776 1 90 779 1 90 781 1 90 783 1 90 785 1 90 786 1 90 788 1 90 790 1 90 791 1 90 792 1 90 819 1 90 840 1 90 855 1 90 865 1 90 871 1 90 874 1 90 876 1 90 896 1 90 911 1 90 921 1 90 927 1 90 930 1 90 932 1 90 946 1 90 956 1 90 962 1 90 965 1 90 967 1 90 976 1 90 982 1 90 985 1 90 987 1 90 992 1 90 995 1 90 997 1 90 999 1 90 1001 1 90 1002 1 90 1022 1 90 1037 1 90 1047 1 90 1053 1 90 1056 1 90 1058 1 90 1072 1 90 1082 1 90 1088 1 90 1091 1 90 1093 1 90 1102 1 90 1108 1 90 1111 1 90 1113 1 90 1118 1 90 1121 1 90 1123 1 90 1125 1 90 1127 1 90 1128 1 90 1142 1 90 1152 1 90 1158 1 90 1161 1 90 1163 1 90 1172 1 90 1178 1 90 1181 1 90 1183 1 90 1188 1 90 1191 1 90 1193 1 90 1195 1 90 1197 1 90 1198 1 90 1207 1 90 1213 1 90 1216 1 90 1218 1 90 1223 1 90 1226 1 90 1228 1 90 1230 1 90 1232 1 90 1233 1 90 1238 1 90 1241 1 90 1243 1 90 1245 1 90 1247 1 90 1248 1 90 1250 1 90 1252 1 90 1253 1 90 1254 1 90 1274 1 90 1289 1 90 1299 1 90 1305 1 90 1308 1 90 1310 1 90 1324 1 90 1334 1 90 1340 1 90 1343 1 90 1345 1 90 1354 1 90 1360 1 90 1363 1 90 1365 1 90 1370 1 90 1373 1 90 1375 1 90 1377 1 90 1379 1 90 1380 1 90 1394 1 90 1404 1 90 1410 1 90 1413 1 90 1415 1 90 1424 1 90 1430 1 90 1433 1 90 1435 1 90 1440 1 90 1443 1 90 1445 1 90 1447 1 90 1449 1 90 1450 1 90 1459 1 90 1465 1 90 1468 1 90 1470 1 90 1475 1 90 1478 1 90 1480 1 90 1482 1 90 1484 1 90 1485 1 90 1490 1 90 1493 1 90 1495 1 90 1497 1 90 1499 1 90 1500 1 90 1502 1 90 1504 1 90 1505 1 90 1506 1 90 1520 1 90 1530 1 90 1536 1 90 1539 1 90 1541 1 90 1550 1 90 1556 1 90 1559 1 90 1561 1 90 1566 1 90 1569 1 90 1571 1 90 1573 1 90 1575 1 90 1576 1 90 1585 1 90 1591 1 90 1594 1 90 1596 1 90 1601 1 90 1604 1 90 1606 1 90 1608 1 90 1610 1 90 1611 1 90 1616 1 90 1619 1 90 1621 1 90 1623 1 90 1625 1 90 1626 1 90 1628 1 90 1630 1 90 1631 1 90 1632 1 90 1641 1 90 1647 1 90 1650 1 90 1652 1 90 1657 1 90 1660 1 90 1662 1 90 1664 1 90 1666 1 90 1667 1 90 1672 1 90 1675 1 90 1677 1 90 1679 1 90 1681 1 90 1682 1 90 1684 1 90 1686 1 90 1687 1 90 1688 1 90 1693 1 90 1696 1 90 1698 1 90 1700 1 90 1702 1 90 1703 1 90 1705 1 90 1707 1 90 1708 1 90 1709 1 90 1711 1 90 1713 1 90 1714 1 90 1715 1 90 1716 1 90 1743 1 90 1764 1 90 1779 1 90 1789 1 90 1795 1 90 1798 1 90 1800 1 90 1820 1 90 1835 1 90 1845 1 90 1851 1 90 1854 1 90 1856 1 90 1870 1 90 1880 1 90 1886 1 90 1889 1 90 1891 1 90 1900 1 90 1906 1 90 1909 1 90 1911 1 90 1916 1 90 1919 1 90 1921 1 90 1923 1 90 1925 1 90 1926 1 90 1946 1 90 1961 1 90 1971 1 90 1977 1 90 1980 1 90 1982 1 90 1996 1 90 2006 1 90 2012 1 90 2015 1 90 2017 1 90 2026 1 90 2032 1 90 2035 1 90 2037 1 90 2042 1 90 2045 1 90 2047 1 90 2049 1 90 2051 1 90 2052 1 90 2066 1 90 2076 1 90 2082 1 90 2085 1 90 2087 1 90 2096 1 90 2102 1 90 2105 1 90 2107 1 90 2112 1 90 2115 1 90 2117 1 90 2119 1 90 2121 1 90 2122 1 90 2131 1 90 2137 1 90 2140 1 90 2142 1 90 2147 1 90 2150 1 90 2152 1 90 2154 1 90 2156 1 90 2157 1 90 2162 1 90 2165 1 90 2167 1 90 2169 1 90 2171 1 90 2172 1 90 2174 1 90 2176 1 90 2177 1 90 2178 1 90 2198 1 90 2213 1 90 2223 1 90 2229 1 90 2232 1 90 2234 1 90 2248 1 90 2258 1 90 2264 1 90 2267 1 90 2269 1 90 2278 1 90 2284 1 90 2287 1 90 2289 1 90 2294 1 90 2297 1 90 2299 1 90 2301 1 90 2303 1 90 2304 1 90 2318 1 90 2328 1 90 2334 1 90 2337 1 90 2339 1 90 2348 1 90 2354 1 90 2357 1 90 2359 1 90 2364 1 90 2367 1 90 2369 1 90 2371 1 90 2373 1 90 2374 1 90 2383 1 90 2389 1 90 2392 1 90 2394 1 90 2399 1 90 2402 1 90 2404 1 90 2406 1 90 2408 1 90 2409 1 90 2414 1 90 2417 1 90 2419 1 90 2421 1 90 2423 1 90 2424 1 90 2426 1 90 2428 1 90 2429 1 90 2430 1 90 2444 1 90 2454 1 90 2460 1 90 2463 1 90 2465 1 90 2474 1 90 2480 1 90 2483 1 90 2485 1 90 2490 1 90 2493 1 90 2495 1 90 2497 1 90 2499 1 90 2500 1 90 2509 1 90 2515 1 90 2518 1 90 2520 1 90 2525 1 90 2528 1 90 2530 1 90 2532 1 90 2534 1 90 2535 1 90 2540 1 90 2543 1 90 2545 1 90 2547 1 90 2549 1 90 2550 1 90 2552 1 90 2554 1 90 2555 1 90 2556 1 90 2565 1 90 2571 1 90 2574 1 90 2576 1 90 2581 1 90 2584 1 90 2586 1 90 2588 1 90 2590 1 90 2591 1 90 2596 1 90 2599 1 90 2601 1 90 2603 1 90 2605 1 90 2606 1 90 2608 1 90 2610 1 90 2611 1 90 2612 1 90 2617 1 90 2620 1 90 2622 1 90 2624 1 90 2626 1 90 2627 1 90 2629 1 90 2631 1 90 2632 1 90 2633 1 90 2635 1 90 2637 1 90 2638 1 90 2639 1 90 2640 1 90 2660 1 90 2675 1 90 2685 1 90 2691 1 90 2694 1 90 2696 1 90 2710 1 90 2720 1 90 2726 1 90 2729 1 90 2731 1 90 2740 1 90 2746 1 90 2749 1 90 2751 1 90 2756 1 90 2759 1 90 2761 1 90 2763 1 90 2765 1 90 2766 1 90 2780 1 90 2790 1 90 2796 1 90 2799 1 90 2801 1 90 2810 1 90 2816 1 90 2819 1 90 2821 1 90 2826 1 90 2829 1 90 2831 1 90 2833 1 90 2835 1 90 2836 1 90 2845 1 90 2851 1 90 2854 1 90 2856 1 90 2861 1 90 2864 1 90 2866 1 90 2868 1 90 2870 1 90 2871 1 90 2876 1 90 2879 1 90 2881 1 90 2883 1 90 2885 1 90 2886 1 90 2888 1 90 2890 1 90 2891 1 90 2892 1 90 2906 1 90 2916 1 90 2922 1 90 2925 1 90 2927 1 90 2936 1 90 2942 1 90 2945 1 90 2947 1 90 2952 1 90 2955 1 90 2957 1 90 2959 1 90 2961 1 90 2962 1 90 2971 1 90 2977 1 90 2980 1 90 2982 1 90 2987 1 90 2990 1 90 2992 1 90 2994 1 90 2996 1 90 2997 1 90 3002 1 90 3005 1 90 3007 1 90 3009 1 90 3011 1 90 3012 1 90 3014 1 90 3016 1 90 3017 1 90 3018 1 90 3027 1 90 3033 1 90 3036 1 90 3038 1 90 3043 1 90 3046 1 90 3048 1 90 3050 1 90 3052 1 90 3053 1 90 3058 1 90 3061 1 90 3063 1 90 3065 1 90 3067 1 90 3068 1 90 3070 1 90 3072 1 90 3073 1 90 3074 1 90 3079 1 90 3082 1 90 3084 1 90 3086 1 90 3088 1 90 3089 1 90 3091 1 90 3093 1 90 3094 1 90 3095 1 90 3097 1 90 3099 1 90 3100 1 90 3101 1 90 3102 1 90 3116 1 90 3126 1 90 3132 1 90 3135 1 90 3137 1 90 3146 1 90 3152 1 90 3155 1 90 3157 1 90 3162 1 90 3165 1 90 3167 1 90 3169 1 90 3171 1 90 3172 1 90 3181 1 90 3187 1 90 3190 1 90 3192 1 90 3197 1 90 3200 1 90 3202 1 90 3204 1 90 3206 1 90 3207 1 90 3212 1 90 3215 1 90 3217 1 90 3219 1 90 3221 1 90 3222 1 90 3224 1 90 3226 1 90 3227 1 90 3228 1 90 3237 1 90 3243 1 90 3246 1 90 3248 1 90 3253 1 90 3256 1 90 3258 1 90 3260 1 90 3262 1 90 3263 1 90 3268 1 90 3271 1 90 3273 1 90 3275 1 90 3277 1 90 3278 1 90 3280 1 90 3282 1 90 3283 1 90 3284 1 90 3289 1 90 3292 1 90 3294 1 90 3296 1 90 3298 1 90 3299 1 90 3301 1 90 3303 1 90 3304 1 90 3305 1 90 3307 1 90 3309 1 90 3310 1 90 3311 1 90 3312 1 90 3321 1 90 3327 1 90 3330 1 90 3332 1 90 3337 1 90 3340 1 90 3342 1 90 3344 1 90 3346 1 90 3347 1 90 3352 1 90 3355 1 90 3357 1 90 3359 1 90 3361 1 90 3362 1 90 3364 1 90 3366 1 90 3367 1 90 3368 1 90 3373 1 90 3376 1 90 3378 1 90 3380 1 90 3382 1 90 3383 1 90 3385 1 90 3387 1 90 3388 1 90 3389 1 90 3391 1 90 3393 1 90 3394 1 90 3395 1 90 3396 1 90 3401 1 90 3404 1 90 3406 1 90 3408 1 90 3410 1 90 3411 1 90 3413 1 90 3415 1 90 3416 1 90 3417 1 90 3419 1 90 3421 1 90 3422 1 90 3423 1 90 3424 1 90 3426 1 90 3428 1 90 3429 1 90 3430 1 90 3431 1 90 3432 1 91 36 1 91 64 1 91 85 1 91 100 1 91 110 1 91 116 1 91 119 1 91 120 1 91 148 1 91 169 1 91 184 1 91 194 1 91 200 1 91 203 1 91 204 1 91 225 1 91 240 1 91 250 1 91 256 1 91 259 1 91 260 1 91 275 1 91 285 1 91 291 1 91 294 1 91 295 1 91 305 1 91 311 1 91 314 1 91 315 1 91 321 1 91 324 1 91 325 1 91 328 1 91 329 1 91 330 1 91 358 1 91 379 1 91 394 1 91 404 1 91 410 1 91 413 1 91 414 1 91 435 1 91 450 1 91 460 1 91 466 1 91 469 1 91 470 1 91 485 1 91 495 1 91 501 1 91 504 1 91 505 1 91 515 1 91 521 1 91 524 1 91 525 1 91 531 1 91 534 1 91 535 1 91 538 1 91 539 1 91 540 1 91 561 1 91 576 1 91 586 1 91 592 1 91 595 1 91 596 1 91 611 1 91 621 1 91 627 1 91 630 1 91 631 1 91 641 1 91 647 1 91 650 1 91 651 1 91 657 1 91 660 1 91 661 1 91 664 1 91 665 1 91 666 1 91 681 1 91 691 1 91 697 1 91 700 1 91 701 1 91 711 1 91 717 1 91 720 1 91 721 1 91 727 1 91 730 1 91 731 1 91 734 1 91 735 1 91 736 1 91 746 1 91 752 1 91 755 1 91 756 1 91 762 1 91 765 1 91 766 1 91 769 1 91 770 1 91 771 1 91 777 1 91 780 1 91 781 1 91 784 1 91 785 1 91 786 1 91 789 1 91 790 1 91 791 1 91 792 1 91 820 1 91 841 1 91 856 1 91 866 1 91 872 1 91 875 1 91 876 1 91 897 1 91 912 1 91 922 1 91 928 1 91 931 1 91 932 1 91 947 1 91 957 1 91 963 1 91 966 1 91 967 1 91 977 1 91 983 1 91 986 1 91 987 1 91 993 1 91 996 1 91 997 1 91 1000 1 91 1001 1 91 1002 1 91 1023 1 91 1038 1 91 1048 1 91 1054 1 91 1057 1 91 1058 1 91 1073 1 91 1083 1 91 1089 1 91 1092 1 91 1093 1 91 1103 1 91 1109 1 91 1112 1 91 1113 1 91 1119 1 91 1122 1 91 1123 1 91 1126 1 91 1127 1 91 1128 1 91 1143 1 91 1153 1 91 1159 1 91 1162 1 91 1163 1 91 1173 1 91 1179 1 91 1182 1 91 1183 1 91 1189 1 91 1192 1 91 1193 1 91 1196 1 91 1197 1 91 1198 1 91 1208 1 91 1214 1 91 1217 1 91 1218 1 91 1224 1 91 1227 1 91 1228 1 91 1231 1 91 1232 1 91 1233 1 91 1239 1 91 1242 1 91 1243 1 91 1246 1 91 1247 1 91 1248 1 91 1251 1 91 1252 1 91 1253 1 91 1254 1 91 1275 1 91 1290 1 91 1300 1 91 1306 1 91 1309 1 91 1310 1 91 1325 1 91 1335 1 91 1341 1 91 1344 1 91 1345 1 91 1355 1 91 1361 1 91 1364 1 91 1365 1 91 1371 1 91 1374 1 91 1375 1 91 1378 1 91 1379 1 91 1380 1 91 1395 1 91 1405 1 91 1411 1 91 1414 1 91 1415 1 91 1425 1 91 1431 1 91 1434 1 91 1435 1 91 1441 1 91 1444 1 91 1445 1 91 1448 1 91 1449 1 91 1450 1 91 1460 1 91 1466 1 91 1469 1 91 1470 1 91 1476 1 91 1479 1 91 1480 1 91 1483 1 91 1484 1 91 1485 1 91 1491 1 91 1494 1 91 1495 1 91 1498 1 91 1499 1 91 1500 1 91 1503 1 91 1504 1 91 1505 1 91 1506 1 91 1521 1 91 1531 1 91 1537 1 91 1540 1 91 1541 1 91 1551 1 91 1557 1 91 1560 1 91 1561 1 91 1567 1 91 1570 1 91 1571 1 91 1574 1 91 1575 1 91 1576 1 91 1586 1 91 1592 1 91 1595 1 91 1596 1 91 1602 1 91 1605 1 91 1606 1 91 1609 1 91 1610 1 91 1611 1 91 1617 1 91 1620 1 91 1621 1 91 1624 1 91 1625 1 91 1626 1 91 1629 1 91 1630 1 91 1631 1 91 1632 1 91 1642 1 91 1648 1 91 1651 1 91 1652 1 91 1658 1 91 1661 1 91 1662 1 91 1665 1 91 1666 1 91 1667 1 91 1673 1 91 1676 1 91 1677 1 91 1680 1 91 1681 1 91 1682 1 91 1685 1 91 1686 1 91 1687 1 91 1688 1 91 1694 1 91 1697 1 91 1698 1 91 1701 1 91 1702 1 91 1703 1 91 1706 1 91 1707 1 91 1708 1 91 1709 1 91 1712 1 91 1713 1 91 1714 1 91 1715 1 91 1716 1 91 1744 1 91 1765 1 91 1780 1 91 1790 1 91 1796 1 91 1799 1 91 1800 1 91 1821 1 91 1836 1 91 1846 1 91 1852 1 91 1855 1 91 1856 1 91 1871 1 91 1881 1 91 1887 1 91 1890 1 91 1891 1 91 1901 1 91 1907 1 91 1910 1 91 1911 1 91 1917 1 91 1920 1 91 1921 1 91 1924 1 91 1925 1 91 1926 1 91 1947 1 91 1962 1 91 1972 1 91 1978 1 91 1981 1 91 1982 1 91 1997 1 91 2007 1 91 2013 1 91 2016 1 91 2017 1 91 2027 1 91 2033 1 91 2036 1 91 2037 1 91 2043 1 91 2046 1 91 2047 1 91 2050 1 91 2051 1 91 2052 1 91 2067 1 91 2077 1 91 2083 1 91 2086 1 91 2087 1 91 2097 1 91 2103 1 91 2106 1 91 2107 1 91 2113 1 91 2116 1 91 2117 1 91 2120 1 91 2121 1 91 2122 1 91 2132 1 91 2138 1 91 2141 1 91 2142 1 91 2148 1 91 2151 1 91 2152 1 91 2155 1 91 2156 1 91 2157 1 91 2163 1 91 2166 1 91 2167 1 91 2170 1 91 2171 1 91 2172 1 91 2175 1 91 2176 1 91 2177 1 91 2178 1 91 2199 1 91 2214 1 91 2224 1 91 2230 1 91 2233 1 91 2234 1 91 2249 1 91 2259 1 91 2265 1 91 2268 1 91 2269 1 91 2279 1 91 2285 1 91 2288 1 91 2289 1 91 2295 1 91 2298 1 91 2299 1 91 2302 1 91 2303 1 91 2304 1 91 2319 1 91 2329 1 91 2335 1 91 2338 1 91 2339 1 91 2349 1 91 2355 1 91 2358 1 91 2359 1 91 2365 1 91 2368 1 91 2369 1 91 2372 1 91 2373 1 91 2374 1 91 2384 1 91 2390 1 91 2393 1 91 2394 1 91 2400 1 91 2403 1 91 2404 1 91 2407 1 91 2408 1 91 2409 1 91 2415 1 91 2418 1 91 2419 1 91 2422 1 91 2423 1 91 2424 1 91 2427 1 91 2428 1 91 2429 1 91 2430 1 91 2445 1 91 2455 1 91 2461 1 91 2464 1 91 2465 1 91 2475 1 91 2481 1 91 2484 1 91 2485 1 91 2491 1 91 2494 1 91 2495 1 91 2498 1 91 2499 1 91 2500 1 91 2510 1 91 2516 1 91 2519 1 91 2520 1 91 2526 1 91 2529 1 91 2530 1 91 2533 1 91 2534 1 91 2535 1 91 2541 1 91 2544 1 91 2545 1 91 2548 1 91 2549 1 91 2550 1 91 2553 1 91 2554 1 91 2555 1 91 2556 1 91 2566 1 91 2572 1 91 2575 1 91 2576 1 91 2582 1 91 2585 1 91 2586 1 91 2589 1 91 2590 1 91 2591 1 91 2597 1 91 2600 1 91 2601 1 91 2604 1 91 2605 1 91 2606 1 91 2609 1 91 2610 1 91 2611 1 91 2612 1 91 2618 1 91 2621 1 91 2622 1 91 2625 1 91 2626 1 91 2627 1 91 2630 1 91 2631 1 91 2632 1 91 2633 1 91 2636 1 91 2637 1 91 2638 1 91 2639 1 91 2640 1 91 2661 1 91 2676 1 91 2686 1 91 2692 1 91 2695 1 91 2696 1 91 2711 1 91 2721 1 91 2727 1 91 2730 1 91 2731 1 91 2741 1 91 2747 1 91 2750 1 91 2751 1 91 2757 1 91 2760 1 91 2761 1 91 2764 1 91 2765 1 91 2766 1 91 2781 1 91 2791 1 91 2797 1 91 2800 1 91 2801 1 91 2811 1 91 2817 1 91 2820 1 91 2821 1 91 2827 1 91 2830 1 91 2831 1 91 2834 1 91 2835 1 91 2836 1 91 2846 1 91 2852 1 91 2855 1 91 2856 1 91 2862 1 91 2865 1 91 2866 1 91 2869 1 91 2870 1 91 2871 1 91 2877 1 91 2880 1 91 2881 1 91 2884 1 91 2885 1 91 2886 1 91 2889 1 91 2890 1 91 2891 1 91 2892 1 91 2907 1 91 2917 1 91 2923 1 91 2926 1 91 2927 1 91 2937 1 91 2943 1 91 2946 1 91 2947 1 91 2953 1 91 2956 1 91 2957 1 91 2960 1 91 2961 1 91 2962 1 91 2972 1 91 2978 1 91 2981 1 91 2982 1 91 2988 1 91 2991 1 91 2992 1 91 2995 1 91 2996 1 91 2997 1 91 3003 1 91 3006 1 91 3007 1 91 3010 1 91 3011 1 91 3012 1 91 3015 1 91 3016 1 91 3017 1 91 3018 1 91 3028 1 91 3034 1 91 3037 1 91 3038 1 91 3044 1 91 3047 1 91 3048 1 91 3051 1 91 3052 1 91 3053 1 91 3059 1 91 3062 1 91 3063 1 91 3066 1 91 3067 1 91 3068 1 91 3071 1 91 3072 1 91 3073 1 91 3074 1 91 3080 1 91 3083 1 91 3084 1 91 3087 1 91 3088 1 91 3089 1 91 3092 1 91 3093 1 91 3094 1 91 3095 1 91 3098 1 91 3099 1 91 3100 1 91 3101 1 91 3102 1 91 3117 1 91 3127 1 91 3133 1 91 3136 1 91 3137 1 91 3147 1 91 3153 1 91 3156 1 91 3157 1 91 3163 1 91 3166 1 91 3167 1 91 3170 1 91 3171 1 91 3172 1 91 3182 1 91 3188 1 91 3191 1 91 3192 1 91 3198 1 91 3201 1 91 3202 1 91 3205 1 91 3206 1 91 3207 1 91 3213 1 91 3216 1 91 3217 1 91 3220 1 91 3221 1 91 3222 1 91 3225 1 91 3226 1 91 3227 1 91 3228 1 91 3238 1 91 3244 1 91 3247 1 91 3248 1 91 3254 1 91 3257 1 91 3258 1 91 3261 1 91 3262 1 91 3263 1 91 3269 1 91 3272 1 91 3273 1 91 3276 1 91 3277 1 91 3278 1 91 3281 1 91 3282 1 91 3283 1 91 3284 1 91 3290 1 91 3293 1 91 3294 1 91 3297 1 91 3298 1 91 3299 1 91 3302 1 91 3303 1 91 3304 1 91 3305 1 91 3308 1 91 3309 1 91 3310 1 91 3311 1 91 3312 1 91 3322 1 91 3328 1 91 3331 1 91 3332 1 91 3338 1 91 3341 1 91 3342 1 91 3345 1 91 3346 1 91 3347 1 91 3353 1 91 3356 1 91 3357 1 91 3360 1 91 3361 1 91 3362 1 91 3365 1 91 3366 1 91 3367 1 91 3368 1 91 3374 1 91 3377 1 91 3378 1 91 3381 1 91 3382 1 91 3383 1 91 3386 1 91 3387 1 91 3388 1 91 3389 1 91 3392 1 91 3393 1 91 3394 1 91 3395 1 91 3396 1 91 3402 1 91 3405 1 91 3406 1 91 3409 1 91 3410 1 91 3411 1 91 3414 1 91 3415 1 91 3416 1 91 3417 1 91 3420 1 91 3421 1 91 3422 1 91 3423 1 91 3424 1 91 3427 1 91 3428 1 91 3429 1 91 3430 1 91 3431 1 91 3432 1 0 0 0 linbox-1.6.3/benchmarks/matrix/bibd_14_7_91x3432.sms.gz000066400000000000000000005276271347646240000223000ustar00rootroot00000000000000.Rbibd_14_7_91x3432.smsLk:kQ!X:wW ]S2%$Y{o߿w~^{z zMz~l}~~~~y)Z9Z9Z9ZZZ}}}k%^+ZJha_+ZJVⵒ|k%_+ZI絒|k^+ZJVR_+ZJVү~k_+ZiEk_+ZʼV2yke^+#vQ=G(ߣ{~9e@& eb`& gR@ .dO1KQKqKK@=R|/R/R/R/ WKKKK+ dOAKaKKKEKXB0%,` جdOPXа%<,b KX'{B,p%d,Ac KXBSSm>𱅏-|lc [^lв'|lc [>{>>>>>𱅏-|#D-|lc [>𱅏}y&ɞ𱅏-|lc [>𱃇 [>𱅏-|lc ;yjʞ𱅏-|lc [>ǰ [>𱅏-|lc y˞𱅏-|lc [>𱇃'#|G8>q8zȞq#|G8>q#|G8>q8q4lÑq<|G$G8ǹdO8>q#|G8M#|G8>qeO8>q#|G8S#|G8>qӜXeO8>q#|G83>q+|\ W]eO>q+|\ W>q+|\ W>q~>q+|\CDEF8=2 R r W>nȞq+|\ W>qLG+|\ W>q[N'|\ W>q+|&= W>q+|\ٝ;#>B#>B# !|G!|G!|G!|G!|GZ>B#>B#>!˞G!|666 7Sn#&&>B#>B$=#>B#>B# R@>B#>B#hX>B#>B#>b--D\)|G )|G  BdOH#>RH#>RH#>RH#>RH#>@ȞG )|G )|G>RH#>RH# $>RH# ` NG )|G Y]'|G )|G )|dßɞG )|G )|!#'JN(ᣄ>J(ᣄ>J'{G %|QG %|QG %|QG %|QG %|QR>J(ᣄ>J(ᣄ'|QG %|QG %|T@ʞQG %|QG %|Q *{G  k"Wr>J(ᣄ>J(fX>J>OS߿~yzKk`kb6kdVke3VkeVkeVkeVkVkOyyyy}ՊVkVkVk%^+ZJVB ZJV|k%_+ZJ?|k%_+ZJVRzZJVү~k_+ZJ+Z^+ZʼVzZʼV2Qu Gq(Eޣ{{Q= GƲG Ʉ2L0̈́y)^ ꥨ^ 른^ ^ ^ɞ{)|)—B|)Ɨ|)ʗ|]+{P_`_p__l_____"{%,!` KX `UlV'(,aa KhX%Hf=b KXB4%ta;e?Ն*|lc [>𱅏-|-{>𱅏-|lc  ; [>𱅏-|lc [ؗg [>𱅏-|lc ;xɞ𱅏-|lc [>𱓧 [>𱅏-|lc x ˞𱅏-|lc [> [>𱅏-|lc {8(pRQA8>q#|G8 G8>q#|gs=G8>q8 *WiJUZFc>FcTC>Fc>FcIr>Fc>Fc>HdOc>Fc>F&=444525R5r555kH؜9esY6mNR!y{ҷ!{R!{Ҹ 3(P̡D1b H1b*\)ŞP1bJŜI*U̫X1bj܊+W̯`1bI,Y̳h1b\-[̷p1bŜI.]̻x1b܋/_̿1c I0aØ1c*\1cǘ1#cJƜI2eêYP3 nfA,ؙ=g͂YP4k4 f,Sj6i2c3l>ӄMS4MjAho n͂Yp7 f, p ΂Yp8 g,h rL΂Yp9 2g欗9?I$T߿~yz|/~-zmzgx~~~yџZ9Z9Z9ZZy}}JVxhxk%^+ZJV򵒯^+ZJVRzk^+Z)Rzk_+ZJVүVV2yke^+ZʼV2 :Na(ޣ{zbQ=GȞXd"P& fpVqٳٴٵٶo;7[7{7q+|\ 7xȞq+|\ W>q' W>q+|\ xTɞq+|\ W>qg W>q+|\ wx4T#>B#>BY>B#>B#B#>BB>B#>B(iK_Zٯֿok[Zֿ ֿok[Zt"{Zֿok[Z>wdOZֿokjO}9?ɞڟZSkjO?d?ڟZSkjOijO?ڟZSk({ڟ'ON?9rgPڟZSkjᣅ>ZhᣇC-Zk>Fc>FcYeOc>Fc>F͹[>Fc>Fc9eOc>Fc>FKf {#|1#|1 #|1#|1.'|1#|1#|L ɞ1#|1#|1Mv%{diii$jdjjj$kdkNל9c#errA^%G0bm9crb9XN, ˅ra\X., ˍrcXn,7ˍ`yڇ\5">ۇ|p2C}ȹr`9X,C/EH"_dt/EƿH9"_d/EH"_d/X `,\ X :`,#X Z` ,3X z`,u݂A8I` 4'X `A,Y` t/X `A,8i` 7X `A,y`?X aA!,8`4‚GX &aA%,`t‚OX FaA),8`‚WX faA-,`‚_X aA1,8ɰ`4ÂgX aA5,ٰ`tÂoX aA9,8`ÂwX aA=,`K?ܟrI*'ܟr{;UzXۼ6kdVke3VkeVkeVkeVkVkOyy}-tӵ.xK^u=};wdޕ+{+{W]ٻxJBBBBRRRRR^^^^^^^^^^KWWײײײײײײײ N+򏢕Pv,+fYtOGtOGtOGt.=Q<Q<Q<Q< &{x:x:x:x:WOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOGtOWtOWtOW+EJRd+EJRdW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոqUカW \5.j\pոJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+EJRd+E7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/x|7/bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]Ġt.bE A1"]ĠAAdDfAdX"3 2 "3 2 "3 2 "3 2 "3 2 "3 2 "3L? ( łXp bR0jDTSeSͧ0 bY,Hk-łX0 b],ȋ{/łX0 ca,HL "cd, 3lƂX Bch,( 5ƂX bcl, 7ƂX cp,(DZ 9,ǂX+Aױ ;lǂX cx,( =ǂX cGĠ߿o߿99^?^cvew_x_+r_+ZJVTxk%^+ZJV򵒯|RBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjP%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%Q%QH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#TwԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjPH A!5(ԠRBjP#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}G#Tw;BP}GjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4A'MЉ&Dt :hN4AAAAAAAAAAAAAAAAAAAAAAAAAAAAV8a5qXjV8a5qXjVոe5.qYj\Vոe5.qyV^gYI"_$l/E¿)"_$/E"_$/uMؙ3eg#lμ;P .@jPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPşO}*SqTܧ c<}t)oJRܗ.gR/})Kq_RܗzdOq_Rܗ/Wr=A)2NdZַ@,Ømo+~[ۊV;Ӿڷ[Ŗ?[lϖ?[ۊDɑ3%JN+mo+~[ۊVⷵmok}[;{GswQw(~G;Qw(~G;Qw(~G;QG4DJ4DJ4DJ4DJ4DJ4DJ4DJ4DJ4DJ4DJ\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фڣb7 +~HVdr[.EvH/60)"\$,sf.EcٹygN2 M miH_l|_l|Av"]$w.rEһzi"]$w%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\2%)sI\M(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фMow.[e| `uVX]`uVX]`uVX]`u"_ `,( ,X "`, M(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фM(фMo/_|"Ea_P@:u,łX bA\,u.łX bA`, iB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB&hB"bW,c,łX b[,sH(""H("[ o[mVokz[ի [SoO?V[SoOPPPPPP/rE.ȥ"z_R\}K/rE.ȥ"z_RE%QTS*) J?Ÿ(TJPI*B%Q$ D(TJPI* vJ;RN`TS*) vJ;RN`TSJPI*B%Q$ D(TJPI*B%Q$ D;K.;K.;K.;K.;K.(T*) J?ŸROI*B%Q$ D(TjVjVjVjVjVjVjVjVjVjVjVjVjVjVjVJPI*B%Q$ vJ;RN`TS*) vJ;RN`TS*)B%Q$ D(TJPI*B%Q$ D(TJP"^(RzH"^(RzH"^(RzH"^(RzH"^(RzHI*B%Q$ D(T*) vJ;RN`TS*) vJ;RN`$ D(TJPI*B%Q$ D(TJPI*Bcccccccccccccccccccc%Q$ D(TJPI*B%Q$ D(TJPI* qJ8BR!NTSqd)siKq_Rܗ/})Kq_?J(䏒?J(䏒?J(䏒?J(t~(JW*B~%QGt_䏒? h*C}M 7-~׷ֵ~қy:i][ZֺeΈZֵֺumkk][S^jWkZөZѺe.u(Gq>Yweoq='dw(~G<iG1'Fh(.Gq9)岧uhG`N0'<68n㸍68n|c4wc<66Y" ] Q Q Q Q Qo@xr`ZT)rp "A^dȋy#/d+DB*DB*DB*DB*DB*DB*DB*D()n()n()n()n()nB*DB*DB*DB*DB*DB*DB*DB*DB*DB*Dx/x/ ˃`l `4X &`A,`tX F`A ,rE"WMQtSE7EMQtSE7EMQtSE7EMQtSP! P! P! P! P! P! P! P! P! P! j:A0b ``dHvdHvdXp b^, 0 ƂXp cb,h 2LƂXp 2CPQST:ENQST:ENQST:ENQST:(TB(TB(TB(TB(TB(TB(TB(7`s-Y% dA1_~KU}Oom>ͧ߷["ԯ*o÷~߆o6|W 2~ˀ- _U_U_U_U_U.ɟq335P&?eΑ<ԪjjZ@Z<ԒZPKjCܴrzM-7ܴrzM-7ܴrӒZ@ZV-PU ԒZPKjC-y%䡖<ԒZPƧUӪij|Z5>VOƧUӒZPKjC-y%䡖<ԒZп{){[) w#н_jC~o~o~o~o~o-yU ԪjjZ@-y%䡖<ԒZoi[nZoi[nZoi%jZ@ZV-P%䡖<ԒZPZZZZZZZZZZKjC-y%VOƧUӪij|Z5>VOƧ%䡖<ԒZPKjC-y%[o~[o~[oCZV-PU ԪjC-y%䡖<֒ZPKjC-yUӪij|Z5>VOƧUӪiC-y%䡖<ԒZPKjC-y6dZoiM6dZoiM6dZPKjC-y%j|Z5>VOƧUӪij|Z5>-y%䡖<ԒZPKjC-y%䡖<ԒZPKjC-y%䡖<Ԫij|Z5>VOƧUӪi䡖<ԒZPKjC-y%䡖1'Fh(.Gq9Q\yo1_6q|8:pwBI,rE򰘼I6&X&Ex///,_,_,_,_,-L>L>L>L) ,p)NV`9X,'ˉrb9LvX&Et$YDN):U\xp7xphYJjFj*{ʞi*{ʞi*{ʞFjFjFjFjFj߀ɸ{7ޤ䯋v.REHbY"]䱋DVm~, N78%]䳋v.RZCaA(,‚UX ^aA,,‚]PeOST4=MeO#5P#5P#5P#5P#5odܝ;qwnw /łX c`,( CMeOST4=MeOST4=MeOSCכ^FO^?5/5/e|B,{C#yh$9?{U Q+Q+Q+Q+<4UFA#yh$䡑<4zu;^3zu;#yhT4UFHC#yhmmmmmm$䡑<4F@jQ5ШhT 4C#yh$䡑<4~j wGxy~FU Q+Q+Q+Q+<4UFA#yh$䡑GѺmnhF6Q<:quho5ШhT 4FHC#yh$|=/ף0h@4 ACmP4D@4D@0T s%{pU_Ϝ|3s*ҊiY<O{N3N7Kr**JhhhowUpsu|||sssS`Nx-pq -tBg+$:Kt3˻M nwX|߀67 l.]~u7T,y<= C_ j\/>{ js~oy\~u7`h?aocLf ~C<χx~Qod?\że.s ˾xK<_Vϗxe.%/kx xN3`˪^xey/{;MG7 7.3oÀ ~A+Do/ 7E 8v7Z߀Nv;w&pJ`o |\~ [%Ə[MN dKI\ qA "qAɂ' byh,E$Nç)y&[S_ vGǿJ+W_nb*vq +WlVų`t•+ W,\Y@S¹sMpnܺýpn•~Xpn•+StO@e *GRUl "oj E$-"6}{f NW6lxN)S'Q) 'Q-Xfym6kجX> v47Ê y Ȱb@ k8~?`X!6!w l_CO:!ax|X)2L>,7=/7L=;ed:{fyO`{x?۱=s6yGI87!Z픯5MpHr|Gֻ1kcPw<j7<Y@wkkO#Y&ID#ÞF5joEodY}ozEo0L,.˴2L,3/2LH|Gqk_?M,3*ߑ?cmϱqipx~`:G ߑ9kǐIUVM&xegYt9eRgYuyeG߇#'%(1ϳLH|GG||Qb*H;򵎒oh"9&eh;Z&٣eh?Z&$t#_AA:L1-sL<#L&#sZ-VRCߑ!CV~(F̎tc-W鳨eKo'Y/7 [&$F~eKMH4KLI,}Gǣ2M$FfזY5goo[~޺?@S= O K}RvKt?[k[lf\L^ŀÀ9UͿeeAV> |{qUa+_VʧR'`K't! p'ڬ߀A0p̹̹̹ >ap`2* `fy,7 6&l̂o|YRT=`fUe!.5s j6._[B8W'VC`·=,rp78 ج^^pYB]GWؗxwgO%z/ew >%/}YK<_:y/ӥsX:a,xADoA z 6w0vl KŁ끿"O5l2w_߀9|t 86o;1~ɖ|9 Yd=qAdLV>YduN$[$.Hv2 d$I:N pmovgnM@(٣=*WY%M7W-W8p\b*>V%cW•+ W,T@Sb+ QWX/|Z-\Y@pe⃱1,NV* wW*VϦ" P 8!Q@|9jx֜5nj@^h/4j`լ| oֹYM6جs6 j֧N3fs8;ۀ2a'  6! mdžkX!ԇuyص|Xayaxx3`qEЎ/;40/!sFֆp<˿u8z}x7~K68?{=ОgvOlIs)+ksz#UA/6tq/Y^`IW?ɢe_kuzl[qνyy '^]Oo}_(>_{_Ne/{r5qV-7J#y6-3o{,_k$2@8]N#_}oNtY8]U#[./֑3X&#NWf$e*bX&#T|<;b.`AU/(1֟plA8]NFnaVo( }d7r9Zeh=Ze tw<:Y哚mB8]NVw-k>;B8l1~☧R;=U)>=Rw:~W3;LZ!FW瑩e 7O;r#,a)a)֟űޑ!F, 2/jwH4I̒!.KzGռKRC8]T#si㝲{7?NW=X=u?e7e/5/u}n%њ?ӗgA2`b .&/d鎋%7ax{Vo1e2+XeŢ((^\UC]$.HV>yD&<+$ - R$M)[W>M v%[SD=*y$ Jܔ)Q,(Up\q  *-\Y<\ W,69_< w{fq*^b-[D(\DBݍiƹ+5njx^_4{]fkVQYfkֹYflYf4i3 ex O>k3`K7,p.Éh';a1lhC>9܋]ka"|Xau,`Cs.v}qaddNoD,7gagZ/?7:-at8A{=NhO3?U |Ft7}Eڲ =yyyy:{W8{=k=ܐNQx_lokg{K|˯e{ؿڲ9_WWWZ{ؗ=%|>R/_~_/_c+ƪS7޻IJmtt[:|p sEdt3`h;Z&٣eh?Z&$*Mh{tH һO~GV~2#,?;R~wt4ݖNӿw$^Ho3+t7r$#17#[&V~<t-nWnKt-nWnKt-迟jGyjMy_g^j^%%{_՚I .bŜud,\1b[?}oY%`&'s_b,z{5=H޼ZӃtz5=H/, oL!zeCoCA:=zoJ7 jMA:0UU7CA:=z#߀P,&7 ͂o|N fpG .PkzN7 jMA:=ԚӃtzNxVCoCA:%)+/czjM ~XJyЛPkzN ZӃto@<_ϗxeO,%z/{%.a|..ey/%/z^YGCoCA:==ԚCA:=HGDoADo hX!PkzN Ӄt7D}߀N  A̿o /t==ԚCA:=H8%qA>~? $.H\|r$H qe9Y^I޼ZӃtz5=HЛPkzN jMA:=HdlModJ77yh*W8p\q|tz5=HЛPkzN jMA:=HG Ap \Y7 `N}Io7@0\g2aX?;^ڗ˾\X:=NFN"w]ϳWx^xe_~9J=eO=ǯ=/{ReYSZךK#7)jMco89jMcX:=NVwk/3k+=ltz,K{1F,k{g0AkZc7<{ot< ңך@3|FFea[5qtFLC Ka{<2?Atz\kz,K5OZ#ؗǾe{ -з .Ə?x 7`p 7`px2`p 7`p\ߓ ~v姗_~~7`p? 7`p 7`p `p 7`p 7`p 7`p 7`p 7S n0 n0.@ 7`p 7`p wle0 n0 n0&88<`<`|$2<`<`<ۧ=,<`O۟9\~ĵ;qq\~'r\gC=\.?Ol.?O|=|?C.?.?ú.?.?CԮ'w}= C/?$/?{q^~'z^~z^EÈO#>^v>bCv>fNcq>cq>cq>cq>QQcq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>cq>_~%__%_3/Ur/Y/]/a2vsIq,Éq8w>q8?NY4q8?Ntq>8?NYq^8?Nq~8?NY4q8?Ntq8?NYq8?Nqx<sI,c1x<sqnV|ŷmf|Ʒmv|nع3G} G}q>y87WMot6_Mo3۔6gMo۴6oMo36wMo6Mo36Mo46Mo3T6Mot6Mo3۔6Mo۴6Mo36Mo6Mo3rrrrrrr~Β%KKl-[eodoޖ-{[m۲wd#{G;wdޕ+{+{W]ٻBBBBBRRRRR^^^^^^^^^^,G5'{-{#{#{#{#{#{#{#{#{C8; 臈~釘~ꇨ~뇸~Tl-b1 Y8ʿ0'tcN?21C?D!28@(8H8@စh8ဇ 8-ˀ ,8「48w+,@9@䀑H(9䀓3 R.H 傔 R.H 傔b\rA)\rA)QZaO8˟```bbb XXXXXX,ˁ將X,ˉrb9XNˉra\X., raXn,7ˍrcXn,˃`y@!2yCd"<2yCd"e첿ËO/>O#h Z>OchZ>NHϢh4Z>ϣiDZ>Ϥucci\Z>OilZ>Oiw=|B-Qg!|J-SA|Rj}XwdάߡNwn|r-]g|z-_h{[>ÖSl[>ǖl([󝿿Ɏqc|}vc|81>qc|81>qc|81>qc|81>qc|81>qc|81>qc|81>_i_ej_j_ek_?ڗ9cR/g6N q˸e\2tW+]ƕ.Jq˸e\2tW+]ƕ.Jq˸e\2tW+]ƕ.Jq˸e\2tW+]ƕ.Jq˸e\2tW+]ƕ.Jq˸e\2tW+]ƕ.J i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^kZxM i5-״^OXmo^xG:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc:Ưc<x81~egYY~egYY~eg~egYY~e)p~egYY~eaqyaqyaqnjw&wmzw&xmw&yYmw&zzzzzzO3њ{K+Ӳ}e+{WBBBB*{]!{!{!{){){){){){R^ P^ P^ P^ P^ P^ P^ P^ P^ P^ P^ P^ P^ P^ 1o : 7_l|_l|_l|_l|_l|_l|_l l 0lа@l8a5qXjo XjV8a5qXjV8a5qXjVȼD%269"nossD%2/yKd^"ȼX_\|qwfoޛޞ?{/.⋋/nx2D%2/elؗ[̢(},JǢP^ P^ P^ P^ P^ P^ P^ P^??.?X`5V#X`5"@2F(, ˅rYraXn,7ˍr1`y3iPZ>6E c\X.a,0K%r c\X.a,0K%r c\X.a,0K%r c\X.a,0K%r c\X.a,0K%r c\X.a,0K%r c\X.a,0K%e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&?Fx~Є72arcX?1qxLim 嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+r`l\6X., er`l\6X., er`l\6X., er`l\6X., er`l\6X., er`l\6X., er`l\6X., er`l\6X., er`l\6X., ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+e嵬ײZV^kYy-+b8v6}mx 6mx,6myL6myl6mzی6mz۬6m{6m{6m| -췰~KAg$}I?Ws5\M?WsU*V*X[gwk-ז_[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j___)mGѦx)mGѦx)mGѦx)mGѦx)mGѦx)mFmFmFmFmFmFmFmFmFmFm-|[5ok׼y _-|[5ok׼y _-|[5ok׼y _-|[5ok׼y _-|[5k6k6k6kS<6ţMhS<6ţMhS<6ţMhS<6ţMhS<6ţMhS<词词词词词词词词词词MԦj?Om6SMԦj?Om6SMԦj?Om6SMԦj?Om6SMԦj?___________ͦ|)l7ͦ|)l7ͦ|)l7ͦ|)|H6dO`*UV X%J`*UV X%J`>x&l2 X%J`*',V X%J`*Ul X%J`*UVI %'1_q+ Xɍ*`UUV XUV XOiU<*}2TR C,_k[mmDu:vhN]'ڮm׉Du:vhN]'ڮm׉Du:vhN׶_k[mm׶_k[mm׶_k^ZתVjU{[+g!({QG{QG{ѾG{8=hߣ}=_k[mm׶_k[mm׶_k[mm]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlf׶_k[mm׶_k[mm׶_k[mm׶_k[mm׶_ }&GّmzהF&@-)>.8=q|{=q}{\#|=}ymgAmm׶_k[mm׶_k[mmvmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]_k[mm׶_k[mm׶_k[mm׶_k[mm׶_k[y5+mKE#*Ǩ=F1jQ{cǨ=F1jQ{csܿHHD^ۼ6|mS_m׶_k[mm׶_k[mm׶_k[mm׶_۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf6]ٮlfk3۵vmf[mm׶_k[mm׶_k[mm׶_k[mm׶_k[mmd8!6M0n36ǸM2n4OXr iܦmqmRyK^_G,lz{wQ=먞uT:gճב:_GH鯣wv9zg蝝wv9zg蝝wv9zg蝝wv9s`R֡u(eJYR֡u`v`v`o\L.&˓\|rcXA2(̀Xff2KYmntہyqL7rb9XN,8&7q)lq)Hۄ&6v65le A1hX):P S{X[C)P:;;;msCܡm6wh;msCܡm6w`v`v`v<*Oӡt<*Oӡt<*Oӡt<*OAAAAAAAA^9 rx2e A/^9 rx2e A/^9 rx2AAAءt<*Oӡt<*Oӡt<*Oӡt<*Ov`v`v`v`v`v`v`vE;p %AJ) R$NI8%qJ) R;v`pNI8%qJ)S|2J`*U)S N)R8pJ) X*`UUV X,[^[^[^>Z[[[[[[[[[[[[[[ر;`X Rqt\j:.5KMǥRqt\j:.5KMX cv,ر;`X cv,ر7c|=c|=.{p66X=8؃c=8c|1Ɖ8Sj;}>c}>8 =2{Ѿ{c}>y@SٿɀGMeI0HSp8O|(>slq8_|W_"+Ÿ*e>N3癏ǙTqѾ{1{8|>:|@6Apt\8:. GDžcv,ر;`X cv,ر;`X cv,ر7ϗ}e/|>_ϗ}L0,3 }mgfqimgmOo{zL@-cXQ;;;~۾=q}{\|T|d=(=y}=)ڦmh-ڦmh1ڦ9#ر;`pt\8:. GDžqpt\8:. GDžqpt\8:.ر;`X cv,ر;`X cv,ر;`;x]GQ{ħ2O;#O_|Y&aǟym"nۦⶹ8 GDžqpt\8:. GDžqpt\8:. GDžqX cv,ر;`X cv,ر;`X cv,>qPf)mNqT77§͘ *6DnS\6Fnӑ|6!;`X cv,ر;`X cv,#ܦ:msl翏q?g y߃{}[`3xdP / K& Ab`r09L.B-VjTz`ZbWlbaؾUV X*s1Vy2-[pw݅ˇNX^%Vww䃟^9U#_"|^Iȟ*}΢{ѾG>O^Y^|}'>=q}{\G_9}=Y}_G}}ߣ|=ۧc|=)#)9AoԂGͿQxG}{l_a|1)s}gi5FԤGFQcD5F8|1ƈ#j?N-G#zN3Sh0Cx"<'3ǩ\q8[|.>+W_TOUTOUT{QSǹӾG{1_>Y9mcPw$Y2ga/|>_Ÿ29?ϗ}e/|$0:w{"|E 3 2L., +ҟQb&g/Grg1`gf}iIhy=:YA{z{?`{?؎8=lmm{F6=mto{~۶>"c>*㒶ѽmto{(SH%JLwTG4_ ۃ9#թ#>xG?яmis&YmIRodcX=ƪmjf*IW>?mk&Ymk&mk&ٮmk|π+zgw<پ((w{Y?w;Î<6mSq\w{86cz1#Mmsrۤ6+Mmr63Mmss6;MmsbxdHʣ컣)w0m{6') ?5OcOR;sW8J"+Yt ?]{Sxo2#nL6%nl6'nی6)nbߑp4M]OL6E;j|)7ܦ-ymrܦ.mr|.uɄ6ѹtnS\6ٹEr _>zO?.?o.I})O I}yy%ߏ>-vȳ[<'.aɬbUoX܂Y,K]&'*WRZ )v!.17`0g,ayB A162YˊI]x 6@kxYˊ]ϗl3g&/|Y^ϗ,vl ,x:DoA|"E!?wt`pKRR0 c{K{K/_?OL`o qx'y%!y%<@{xN2:,շy="E/?9u$I`'NdGJv7`r3aJRSJQq\q +W8e\Ype•+ W,\Y'slMʼn[0'H^.V{yU j|E}ז?_( .KR7}~ojG#m_}J5miT>y|o{ß^hN^h{vJB m/|y3mϴ=_`qF57y6oc6εfZrؿs<| }9ƾ{8a#j췱~#j췱~u67|[FOp8;y:{ݾ֌=x3)9k)>N׆u8s|W/NgOy^yӞמDq&8|K>N{z&AYm)vY]be)vY|e,A]bEe;yge`]_{}e/&f }WulfnU#_xYUYʟńy¾#s,G*q:={fVo<Ϥ|϶?g?g~Ϸq1B%qBۘXxmo}<жv~G,ֶvZmFoa}Dmm~_3yLj?FMmGv}G˜6_,q|C}G,=}iL 6Ťw{fbe)vY]bFɪmjB]be)vQ< -UF4m )vY£\JMu#n؍O78 .ZF+Wa,)v#n?p ;b pV}kodVx>!|gB7׍b7R[ey/{Y^V>싗xe.|K<_V9\07f"ϗUey/|^wR$.H\ qA=tv7%dkJ@+N⯷%I+N_i7kVq +6YPspe•+ W,\Y@S¹ŦW8pn]^8peb?,V8pn•|ħX|#rq*6N%1g̺zK-yS;ykw,[)|/^okcM״;5y>nן9^_։qyOq"8|J>%H(L+!Fk" )vuuu[ݖbg*{9%^^^m)v[yQ{}sQHuuuR-F̎8"fmYHR?o )v[ݮ{ݮ{ݮ{ݖbm)73_džYmZm)v[ݖb?cz~.af֐bF>ؑcm)v[ݖbFmz;iQbm~CݖbF#n>Cݖb^^^m)v[uGI;^m)v[y0MmwuR-F̎ 3{u"1gY('W 9Cm)oAx 9bؿ*W}6ɸ2]ȟٱfqW>#D$Ri7ʣ&-bm)vuuu[ݖbMw4˹Ms"nKR] -nK|ֿ~j#)O6翫QCj#)mSI-?wG_=HÇ)P{=H)`? ZKb؃70(=HWksA&s`KCA&N6 YpAW8\\\0E0U{ЎP {b^`@Dfywɀ6Lf7 YpRA=j`RA=zoUI)| C1A0\ ,APXyjRb!|XW'Ӄ{9|9|b5؃{bYB]GR\E`_Wܝ=sKtաTj IX8ѭAoZN*{SgjH6bC( ”ةMs*S|^ņ9zpņj`C5!B_d趠4.eoiK[RRvRtJi\ڱ` ÆPl} I^&SN)T/Ob s8 j`C(6b[o-(bqv6 ~;M !2Cd'Yz4cyZV[PlbYkAkrYuax[gJf5ryF[bmY=Yؖճ<-qۦ\"%>ϽtqQ}SAlbX's'#'''ˣ'o_O1 Oᯇѡ]Ӯi״k`;)3'O ?혪 *`j,}#8"Ωs,"(6 PstDs (MFKQp`&pZ ({޾\K3 9dB(kMF22ʾUp\{EןX#Nw.ӃA.Y:|Ȭ0=zOcȉ!'ZNȉ{VEq=:z:+#x8@ jaX`}hJHPlPT(6@ AHs56@},| As@(6@A-lbZ~-Vh~w#!ןE_V2'^B}@Is&T Pc%s87 PlbZ(J= ɡ$I2'ɜ$s8lSlbX\=‘s (6 *`zKpB'Ǣ/Fopr9gwΙ^7X;'dD(vbAyQPlbQЎ9zΉPlb"sEPQG^wB=pP (kM (+bX/WJq(X\3VլvCq$Z(6@A-lbؠ6 Plb(6@A-lbؠ6@ PlbZ(6@o}!qjؼ(>ƙ7a8o5l^y;n߷/ؿ{sIh}ĩjMk6bS!NT5l~ d܇Sհ)5]Ss}}ĩjzFGNGmVmVmVm4ssMejzD1uwr"y=?LUæXls%}L6bHV ]F2VæXP[׬c}ĩjMk6bS!NT5lŦGMϾaS,6MUæXl6bS!NT5lŦXl6bS,kMWɅbE(ïM"l}ĩj s(CaS,6jM8bSհ)5.5Q6bFP/s*SԞԥ7K'y)M/¦GMدkQT&W)K^R>&4ϥy.eo){K^RBP+R,6MUæXlŦaS,6b+L /m2Mj/¦GMد!J^ïPJUæXl5)M/¦GM?C8J(Gr8.Bp4Gȣy>W- ?[VQv%sYl5)MMUæXlŦ~6>T5lZDG:ڣG(LGa:ZDGVZVZkZ}[ZlV([ljjŴZ9BݯVL[wVL[1m퇭b e e+љ nߺDp̖jŽ`[ E[+h-Vn4¬$ ;P}HdL1vKMF&, SQP= PFtO},]ߠ>A]?X>(J`8)MXc9?U=S\A024ߣiЎx!2CdfKdx XmK*MXcDkF_/\/ZK,qaد ˚ }۲z-OlC]ӎ.+j<nY[>-cMo#NaXo;=|#8aI1lbG><}mρo7'ˣ'SO1 O?<(~>0rӎύ~qVa##iΔT Ǣ7XA9urbb؄>}>Tb Ma⚇C ME6 "ȫzyUdSMSdSp|(X@}8V},VdǍb(dX- Q,6aI1lbؤ6a MXlR  Maؤ6a MXlR ؄&,6aI1lb؄ֿ}n9l][/u/5(l7-b_q׷/eooK%[I K%[z!qbK%[b_Cj2CC'aK/$.ÖXwua5)WȗaK,R゙T[b_CmVmVm4q3Mk1Yb%M yE]\]m=WsJ_A~ QR]5ta%ud :uXz5vbK? [z!qbK/$.ÖXlbK,aK,BR9lŖaK,bK/$.ÖXlbK,T[b%[b_CmC|_Sz!qbj毖-T[b&<4ϡ Mohz4-T[baK,T[b%gh2S3ڔR9lT>9ϩ|N Keo*{SD*SEjHMoj_MsjVST>_Wz!qbK/$.ÖXlbK,aK,BR9lŖaK,bK/$.ÖXlbK,T[b%[b_N^-T[b_CRbQJ/$.ÖXlĥr-ÖXl_ QBp$87QNpȚgeaK,T[b%[z!qbK%[br-3Z(^G7ߣxQGx| \+p \kter- K%[*--ÖXlŖXl'aK/$.ÖXlĥr-ÖXlŖ^H\*-R9lŖXlbK,bK/$.ÖXlbK,T[b%[br--دgjl:`_K ŘCc93&͘5cn_0&Ø uE5lbհ-a [RQ` 9>7+}QvI|e5mǕޔǪ-Xlb֡s?(! Ӵkڽ($'!2Cd'!2C<(%-XlQ [؂>}yZ/ZK,X.cQObd̲RX.hKh-g۲GQm6ಢX.\bCy:ZU{Xv<}g>㡏gi'J|><~x($}}(o7߾<)qF>ki5툴;c־ȉ ByΝD=zς3=rDȉ7o|' Q{VE~җ9+މ%I-Xlb X H,k`%sNuE5lbj؂,k /~-Vmj9trNc'دE9-a [آ`-Xcw~i^G\T,-Xlb=8}ON9:%~9_-Xlb p&[T,`E5lb [آ`-Xlb+xό{j݀s6-Xc]>,An$^G\T,-XlbdI,9S5lb [JƢJ78},NSG#G#H|$>GQ(|> Gh|4>G1| >c1|,>cX|,>X[LCe2Й4!5 iMCmrЛ4!9 iNu4< ihOC|Ӑ4@ jhPC*Ԑ5D )jhQCjԐ5H IjhRCԐ.5L ijhSCԐ>5P jhTC*ՐN5T jhUCjՐ^5X jhVCՐn5\ jhWCՐ~5` khXC*֐5d )khYCj֐5h IkhZC֐5lm(9P5!p kH\?Z[~hm'߾5X:/;Z[~ GQ(|> Gh|4>c1| >cX|,>c+Vc > Ça0|> heG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+}~ѿ}wӰw$C`vG;纮;w<x~Nj;^B_wㅮBF5.œ^ZӅt)̕F՘.ǸȡC#FN9 FN95rjȥK#F.\DX#F.\4G#|4ȇG#|4rkȭ[#FnFny4hȣG#Fw䖯^dh{o{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{m{mKi}k rp'p/p7p?pGpOpWp_>ܜ>ܝ>ܞ>ܟ>ܠ>ܡ>QnRRnSSnTTnUUnVVnWWnXXnYYnZZn[[n\\n]]n^^n__n``naanbbnccnddneenffnggnhhni7ǹ}}}}}}}}}}}}}}}}}}}}}}t1Eu2ȌunscX:7ֹzunscX:7ֹ΍unW*}D_)joo' o/K4Kǫ////@|4K4K4K4KtJ/////}^9fW,j˯^~_?͌W54K4K4K4K4K4K4 P5!n uk[CڒK/9GГK/9K/9K/9K/9K/9K/9K/9K/9K/9K/9K/9K/9K/9K/9C>&ω>*ϊE}d=ʎVvheG+;ZʎVvheH#heG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6ط mo}`6طP$v5X%Ǘ_r|%Ǘ_r|%Ǘ_r|%Ǘ_r|%Ǘ_r|%Ǘ_r|%Ǘ_rrheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVrh@+Z9ʁVrh@+Z9ʁVrjaaaaaaaw~ށw/xyǫ;^WwҵWwۈW82Zmj㯡\22RF6lYyߌGc1| >c1X|,>cAw};p߁w};p߁w};p߁wP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oCP9oC};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w<XC6h GoǴJo\~,||||||||4>Gh|4>;Wc1| >cX|,>z;?6d8Z1V=\ >=ayX3=e8g9};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁wCP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29L%CP29p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w|R܂s08' s08' s08' s08' s08' s08' s08' s08' @=nt{7nGz>o'[zwo^{^{_ջU{_ջU{_ջU{_ջU{_ջ-wxsǛ;7w)}&B3 \8ti^K[4`ibr5`iҀ524G#|4Țwěf4wEWwEWwEWwEWwEWwEWwEWwEWwEWwEWlf5Cc]f5l(]JFW6ѕte+%]9JJWVҕteF<y4jȫW#F^!~Z` s֖4 (L%3Z2Wԭ gWUpvU8*]ή gWUpvEWwEWwEWwEWwEWwEWwEWwEWwEWwEWwEW]>vcW]>vcW]>vcW]>vcW]>vcW]>vcW]>vcW]>vcW]>v؅.w ]B߅.w ]B߅.w ]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.u ]B߅.w ]B߅.w ]B߅.w ]B߅.w ]Bn&vWXHZUZd[ b(CսZ䋡_ c(C11+*_UWW",A&:dǫ[壹J+mJ+m2ɰ&Ú k2ɰ&Ú k2ɰ&Ú k2ɰ&Ú k2ɰ&Ú 2lȰ!8X5X!Æ 2lȰ!Æ 2l!nCP`zcуjaj޹0p_ }a/ 0e03! mf3Cg@3! f4߅.w ]B߅.w ]B߅.w ]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.u ]B߅.w ]B߅.w ]B߅.w ]B߅.w ]s18g3ጛV59G9jQssԜ59G9jQssԜ59G9jQssԜ59G9jNw ]B߅.w ]B߅.w ]Bԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]B߅.w ]B߅.w ]B߅.w ]B߅.w ]BuyJ啮+]W.t]^麼uyJ啮+]W.t]^麼uyJ啮+]W.t]^麼uyJ啮+]W.t]^麼uyJׅ.w ]B߅.w ]B߅.w ]B߅.w ]B߅.w_q09GsٜR"nKܖdAdAdAdAdAheG+;ZʎV}O#=Ocz2h08' sPw ]B߅.w ]B߅.w ]B߅.w ]B| >cX|,> >Ͼs?ߟ~3ng濟wԼ~;ιmwns۝ۮ涛nn^kקowo5;CmBmBme\/S㏡ƥƥƕ}5n5n5n5n 赮uG#F<`+G>GF Sjk\S:Թ5ueFVnC#F>h䣑FVЕLt+( +(2͕j\s%[(eq!#e#e idȦM#jF6х͇6)v-} 5v5vkekS*4>eF mF mF H F#khh̲!iGԭn5u[M*b*idYYYQchd# *(jjjjlKkdeUPVAYe68{ ſ?+ `=~NheXU>Gqqqqqqqqqq=M]mX|,>n]ٴ|V`%Va,|> |u+^%J#F4"hG# F4"hDUxu+<^JW{Ux+@^J#*1b܉sd[ b(Cߟb͎lF*Ɛ11d )cN̝;1G#H W\\o;[_ohF79dMN_)jW jx19ٯ&&91!u.},ӃEB īA 6dxgp_ }a/ ʰ "8Dp!X|p_ }a/ e-Cmr[2! e.Cu],z%K.cYX9qyP{߃/1_b|s4! d&{u>1_b|8ygOZ6smh3G9f6smvzQWU\xE9jQssԜncX|,>8PB 9G9jQssԜ5稹=s`qU59G9jQssԜ59G9j΍17bn܈s?G9sſ?D#=y`C¼=8ybÕWi8psd!;dgMv6dgMv6ٜ5Gf͙Y>ȵ&ך\krɵ&ך\krɵ&M6D9ust|߳0=M{@]:G9߯st][4K>Ça0|> wNſ?|sל69bs؜C69fsٜ69jsڜ6vϢ1b>ઈ9Gt3| >JURG:Q*uTJURG:Qt41hL<9tN#AL9tNcA\9tNAl9tN/Y=*v3EP9Ut}3yEh9[tExg',4=D=LáS(@! 9PȁBr(@! 9PȁBr(@! 98 r(@! 9PȁBr(@! 98gvZkeZk| >ni#;Qq=yFs?&gϺ/\v8u۝;Nv}m׷]vs.0.2JƑ2FؘM}hЀCj.[j\j\j\j2͔iLs{chdMiLfjȫWQ׌Q 1565veU~}`95r{95rjȩ5ϮT M M nchȭG#F<y4rA @ @ @ @ Za-cdhdȮϡ5ZUJхhɌhɌ(F 0JQSN6`6`vߗ} %6v5VLG1%ecbg02VkgvVkgULW1]t#H|$>|>>>>|-h| >cx=) ˱ôoXLJ`G#zA#F|Ճ> x >xǫ>^W F̝;1wby` TX=|;YCG 6@ l` E'K,iFM7YN,n5V@79dMNU]Ulr&'lr!91!unUc/C ;ː/C?Dd$C%2IP2! d[>kp_~6}a/ !ÊVp_ }a/ e-CmrFoP\24! e.Cw z>X/C}_3!>( )fh1C  6@FgIxݟXœ&ٷF` 6@ l|$>xNE9f6s l` T檚jh|𠋚6@ l` 6@?K>8co6Y0' g 9G9L 6@ l` TAQssԜ59G9A΁@ l` Zd Hnd%FVKWzy`3+=\yrs89b1Әq< >Ñakfk&;lN4׭},fCs9\6@ l`-r 4G\Y ;lNt]:`S⪈ ust]wktpB]h q(AG :JQt%(AG :eIsT朕9evthGG;:юvthGG;:9isڜ69msԦ6MGm:jQ>{HҒ%C Y2dɼY URGgƒKn,*uTJURG  6@ l` kJURG:'Ѡs6:utcXG::ѱutcɳcEl9\tNE'ga{s opxg? 9PȁBr(2PȁBr(@! 9Pe(@!  6@MGӣ\Ks-͵4Ҍ<<<<<|ߥcطײ\r-d'qOM~a~s?v08{_mw~&o ?=vwUSSMɸӅȏ H̘Jzo~ 5>j꥙2Mii @ =ڬ,m׹GB`2Ĕ"6^q5c.woCmJm6%C5~]5]5ukz}Xj3j:ek]ˢbU-cdi)XbE(@P/"ex+[Fjt#E4ZDE4EF.F 0JQ2vU}]վj_v`v௡6 (ܣ5ڈ u@7?+ʣ(bvV\վ..~1i2]{>WU..̏6Zm_k5 _MjWZ_?sj{]..._C=>ףּ;C;{0u~v'>VPǢOѮhWk)==vz>{>|ly,qnm}Íwe-":uN]`;(A<%ү$G#葴K%vmi#v^1C_"mDxeƫ3A_W~ÈW%C;(ةuz^שuz`;(A vX(CRG(A vPZ_שuj}`;(4^͛oGoNZo]уjS˗4W46T* PpPpsM+7nPEq1F׌#۝C(8T* PpPנ2XwKC(ԺfM+]^r ЅmʸnТ҄LJ6ZwT}sPp C  .{,KC]h]-5X1r:y`WdžJC(8v۝CowPo7TB!BmEm:eh]IBq1]Q*1Cow9v  C!B!5FZ-_PpΡ;BPo7C(8c)kWքjW~5[Pp]Ρw9B!BPo7C(8@X;j_Ys:bnnn W8(8@E;n0ȽsvM7Ўgn@@e"cD(wvfF_/q3E}Q5"PF|-޿vגv׈+ ^a?\=6"mDڈWdXH:DF_#F_QW7 Pp9xs(8@AoP(8@ ~,@:HuAoP(8xs8@Btr͕6Y\is[jޟE}_]20@AoP(8@ ~`:y!r%ÜbuAoP(k!þ1E~x@$*I(8 ~(8@JR ~(8@ه]`K(8 ~(8@S_2䗡T j,F)7Ė~?嗵2Ė^X>>C*ZB PcN{}ݟE_3?V|G#h#gO7MYM}ypIsFvv<~vM~q<͢57 ~?Vb,}82sPpPu PpvD8Qsq5 (8@5qQxɑst>G9O/{Pp(8xtP ЯƢ}pU:\(psvÛ8~CN(Ƣ'aMvю ~ߠ7@ Pcqd:ѱutcXG::V(8@ ~ߠ7@ Pcqonh{ίNU(`Z( @! Y(h\s-M&}Iߤoѷ[\sqxxY;==o_p-xx͵4555m;\0w;o_eeeZ^̴ 4zJ}s[ }G}tj(ύ]?[~8{{݇12LFPckjh8ҀS)5zl}џ4W 6T%9]B_CY9tk\s fz)yneL ~7b N9 NjS(8 Sι௡?T"25\tͳko p P2>Gjݩ R^NPp ^B)*NU,KGezF1Ɵ8L|Em  I辪&U BMo8So|N9S5 N௡ c+p< =L :U BMo8So|N9S5 N௡Q m5Z_=j]FjWWՄ_-B7>BT p Pp|S(8UN N9S(8NPci#pppk8u:}zo;ޛ=+WʽshMͧi״q(FN*⚹}xo妵 8A ~{o'݈9}E`A Q.iW#V\+'Hbn*#6r/7*[C.='{NPpRT'(8A/+A# NPpR 'Ip9A Nj' NPp~aiu#&kdlMv6_]v\OȺF6YZkbVbɦ!;6%'(+ŐCAzs 8A ~,RpQcf>3(B<}!2("3h(9rJ(8N*`]` ,D~ '(8NPb e/C~K/NjX=h/CsZK{~,A*Jϓ I}|!-GU 'IpX's'#)L(8N*Ǣo}R[Qn^S-pѡ]Ӯi״k`;)3'O49AIpR?VcїG92rsPpR 8A;;9NPp Iߤ/y`DߊDߊeX1 h=G8A ~,/ҌB (Aф&o'/NjX=w2~CŇ㘳@,}ҘB_Z?8kr٥]٥Kv6ىst^8NPp;R͎Dɿ&M&6S-p& ~,fBש8A ﱞaqGzzs 8A ZHCG:dN NPpR 8AX`oB;:юvtPpRT'(8AEJ9(N(8N*~ Nj' NPc1 9uENGw:ѝtԦPpA;'IpX`XBG:fu Z' Z:ѱutcX8NPp1>w s,牁 NPc8xtqXcum~ǯ2 1124!v=PztĂkj/T \b_C[Z]Ϩͪͪͪf4u,T \b_^(^^$瞇K,HyOԹkK, .UXpK.UX5+]EW2ٕ5%\.qGsh~gj R5p^]bj .R5pX߲52ata\T \bh2Z;ZDW].! h5}hĂK.R5pEѲmCB].2FSUV[kriVkV{U_}Хj .oĂK.R5p].ҏK, .UXpĂK.R5pXpQ \?v׹8}*k)bj?wCzF.iΧi״ >CnEE/w+W XUXܠ?xok}oD𽽛ӗX#5GY ZZ22]`DՈ=WO|ЗHzˆ+-0b Wq7#yW`]!Hv䁓E5p@0.`pj0.`p .`pQ \0.`p \_XJko#nUX=XB&6CYd]kM5>}asiȡa/.`c,iĠHw`pQ \nFR5p{4v X 2((⁞R5p}d`pQ \Ǣ/K0E5p X/C}_?e,q[ve]ӮiG`ˣ:,>C*ZR5pi4`%Xo;|>xE9L0.`cOY&\Ǣ/O7:ܴÃv\=5σ>><~Hk:zkE5pj?}#r . \*,z=vM/.`pQ \Eߤ/7s`pj?}9@9HE5p \ .`sv?1\!\iF |vd!p}d@χ|>=J4im#']fBs&'l&2͎d&'Ll2 N .`pQ \-oWM|o75my[&:uX!u ?=ؑ8r X% 0.`pkfoB;:юvthGU0ˎ4D7Gc:9sԦs9S0.`pj0E5p \R%Тu@NGwEMGc -e4Knln . \T0~d DžzuԫstXG::ѱutcXG::9Ft^] . \vU0`1 (dU0 Zp?>`c#M&}I|2kŕ߷{CCõaõkeawFõ; ײ\222rU/q";n >K<Ks_ }n=0¢ _> Ͽoevs-s끏`H-CmLm,d#CbPq~GG0;úȚ+ꁏ`wSͣ>nyQ= jjj3͜i\Sʉ `7-Muwr5vQܒ7B>z#Q= >z#Q= >>G0kf Q*וyvk] jMe#&z#|}T|ꁏ` >>G0֥pta˸+p~GG0k>(z#Q= >z#Q= >>G0kfuVӻZhW#|Go>>Go>>GG0#|T||ýcP%|N;oW0eюLJȇ;ȧb&|_{4Wдk v}>_?W0K>8D0?׵0ܹӗX4G 8H%߈ZҎZѮhWB/|ЗH6"mDڈ5>P@pW}W2(oFCЇz >P|z > |> >``Їz >`00P|||8P_~[h"Їz Zdgrݧfye1Ⱥ^ڑkM5d:G0nȫaԎ`cї$-b$ |> Zh$P|E((G!2CdRE(,wi%|> ~, ,K0|X/C}_%(/P|E;Q[ŕX0gE>HW x(-`?Os >`?ϽM&}I|`s+M0qF>ki5<ĢT|xYiz >&}{@޾]f h8GЇz ~,}u '|E_y0P||_S T||> >C=`` ?|8Ŝ ?\᪎0B0BC=0GAR>Ǣюlr٥lv)4`?>&'QdS=0=/ >C=`-߃6 ]'X ]'X}c.st`cqG9rTsԥz >`?}!DQ|_@;:юvthGG;Їz >`00?>̒/(P``00thQG:ZѢtt;MQt4sЇz ZrZdTJBC=0|X%7бutcXG::9Ft`0P||߃{/yT|X?U||rBN*Boo7M&}I\WRo_f0^s-xxxwkFiee;22\0r-xxx˷|srn >n}G>~qLޑew,pv;x~;w</xq };^GWЇNo12t!+I995rjȩK#F.\4riȥF>h䣑F>LF>h䣑[#Fn5rkȭ[#F<y4hȣG#F<y5jȫW#F^y5ޑa2\'e#e ZZ5K&oo1o1o1o1o1o1o1o1f׌6n3nFh8-g6Ѯ3vFh>>>>Gx[| >c1| >cX|,>v,Xh@ބ =|,Xhc:'P:jNwh@' LJp|8>G#|>G#H|$>G#H|> Gu1} cC@2$ d C:B2 1d!CzD"&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&kɿ&k>gLsi3}4>gLsA֐5ĭn yk[7}7cX|,>}7w{{a0|> Ça9?39GpN49OpG#|>G#H|$>G#H|> GQ(|> Gh|4>9ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;Z/0XD;!wȿC;!wȿC;!wȿC;!wȿC;!wȿC;!wȿC;!wȿC5_M5gLsi3}4>gLsi3heG+;ZʎVvhe̚ ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvheG+;ZʎVvh0_/Ly5`ؔaʿ0_a0|> LJp|8>^v 1hC bX&b@X"1ȈF 6bx# 1H Fb@$(1HJ Vb@&31AM lbp@';y&x gy&x gy&x gy&x gy&x gy&x gy&x gy&x gy&x gy&x gy&x gy&x gy&s?yGN };xwxuǫ;^Zxuǫ;^wxwxwxXt}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}SpL1h"\1wuȮ]#+#5rhd"lȊE*XbEd)iJIUrd%[T,RH",րFV,RHbMen*uSJTayi䣑F>xl}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}Gw}VVVQȣG#F^YbQ,FbU,VXbU,VXbU,VXbU,VXbU,VXbU,V;j'Y$dvNIV;j'Y$Dw};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁~-*` *` *` *` *`J*dJ*dJ*4|> Ça0|8>LJp|0@ bhC*Đ!1D )bhCjĐ#1H Ibhq߁w};p߁w};p߁w};p߁w%zX+XkA.x1ԋ!_ bC0*B~,|!nC܆ q6m!nC܆ q6m!nC܆ q7na- kaX Z> `};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w|)Za,@ox0W\sU0W\sU0W\sU0W\sU0W\s*ΉsU#|>G#H|$>GQ(|>78jqZ< G q߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};_X%\5sU3W\5sU3W\5sU3W\5sU3W\5sU3W\5siIsdNӜ4<ѧ>uO}SG:ѧ>uO}SG:ѧ>uO}SG:ѧ>uO}SG:ѧ>uO};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w};p߁w%zj> iO}p͉7'nNܜ9qs͉7'nNܜ9qs͉7r,78 r,78 r,78 r,78 r߸5>G| >=owջ{wV[zwo^{^;ι8};N;^woxsǛ;fed2h|dhZ~U8*]ή gWUpvU8*]ή gWUpvU8*]ήHFj6RMc]f#5l(uRJT'?9y4hȫW#F^y5jȫ\ 2BFӖ^%0-1gmiq)F 0JQ`%(&XY 0Jb-&uOW]]]]]]]]]]5Xj66h<2efc5m{o7~Mx&՛FN\4riȥK#F.\Yj_]}uվWWB߅.w ]B߅.w ]B߅.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]R߅.w ]B߅.w ]B߅.w ]B߅.w ]B߅.k=EG=*VmjUd&6YɪMVmjUd&bCBP"1!F 5bCP$$14B߅.wKR#.5KR#.5KR#.5KR#.5KR#.5KB߅.w ]B߅.w ]B߅.k1W\ s50W\ s5ռsZ°0a- kaX Z°e.3 ifh3C̐g>3 fh4C.w ]B߅.w ]B߅.w ]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.u ]B߅.w ]B߅.w ]B߅.w ]B߅.w ]BVӣhzjUsԜ59G9jQssԜ59G9jQssԜ59G9jQssԜ59߅.w ]B߅.w ]B߅.w ]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.uK]Rԥ.u ]B߅.w ]B߅.w ]B߅.w ]B߅.w ]b'P9rs-BzJ:X`vXêVjU;aբO}SG:ѧ>uO}SG:ѧ>]B߅.w ]B߅.w ]B߅.w ]B߅.w ]BT0ۃjj᪆| >`:(@q;P܁w(@q;P܁Rԥ.uK]Rԥ.uK]B߅.w ]B߅.w ]B߅.w ]B߅.w ]B!'rr!'rr!'rr!' r(ȡ  r$<}u}?~޿?~q=~Q'8;ݹmwn涛nn{]^^{;VVcd6Pt~G5>*%ƣƣCqd ])4Q MUhB;} SyJTfRWjKM]jRS%9ERUyU<[#FnW5 J*( J}12e&eRPJA)҂-Ȯ]# Uӝ2h2nqke+F 0JQLX`ȥK#F.6%(F 0JY#6$Hԭn5u[e*[Vٲʖ5:lv94rhdժ\ժ\ժ\eT#+(Wj_ժ\ժ\mvi *(VjUVj\mutpmgѣzjo 5>/YXUXK>p|8>G#(|>  "D0 dlܕ۲q_6nuE77glܞq6-cX|HwjVmܫqE?˱+p|8>G#|$I̓g=*bG#H|$>Gh|4>Gmh3G| > "D0`AԜ59G9jQssԜsd8'Q-Y 9G9jQssԜ59G9jQsgу1b959G9jQssԜcI̓'1Ob(XB9sſ?˱mWXsqqqq5X~pa?88Y|,>tOgcVbjn"݁GٟٟYM6l"st]:G>D9ust]:G9ustſ_ ]:G9uhg | "8akuXZV:UN.Y Ċs9'ls9l1s9'mQs9m>|!osD1gGvaGvܔz5`ݔ,‡a0|@ a A! aG#H|> GQ(|4=MG=`$(@q;P,|J Vb%(@q;P܁w j,|>`8w|8v@,\Kp-B@?Pl===ۃj?y!x^h@?yſ?kr-c!p!|/>+CR)ʑ M M $14r&4KC#Fʻ.n"l` Tk|>G#H|> Gr5n]ָ\Yh|4>c1zAnڸEh&mܥ۴q5 D 6@ l` k>G#H|$>a`(C:0䁡 `(C" J5? d'aa( CZ0䅡/ a( +Ȓ"K,)Ɉ&͚nt5ݬ&ZMh5jDY mVhBڬf5Yozk澙fo~It!t cH[Xa ;aVϰz3a d$C&:JR2 tkt>X Z,|=dCf;c" e-CmrCoP\24! e.Cw zjR5  6 gkBYp|p3<{#|> GQ(|> Gh|4>cX|,>ŇT 6@M5?˰8!AԜ59` 6@ l`bGhaP [  ;8888vhz4=ચĠ$X|J RbF4z l` 6@ 4]ןE{p-`````dGQ(|> 9@ l` ~,zMN69@7eZkF^Ff"x+[My{,]KTwٿOv^~uo?{セ-u`v`~W$(kЦd\TU~k#k5tC[FmF4??uU@ @ S2A>2MJTsbWUu`v`6Gmmb_tJT75齇~_jjh!(!K^҄&4ϥuxk{]^Wm @ @ @PPP/ex+Fb-FhFhFn%7?|)IuU}] ] 9j58J~}i mg~F3vVPWMːwMrV}] ] 1FӻZUZ _MjW\mzUu`v`v`uj-?K]K(Xi7שuP`wg9V` Kki vA;}Ϣo7%Q+>[ nA܂q76n2Mߦ/lܞj}`;(wi6mܧq\Y%IHs+7ܸשuP`;(K'G80ԁ! }`C!B vP~Γus- qa `;NS:(A vPci&Z`O,z&M,huFVmj(4QhDB3͌73x3쬽o;%<߰:1}qc9XQÊV0Üs:a Md"CݟY\ Qǰ>1PZrg]V!2Cd,@YVR]`;(A_X )fh1U;(eXu vj}Z_שuPӎgz %vo: vP.oӷ%0G9:auP`;(ؿeXX0z=FӎspmX\ F ;(ةuz^שuz`;(A ZD朚8&B vP^שuz^A vP`kj,E9N(A vPS:N`-GX%HC_q: vPi۟E;vaM!nZmj>Z_;(A ZI*3N;,U۬fբT:uN]S:(A vPejU۬&:G9N vP ust}B ;(AN]S:uN]S`;(A vP"9eqhGG;:юvthG9hsNڄXes9jQtԦPZ_שuj}`;(x>PS: vPX\łv , o7i0 A) Laoaxi`;uN]S:uN]`;(Aニg%VaNn`שuj}Z_;(A ~,#PB vz^שuz^;(A vPOA<ylpǪשuj}Z_;(A ~,#s?F^F&s?&i"x&3_`;(ةvPp߇/-E@]ܿR';E<ݹ?wܾ?vs>;~{~Qp7T*  Ay }ĆPQ!C5o~ϦC(8>k:BpYBow9v  C!B!ghZRӒԴG {ʑ{:B;zs C  XjVSYTPo7TB!Bqp1BF`|dh6-C#kKK9C(8CPoPp^֡etW  5ŏ.ut=yyybzs!*  C(8C(h 0T Bq1}FKo/ 9CPoPp \UWzzs!*  C(8C(8>veMj &|5Ppzs]!B!*  C(8XJ J2,5}waniڂ+ em7Xi v +H%W ~ߠ7@ P"FqqAЗEӷ%yr{6zsߠ7 Pp*w?D:4wrV.E3 셂ߠ7 Pp! m`C@0!7 ~?Ln$k?ȍ\.s C/{Pp(8?cGҎ6Qz&FMd(t5DfvmfYy6,}aֆ6Sk saN@zsߠ7 Ppvo۰f;/v^7 ~?ێ+ewDK7 ~/q^9@ PpPu Pp^^(8+?εjke{ ~ߠ7@ P )'ݕPc%#'vE]p+8o;T9/uAozcAfBAoP(8@ ~(A|+E9zMuAoP(viTs5G9zk^sׄ7 ~?LFӎ^sNUcG -rKuAoP(8;Enp:>G94 Pp9@ PpP UA-pCvC,OӮiG+ m7q^|a6j"D?# M(4Qhf3Um+mYͪmVmj;iGd&7 ~?m⋮st^7 ~?NW?Ϝi7 ~?!hB7 ~?LFhGG;:юvtc6GE uAoP(kQΩs,M`Nu Pp"P*U-pZ-9@AoP(8@ ~,Ϣo#ͷ> P SX[===mء/ÚknY~(8@E;AElvu Pp t~?cq->PB ~ߠ7@ Pc.y ~ߠ7@ Pcq䚓k<%Oylp<%O S^(Si"x'(8@ ~,#9D4Pp8UB)gWd.&Cm*d;`hN8Ҵz-BSqNR)zs)NPp Ʈq^}@r S(8MPpϩ7>Pp8UB)H]r,5,KY*)m zs jS5)B_dhkѕT p8S(8k)NPp ^B)*NU,KG(IFkg?qFF1>r:rz_U*N~7U B7>BT p PЅ-64JU&c Nog}S)zs)NPp  mjzWkpWj n D+>}}`4}e4}͕6 }v_.H)XXK~r ~='(8N*ODPc7K Z?`C;! }`C!A(8N*EsˊGO'(8N*ǢvPpZ'(8ذ4r&M|6Qmݪ28A_Qf56s+`mvfv{nfN7Bžx* 5Cذ=NPcWvI;̰R: NPcq! 8쎨$CH{N^8NPp ='{NPpRT'(8Aɯ&(8N* NPpR ䷀A' ~ׯ^'(kU8A_iӕ8NPp+tK_hW+8J NPcq͍GӮ1| =D E&T' NPco(cZ?7 349AIpR?WOH'IpX 5U'(8AEߦ/yrsR5,kBIpR?>dN^9A Nj8NPp?'(8AI-p8A N~ 8ytR Pp{& N^9AIpR?WJܚDG&Moٕyn湙f]Y0Gu N* '(kSwѷK=e0 +YZmV(N'(hG|uSp_kXuhG9rz9JP⛠8NPpɜ99@shGG;:юvt 8A ~,/W>QPpRT'(8A_*'(8A Nj/N'(h{ tł<تNPc0aGѣQXXa ;o_a(}v9AIpR?># A '(+`5K](8AE_{r-(^(g<ʃo zMN69I+4P" Cx NPc1ar'U'(8AE_2̛k!x^ NPcq-np~Z~/}!tR5p ]ͪr̖K, .UXp}Хj .oĂK.R5pK, .UXpK,Ă\\ztĂ -ֱ>R5pS uWR5p~T \b@XpĂ ѿhRb~U&⾊jUWSUWǎ@XpĂK\ztĂYkp/ .oĂK.R5p].ҏK, .UXpĂK.R5pXpQ \bח렋j?Vaw_0k):O[T0Vc [^p cd-UX vo# GhW 2qqA. .  7aU0E5p X% L|KKjP5p%íZ0AH'NLJヘg#AsK \T0E5p X\sѣqhG `(C"A 3KUvbSgJE2Q?M]V?X}‰Cp n.`p)K0+f5df =-].ҍХ| .`p  \\K%\. .].R>p `p)K0n)(F2 K%3>R:uaWP-ƍSK%\&pFR>p n.`p)K0O`/ P72Rߍ$M`pK%\\| .௠šՕwK%\\| .7K7BK0t#t)K%\K%\. .0 1 N_... om0"pq!t\HTHD]yΣylL Is9r@ .`OBG#)Kt2^(tuY7/6uM]YK͇g`OˈX__ʱ IsZ0.`p:X`yB"E>p >!`p\0'Q7"!@8D#B"E>p \0 I2WK]셐C .`p|0 /v$׬tͪ6ڬjZ6kzh(_Uh|fƛofYkff&{93I#TnD]p|0'XVay:/VLh%\0ŅE>p|0.`p }sxEB"Eߚz|$nF9F0.`p5\௔K%rBlR .`Wjt4:rMA+cAPuRwe-ה\0'QuY X_(F&Xig905#^35#^3?M0+kF|0.`p ;a  .`O.ڹ81"<0 ... \0E>p \" .`pF)/B Im~ V ]C9V䚷zZ6VX“]V |$1mcyn湙gb.$t :XtDi?ٍ 0.`p f}% Ic& I}$3:HG].`p\$Oh`p bG#v4bG#v4bG#v4bG#v4bG]]0.`p|0?Vi';* .`p\0:?]]0+rcGZSq\P.8xI.NQ[-u+qV>7> rAL,:#]RW \HTHj*S>p 4r6 $b] %ʰ&Æ)5 $t`WD'Q7]vs*\$Z.]q2%8'`pw$Z%!\D_I{mR-myp& DX .`p \jϏG>?ϏHPKBBJ( -v ԲeWˮ]-ZvjrPˡC-Zj9rܖ]=tCW]=tCwڹ=tCW]=tCW]=tzj9rT˩S-ZNj9o˩zazazaza&=L\jrR˥K-Z.\jrV˭[-ZnjrVˣG-Zjem/:[uu+[y-bHTH4Hچ>?ɐqqqqqq aGؤ?NaWج? Îagش? t:DG#ёHt$:3rF9bګZ/}^yK>/}^y_X|a_X|a_X|a_X|a_X|a_X|a_X|a_X|agl\˳qy6vTΎ#MrCR"R# :EǢcѱXt,:z"$Cr@JBjABAAAAAAAAAAa0t: Cpt8:,( %R!5 /}"t:@G#БHt$:DG#ёHt: BGQ(t: FGht4:`?`?`?`?`?`?`?`?`?`?d?(쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰® *쪰®  rr4Hbhy-ϣy<=itdW"? Ca0t: Cq@Cz8=qC|08>rV9pX9Z9\9Е^9DGUQ(t: FGCwʱ+Ǯrʱ+Ǯrʱ+Ǯrʱ+Ǯrʱ9t|t/{谫ҽt/{I݋^Vºֽu/{݋^fBڽn]9vؕcW]9vؕcW]ݿٜ%Ͽ???O?L*i*j*k. 78`Tr5j0`jXK-Z.\jrR˥-_QQQCW]=tCW]=tCaV˭[-Znjr-߃QQQQQQQQQQ?aUxUxo|$ &%PZHPro]%*W|QG-Z3%g,9cKXM-Z_<"#<"#<"#9sN>9sN>9sN>9sNpt/{K+N>9sN>9Q 2u/{݋^fBڽn玍;6ظc㎍;6ظc㎍{yIKܟ*?WPISS2n ©©©©O 7ScZ}nucQˣ׵U*xm6^e((( ꡫzpRBIh ϴ {aեثKWDyEWDyEWDyEWUr*9xJ^%WUr*9xJ^%((((((( w(CZvjղdl%c+-JiQJRZҢ徛},,ye+[0D&j> WhDyEWDyEWDOpF g4 p3h8MfɌ6{]R(/Dy! Q^Bl%x^l%x^l%x^l%x^B(/Dy! Q^B(/Dy!_iѱXt,:sdA2$G D*F$tttt0B(/K6 d/K6 d/K6 d/K6 (/Dy! Q^B(/Dy! Q^BR#td8Qf8qh8+謠 ,?<Ol謁~deGmfFlffFlffFlffFlffFlffFlffFlf˨6j^l%x^l%x^l%x^l(/Dy! Q^B(/Dy! Q^BFGht4: +8t :VX]`uB *B *B Q(t: B *B *B *B *QG%~F!5 WDsF4gDsF4gDsF4gDsF4gDsF4gDsyɚ'k9GG#t:)$ͩjEʏt ɑnq/~F$t0Ɯsj̩1pt8:ScN-ёHt$:DG#ёht4:FGhtXt,:EǢcѱB;EʏĩvVX]h ?UV!X`UV! BGUV!X`UV!+"X`UV!X`?J(ď(F$h&?:|O؛hΈhΈ.R~$jy%>BUZ{ |nO*RZR#|'ʌʬ 횄{{nO )!#|=?AeLe2%A]dH%߹H|㟠2owZZ֢(EGHO}[eQOrOьfl4cMhF0$&a4''9h8)!#TF72|p77}&kS?Q.d<??lv['(nI%d Dߊq(єc~~{ry }Y1ؙ?l͇8֛iHoAúnu)%u2훛xYF9YὝ'1O#]ٖrK}оOˬޡޗA$ҏDC]Q7Y0#30#ƏD]nP7 uI]YM~RNxoJG*$g;;{S380{ilƜS2ʘ+cy1ŒrI\Q(Wo@/MݦnSzqq4IbZ )e?R# V&rA93H%rI9V!X(uEݦ\S)הcUPw;eURw.}2ܧbiHco"r3"i؛hΈhNHG.q))e?u^_%4"A#4?p80. 80+n# zUyaaVXXaM5TXSaMOKc/4sc/4K'Fc\^G/FcmLG\P.r`ݚuk֭Yf݈hΚlfna|ue\vy-Q,^uٳ=шшшшшQHHH+ry^.;:Ѧm:Ѧm )Q#QPPPC9NT*|}Hqqq޺rF9Q:srN9^G. \iHmp$:I]<_}$BIGlҁCƏD9@ AD#rl!R> R> 壻)amBGǏD]Ű3j}1brt8X;'7(G˜:'9uN].A]u %t/ssB_9))$ò_бq>b/6| }hoioioi_xe/s8"elL?o9wՋ+<)9لPPP<nfc?AKeZZjUYYYѴ}ݿ% &5۔lBBppLiN5kRv?oTUFr5.׸\r"RM&lB&'yĹ@s#~')*JKy\TFCYCTdR6!eRVe6$[~uMHٔlJE6" )۱"RM&lB&l꟠S-k-JW2ZTdS* ) )Ön4c#kTX36Ѵ&a4 IMh)۽'F:5elo& R v{i&Hte# a~r6OR-)RnMWV?-7rM9vER6Wb ?#~$.:)@R6zG:HDCC]F l 埤>l2A!e' Q˓̘Ic&m(L3yfz )H@?-7H{grʙ+gy7Bp9-Gnh!yF l eԏZHD{f$C6 l e)~$ (7@~,)< k,溘.IXS㵍tQi;h젱fgmvyF5v$5[|kז}my/\G-x2,޳x)\-eoZjy/2/EyFl e)H1GJB؏Qrpt8S7 uAݤxoUnM4~DR]մ+3ir̤rF9C3?ɑ\se̕1WƼXR.)+=(zPo9z*_0/!yF l CǠu#6R6`cs}0'sxT CyR6MS?:ˈ愔!e)$D\kWl e)H'Q#R6ljEt:BRID_lDz9;t l e#C6 l e)$Ї/L|i/^x?>?),g5, )~WH)S!_ܭĕB~?}tTfTfUfFRϑ`4kܮk].5C5׮dR J k\qʮFqv!eWN+'م]H+܎75׮dR U}$25ԐoZ+9م]wYv!eWN+'م]H+c$\_|$Q9=u!eWN+'م]HOdRveڅ]9ɮdRv!e_< E/e.څ]HٕB`O "Ѿ2$&a4 Ihȣ>> R5pFws]9.B_A$Pn[.vrj~@?젟xi_~IIOm?E9O[vOS)7cWd$;HA?>؏a]c e'#Hv]9~$겂ǨZpARvrZOG)7A?tɵ eIo<֌3ϴ );NF{r̕3C 9ؽc)}xANF e)$tuZ: <ϕ eKd)$~ˌ'3/icd$;HA_I1r(nj˱ );H+$sx2D B_)!)s=!8DSCTq+q!Rv2d);HٹARvr e'#Hv  e'7ARv e)7$?Hon,%Nn5׃;~KYovfgmVYf%$RKs-^ֲ-Gl,ϙeZ|f?ie}z_W)bߗ%JO#Rv2d);H'5:F9Cpt8uNݠnP7 [&h4^`uɵ V-Ɯ)ǏHc33i̟5Ic&4Ϙ5c,2bI\RN`WHv}nt45rAǠc1`Ȅd'#ARIAxMRv.vr-3x$rx٭d'#ARIFSFG|!t03K]>}0'sxT_%񚐲d$;HA_a-4yuBRvr e'#Hv  e'7ARv e)Hjza~^z )xHD\UɅ5;paM'TP^K+Snkkd$;RvW6=8̈td'#ARv}J7+ZvQNRv.vr(oe\q/_rtd'#ARI`_fPH'Q7ߺ_шшшшшd'#ARI#Rvd$;HA΅Rv e);HMvmoirF@iSbsGr(8DGR#ёsnQRIԭ.= $5Rv2d);H'r*D0Rv.vd);HHv2 eBk);HMv&;HANnLANF e)$CS;L9t3A!e'7ARv2d);H'Q7ߺ{~YgBNn e'#HvuXKk/C{ؽ2J<x&=3}~>K)J*tu(99\!]N5X3oRB\CH+H̪̪̪f㾞n!Prr)?$\}09tu(99h ]N5ZQ-5.׸\\CH9UPrr)n!Prr)ǿ`rPrr) u$25䋔BIPijM C!:C!`rPrr) {i799C_E%'rvR%'rPrr)JN!!JN!Prr)n!Prr)r(99CHon4c##!'h[h6F0$&a4{u(99F g4]:C!_%Anr#Q.~??lv[G/\m 79@_S6{Obl4rCA/:@AnrK)Cr\m 79@Anr&H9@Anr}6 79@?)˜Za&3r ctfҙI?8;3s]r&H'QxOX&H'#AdxxQ_pV B(gyr+79@Rr %@j$Hf<(nj'3x2ɞst0r8r 79@?L6u{BC ! D (!!8VC`)W[H9Mr)H9Mrpu)H9Mr&H9@R/H~% k|ƮnKpu 埔HA! 7߬~C潌հ\-eVᝐOZx0R>`Of<RJV[Dn:@Anr)W[H9Mr)H9Mrpu)H9Mr&H9@R/HֿqK)%쏣 ]r&H' +쪰“ OWXSɅ5XN^<ߚ[c/4VF9jS b.&H9:MWݢYfnVYf͛5oVYAb8&H9@Anr|-9 79@?Iz]=;o92ˌ/~2ˌ/>x[8r 79@?[1r}f&v4bG#v4bG#v4bG#v4bG&H'Q}|#4bL!)Rr )Rr)H9@O_KJisF9gPɓOziG&H+:xˡRr&H'Q[-FNӦxPc(7h[.:*"9ȉb$ 79@Rr\m 79@Rr )Rr OH'R [Cc$PH9MOS7 usl3A!)RIŊ_Vlj΋cϜK8;Rr)$e,SD}_Vؽc/@t<*Xї_xEc41ߟߝ-w)>:B_!aPjTTU9T}TfTfUfUfUfձ*.RN%'r )ֺ&Fd4a©2v4 kS)'h\qk\ɩkS):BʩRN!w3<RUzώSH+VW=N!S\SH9uu*99S)B4d7uu*99SLN]sJNN!5שRN%'r )>:BʩkS)JNN!RN]sJNN!Trr )r*99SH9_AFS7mkS)hF0$&a4H5שRN}09uu*99S\SH9B)_#גK)$:ؕ a~B?Zu&'H9MNrZrru DP3e[ )$8چ $79AInr\r&'H9MNr)'H9AgLLP_KN.Nr]Iv3a)'_KN.NrxRˇ)'H'Qrfȵ )$a7|LOBoM + 埄D#Unr)'H'Q.ᬥ\R]ץKK%]ʑ.ٮ;_a$+pRBIP˭[-Z\Q(t:FGѡ}|5 Ir9EǢcѱXt8m>'~v?ɑ)  xw݁wx7qIZNZNZNZNZNZNZNZηedHdHdHdHb$K4t:i&i&i&i&i&i@--------2{X{X{X{X{X{X{X;M;M;M;M;M; J$m]5vUcW_~9HH 3x= 3x=(QF9r_X|a],vb],vb],vb],veGgٟ}dɷrA2$t: BGht4:FGht :AǠc1г-Z>|hCˇ۲W˵eny.2 ]D*F$j;λ;;;;n0tpCpt8:GCm{nUEs볋V.OBF:DG&i&i&i&i&i&ic\8X0NKZNZNZηedKdKdKdKdKdKdIvdIvdIvdIvdIvdIvd!2"(#2"(#2"(#2"(#2"(#2"(#2"(#2"(#2"(#2"(#f-lֲYf-lֲYf-lֲYf-lֲYf-lֲYf-lֲYf-GDqHdD9qPdw5#&4Nk81Nl"ù?ɐ)ily-O <'[`ly-O <'[`9=rN#9=Zg쟷e=cptpAG?pt:@G#t:Dv?W D*F$i;+dH88888`q莃w8Gs/2 ^"Ǻ@/x}Z6Z6Z6Z6Z6Z6Z6Zeʰ+î 2ʰ+î 2ʰ+î 2ʰ+î DG#ёHt$: B'v"n'v"n'v"n'v"n'v"n'v"naWDNDNssx ^Bq;v ^VY}g9t,3K9t,3K9t,3K9t,3K9t,3K^Ϟ~yϻ|_=TM_ퟔPԱH ^T|vvvvvCuղ&n)_A-mղS&T&4qei!Ǣ\B-'I{H{H{H{H{fYkrWRn!Rn!Rn!?TTTT(F}j}uv+uv+B-B-B-B-B-B-B-B?&%PZH-WPG-,kY]ZVײյ/#$P&$\h~F3UὅWWWWWWWd&s5\Mr )7H+5F 5~I?lҏ+GЎqݭݯٰ )7HA Rnr BGQht4:FGht4:AH  )7HA_}1b(6$2DAǠcypt8:G_EǢcѱ=2Ώ$8B2:#3:#3:]5$t?/?/?/~G-~ & )7HA Rnr )7HA Rnr )7H+%5IF5UѫWE^: Bv't"A't"A'Rnr )7HA RnWb8sNS:9S^OBG:@G#ёHtqC~8?qȘ!c2fȘ!c2fȰ+î 2A^5jzht4:tq"n'v"n'v"n'v"n!)7HA Rnr )7HA RJ31;1;1;1;1;1򚛼&A Rnr )7HA Rnr )$ʱ:|`=ܟvy?_!wWH %%vxa|^)/HyA R^.^.^.^.^.^.^ %x4^2L%x4^ )/H+-uK]I!\O\O\O\O %x>^)/HyA R>ǵ?-Hig^|)oPH4H;o0A4F9#VK )/HyA?=I<*x>^ )/HyXzXzXzXzXzXzA R^򂔗L%x4^2L%xA R^ m3$;C1bor1b(+r,F^y1bWy1bUo YN)hR^򂔗%x>^ )/H'ˈ0oHjeؑ_ 8BS/Hy>^%xA R^Xk|[M,ږ}cѶbW]-vbC -6X)lIoa>^%xA R^򂔗 )/Hy4^2L%x4^2 )/HyA RI5$2^]O\O\O\O %x>^)/HyA RJF9޽(go9eF%x>^ )/HyXzXzXzXzXzXzA R^򂔗L%x4^2L%xA R^ 寄8M]шшbbbbbb)/HyA R^2L%x4^2L)/HyA R^u @" )/Kid/K )/HyAeeee R^ )/K}d/HyA R^Ox%[RF,eRBK}d/ R^(ǜsZiaM)/K}d/HyA R^rrrrrr )/Kid/K )/HyA_={س={سs"%x>^ bbbbbb)/HyA R^2L%x4^2L)/HyA R^uٹkg )/HyA R^2L%x4^2L)/HyA R^򂔗˦˦˦˦ )/HyA R^%x>^ 埤"(҉"(҉"щщurrrrr )/Kid/K )/HyA?a3Nĝr2L%x4^2L)/HyA R^򂔗˦˦˦˦ )/HyA R^%x>^ 埤̅ %x4^2L%x4^ )/HylzlzlzlzA R^ %x>^)/HyA RIhSMHyAK}d/ R^\^ )/HyAKn )MI>?~YyƿuQ;&R­aOPeܯO=x' *c>hT&T䓊4gc .2#sxL+'hm94+h2C|'RWh\qJSe4R>H'ʌ;Ԛ>yH?K1 !HM]T;OPVVQQQTz*2PNI铩ZHsTFJwBenǞPZ­)@,iYԃjjjZ6 埠ZrOu~)20!g49hZHPMJjVմH4H>F9[(a~rAD[礜|ݵ=xGR'(GNPzprЃ'|dH-t:MFGc(7t uCݥRw][W}qsIqX4m5uS6F^=yR~$Cr isz̕gHk$ [:C)_^N].Y#uA]'dx{eOblؒ%cKƖ-[[N+x|2d8x C@)?u!r8)?\Xbȋ,VmXb-F^#/bH(fbŞX4u쓄:)?"Cq/I<9Z3ύB{#'O2C`y{v0Cv0ÚOGR+EbuELY?$~u{OPPP<"U8՟Ts)u͞kPWW) xWЯ<$W -ch8QV"ss SշcOOF،Tf,"E~'JŪ?Z{;vbMN UW222Rz9?Aw$Z9\BIP`R ~.R>?A)!s/ %kYx˩?}F𨫣WWhVG+8p4ߟp/Nh'Y$YyjZ(|մܯ%$iɏ4ujXHǏԒ??lvOVR-/M༻R )lnn#Q.)GvқHЎ  E\hj :Pw].uKOVGƽTδk~ˈq<7HVoK9zeo_)e$?qyѮ:̚3W 93K|> >oؠzC{OJ$t5r|0 F)/7qo<.I2/$F2[2dlؒ%#J<>[ɈqԿX?:sH+YGnQ ?"R>M~$Bxxkȋn1b+F^ȋ=2žQF1;H1X֥/NC#|H>Dq:!寄43>/ 0|aQ#|GJ$ʱ|x k><'\?zmEbM -~Xb/sfS~k?+0"Ԕk5d7#!KRI$:KE7# ){{{{9o]+Qw)ji*|GP^}ߛ#}6rM~$~{߾oߍrۿ|f$?5)$wv!k D;?[-^SiE䟤/?[0`l8+ɏı c890N 5֏|?C |!~ uX R ? EBG?gD7o2^"#.1N9DH(#9Z?[2)e$?[WsPŮRon#R#qT^HHɈɈxȈ(Ȉ}Ljn5֏8b& k*b{%?5oVfmV 6+د^VYa9R>'FG8Fe#Qguٳ)&?0au.6r2elؖqFt3)#Ȉ5֏=B|G.G՛e^b3D!R>M~M~$G*FZIN]i?uAݠ.韠nPuN/!壌GN?{#QKJЗ/M{ڇx&$٤1/?rF9VȷӼH9nnOb=8sxs9g}YOBsYH~$2OH(7Ԋ)R>InF#%u9f$?uAz8R> Gfs›5c8;trm }ӳщ֝h^cHɑ !;ǏD]֍݉ۅ.~$=eꝨf$?`Z )Qn# kIDN/|@Gɏt) 魫85R> R>M~$c}BGɏD{=gx/ 0 / ~>xӃOOVXW5~a #גs{~@CERcѱo98?:) nw/k]. WH ֕B~[ʄHiwp]sJNv!eWr )s)u͞k\o\\]Ho#!%V$ѸB +4иBEh%/.JNv!eR-s~0'Z))I.A[eFeFeFe2ו5 2UQ&ٹރVL **#%]m )&r.Rv]sJNv!eWr )kWr )]Hم].B.'h8Ώ<ꨇz8cTFs8%&j.R䟠2Ֆմ\JNv!eR/R9=A*7A?o{^&;HG;'('Tnd);Hٿۣؑ; уKуjd);H'єk5:APw;uKݥv!e);HlxL{ZObD7tW(7Aʮ%?B%Nnd);Hl=pf3CNC< $BBέd);H䟄Mv e);\;Rvr e'7ARvAJ$H41dlؒ%#JBNnA3O$9]r&;HMvd);HA~-^1b+[[1bȋ#/bݢb69(vbi&;HARvr e);Hٿ ّ8~-'14>3C/ 0O.0Ƀ >eXF4?x=,2Ebu}ÏZlhgOYe6gbmlÈ#ג) rM\S)'Mv e)HX鉨Kd);Rvsɵ e'7ARvr e)%yoQX$?Rn]_KIŌrd&;HMv/! 9=pQ8z&?7ήKd);\;Rvr ek'7ANn&;HARe0x>,x?r-B%Nnd);H'\ߏAxE Pw.LR m=\^ɑ3"/q e);\;Rvr e'7ARvsɵ e'7ARvr e);Rv_Az+~+0n˗?ǿ_$bi0јs+V˭|=OHb}$Wꡫ% %%]?A= 0PC=J}jQˣG-Z=q &% nܷ0n7W8LK 2SMlJfS2ܷq0f-K(YBiK\<wQ˚<4-_A *ynsk[ܚjYrϖ{ܳ-T˩9+𫐐ng4?_~ZJBK d&s5\Mj2W!IHI#Gh8mS(t: BGhtȒ ǯdH 9As[+iS89mcǰz 1ǰ3`x πIt$:DCD1DCD17K}lc6Xlc6Xlc?_| +lc6Xlc6Xlc6X=- s9A6sG8:4;uuVu\SreЗw^ }t :=ȮU2 9@?ihE{tp}v 9JMwo z::awwEFrpvZ 9A^s\::z`u[:_y1Ř}a^yw^,}Yt,:NDNDNDN;:ιs;:z`u[:_(הk5 +~x /8 󾠋|3ps=9f t@s}04j9yr{fݟ~yݿN1wf+0nK= &%....Hl|0ԍHPˣG-Z5SaWh # `\BHPaLhiBkZ }0ԍHP˫W-Ze_%eJ2r)r) K(YBJSw߆BK%ljY\ZҢ2Sd %K(YBJ\<4ϥyL9ŔSL9ŔSL9ŔSL9ŔSL9Ŕީq-RrDv {nYh2ߢ~puv)'h2G9d&2SN1SN1?AvÕWP˩}eL'ivRma;IgNr”0)%~O+mgt :|1)'L9a SJ:}V9 ;IbN>ܐ$6'we')Is”0)'L9a SNr”: kf0t: CBXGuxhZb SNr”/J;+4㬴;:XcM5Pcj+V:X`V:X`k )Hj[is=|DSJ / 0Y7H:=CJ&Fvw+x+66Zֆc9#DD"o"7LyÔ7LysB aDD"o"7LyÔ7LQԙm(o;&hrVxr)߂K.PϘ-tO9 +ԮPNxr)ngbʭVTr)-NG[']“[LT*P(xrǭ“[Luu8SnE%[LŔBFNn'rǭ“[Luu8SnE%[LŔSZcl}[zΏl1VTr+*Ŕ[LSnE%[LŔ[Zr)“[L'F &c{[z-t)|tJ(Շ>MQg/[-:κuu)[Q-bʷЪuXuu0[We:纉NnrMtrÔ$71 SnH&:aW7 SnNnNnr$7LaʏRL rsusuÔ&&a Snu0&&InrÔ30&:as)?z\&:aW7 SnNnNnr$7LaʏRoxXcW>M rsusuÔ&&a S~jX][([ \`6#`Q0Cy)7gZ7LaMtrÔs)7_=nzD'7L9ɺ9ɺaMLr0)ߊ(iGRjE$9m$C J^ {qSnr0&:aII Snb)7LQ"osb"/kD}sQ3 y]< ANr0)7LNnrÔo3o\CY8$ d,\}19纉Nn\hz).2u76阿ͬmQLrÔ|+~x1 7f,'s)7_=nzD'7L9ɺ9ɺaMLr0)?JQW[r"oq[nnnnSVM֮&E'7L9ɺ9ɺaMLr0)7:nr$7La͙ Snr09MtrÔ]U0fbW7 SnNnNnr$7LaʏRo E'7Lq&:aII Snb)7LQ o=~r$7Laͷ$71 SnrsuÔD'7L9纉NnrMtrÔ$71 SnTgvdݜd0&&InrÔoŶPb%{IHLaMtrÔ)7'Y7'Y7LInb0GPi)7L9Ӻa Sn0&&InrÔ30&:a Snr0)7_Lnιn(bx2"|q0$$)71MLrÔ|+ZYHoVHow3e3e!˦_ߋ)7'Y7'Y7LInb0[ Snb)7L9Ӻa SnܜsD'7Lq&:aII Snb)7LQ3;FNNnNnr$7Laͷ$71 SnrsuÔD'7LNnrsusuÔ&&a S~T yA oRӤM)ZY,RLNnrÔD'7La9MtrÔ7_=nܜdݜd0&&InrÔ\X?d0&&InrÔo7LInb0L)7LNnr0$$)71MLrÔF3ΒI$o)ZLInb0L)7LNnrÔD'7LaMtrÔ$71 Sn E^ ۝Jg٩Sn0&&InrÔ30&:a Snr0)7LInb0L)7LNnrÔD'7La Snr0)7Lw!񙿷|7yYs0߿y7 S)Ly`ʷbЦ7pH<0G6#̅f.4s ws]ڞBdy#J%N <"%tL"$Jx+Z`j FZN[3K%kNws^_?<$Z $4Kn!4jW]vM(Zj{OɏX.'WiW. ,X'M]8Kn?BiҨWGDIl ʵF O~Ҩ3KFR2z z1Nx?;дSτT4PT.#KhkznM-3,=,'WW[&YX\J:ҧZ}Vp4FC>$F5QLQQewO\2*էȱɱɱIIפk5POD'Z{Jw[*tI$:D'JZÔ_O*3Fi8\*PRBOÔ_(C':QB`axIc`^>LUe>LUԙ>MڛM%'Kb'֙Xg~^vF' U"Hڑ>:$9m|!yX .aʯ Tp*)? 8_L~he^u/S~^%yY*ɋ%_aWUu橁q_E^0[,Ô_DjԓUtC8& d,<+5̅f.4s ]"sɽILnocݤc6֎s5e/f,#dpcbU(uܫ(.&[q"Gn׳knj9':UU/&K)M's yI$Q):ӧմw5Qzs_(%騋%t':U(j s5 ?|1U319c9o':U*js_S~U Q<-v0Wqx|Ô_ls_&Obx<)Q5b%xA) щN~`CIqι~waZI%^+UbX">sWQ ։f쥜W)/*aʯ .Ǝrԓڄ/exPdMd/b%':U6-ߴ|M{7ܴrM+7d|1U܍f7nFplmÔ_Üs_'Ь x4kDF4c<5g~aʯ"/=xi)?jSg W-ˊ99"0;~X_,b69׏*0X 1`*0X >aʏvmkLm\`Cή9UU__@N o7 y_*꜔ɫ,,S~5hJijД7`(o(o(Vdɯ THg3ur}==LUO,j5VS 5Ԁ~Y[{=ɯZ(C*QRy쾝s_]naʯds*&yI$oʢEyak0*r`k6Ԁ~8ɯ2:Ot(uñN*2na5vg٩[u>PjəjPɣ#IDHDV9rZSӟp o)9ԫ^ jWϮ{H[%NK$\"$Tr( 5!H y AjRCP[S$DKdu]gv+?Be~޲-Kز-K~~~ުVU:̏P54g^"?!ز-زHG[تy˞[trBkUUV:XN +%$N#F0јt41ϨF3Q.YzU*9X/ʯZ(Cq={ \KS e(c9<ɡٽZkifaX=âF;v0a'ʉl~FVpr89VAZ j)kMɛ5k8_V~{&:^ԣ{xr={$<œmh{y+iX G-(A;vVIZ1WM&GɁg *j5Ԋnҋ9xP/+Rʠdl#6Hl#bM,66Hl#6>-l بFV5ք#“X _bL,;!}+V=ST:;NSTbUqgx_bS6HGd-TO*Q3藡_fاfٳV{Ŕ l0G^fn61:Hs9h)L`S6=zyE]Ml__l_:p>:ޫ:c r8 +H tI:U_I](r5t/FV~_9u~"/iXaM6 IrPxȎxȎ)L`S6oE˞։,l0e)L`ʦ_E^hׇ>b<\O1e)Hg3ٗOQٽtv/cr^)L`S6Mg_?ՂPE,L`S6ȿ1b V`- V` Fgqu07 BL`S6l0_G ?~/bN$D";LaS~ԗNM֫vM KGyMyK/)RLaSv"Hd'aSv/G, E";LaS~eY);LىDv"Hd);Laʏi1W_bu+jYOzC ~eQtÔEZbʷһO¨6V HǬmf"/zw?,g4~"bʷÌ(1e'ىDv"0e)?t]]դȮnE&ݐnH~t~~);N$0e);L=G 0e);N$0e);LQخO%Jyx Ǿ7eW1|W666t_"Ῐ1\)?*P/Q{Ns ?s ?s ?sĔHd'ىDvÔ/7*jxFN"0e)?Jg$|+0e'ىDv"0e)ߊяZĔHd'ىDvÔ/]4ZI{t^*0e);LVUb9YԔcCLaʷڤc%X>#[&Dv"0e)?Jī2*1e'ىDv"0e);g_;LaSv|+FSMMcEOCcl{4bN$D";LaS~ԗNfق11va E";N$Ô0G}Tf,V6AJ6p1e)*-1e);LىDv"Hd);Laʏ_foffo&D";N$Ô0Gа ;.PDvÔ)4_{ );N$0e);LQ/j;x((959ÔHd'ىDvÔ(Z[WSr^&oyi#gSv|-|p>"Hd'aSvHG/z|mʣ֦MyjʣKÔD";N$Ô0G'0e)?tA &);LaN$D";LaS~OZN$0e);L9aSv0e);N$0e);LQcp NJ+ƿW$D";LaS~h9"Hd);Laʏ wE';LaSvD";SvÔ0e);SvÔD';LaʿJ;s]u'>9SOsDX t O1;ބN'-t9']“CLPxr)%B$- 1Sũ#(i l<._]S(eߧ])B뼼r8q!JE%r)T켞N'-ti+̦4/|g8ĔCY1PTr(*9ĔCL'T“CL^ݪVUU-#ٲ^=_ 'r8q!JE%r)bʡPTr)r\S1Pxr)92tu(<9ĔoKZVN+BiWpB']“CLq F0Q'>jhL䝊Ks)?JZD*5Ӫ$1STo^c1[WQEզVM:E'L98:8:`ALr0)Sr$L9`Sr0[%@kw{:J%UCE'L98:8:`ALr0)?J5ușNjzWGw j>}P`F%IrZG[(9}i[5ŲcS~Qj@0)Sι(ғMf.H$=PbI_%}Ub\M::`ALr0)Sr$L9`Sr0 :9`IISb)LQ)bM9BUխnUu[ի[zr*>9SG]SP9iT|r *NNAT|r *SP9uu *SP9S)ʿAѲ|Bu)q*v-N9`}tѸw NMoGsgit''PQ>}P ::Ixr*'EN“o@$<9Ixr''P9Ixr|299: ON vPb$}Ub&s5ĊH86~IXY[CTP9Ixrt''PQBgBP9 ONr@x*' TNr@*' TNNr@*' TNr*'P9ʷ2cC 2 t''PQ*fv7sK32M5}.“o@$<9ʷb 0.N“St''P9(r@x*' TN>t''PQ t_c9Ixr*'EN“o@$<9Ixr''P9Ixr|+drru@Gߛ2^“(޺lttZ̾59d'#|299: ONA;wjc9#''P99: ONrQ$<9 TN“''P99:Ixr''P9'*?b&={ Ixr* +N,G['P9 ONr@x*' TNr@*']' T~ЧfDP9 ONr@x*' TNr@*' TNNr@*' TNr*'P9ʷb<>U$<9ʷbn귩[0(r@x*' TN>t''PV#6T@Ixr''P99: ONrQ$<9 TN“''P99:Ixr''P9ʷN“(wftS vr@$<9G*'['P9 ONr@G-Rxr''P9ʷ2~333JqJq:9Ի)<9ʏmEE_=Z\ܴ֔);WP^`#Ύ'(wtAqnI*<9AIxr"' TNNr@$<9 TN“@$<9 TNN“(JOtgY]g/&κ.(}SSgKg]KP']lrRr *>\Rr *TU3J%\w>KPrFէgx"[T@PΛ^Rr *>\:\ʥK%\ P.AT׻WRr *y*}6tu)@KM.u] P.AYץT.(r *Fճ[ʥ&κ.(rRr *KPKM.u] P.AYץT.(r *κ.(r)@KP\%\6}KP'ds!JTlԫ#-qq l/Q'>Gm5yEO+qo&']TU92O.r">IE|r*PV)-/jԊԊGjt0Zi27'P8麈O.r\@*']T. \@">T.J=d)] *Ufrqu\@IE|r*T.Smېc.}PAr*Pfrqu\@">E|r \t]'PO.r*Pʷžy:/ϋo&']T.N. \'P7*']T. \@">E|r \'PTTUw+rtC!1Q|r \|38麈O.rqu\@">T.N. \'PE|r \@[jlקT?<1<ޔU Ko&']T.N. \'Pϛ=:Vy'Pfrqu\@">E|r \|38麈O.rqu\@">T.N. \'PE|r \@[a`(*L.N. \t]'PO.rOL.N. \t]'PO.r*T.r\@*PV)c*T.rqu\@">T. \@*']T. \@">T.r\@*Pʷbv=eMdMbl;4IE|r*T.?s16Ttu\@">E|r \|38麈O.rqu\@">T.N. \'PE|r \@[1+ LL.N. \t]'PO.ro&']T.N. \'P \'PE|r \@g{Sgst]'PO.r w+J.RܣUQJqo}ڔ̶Քܔ^Ք7\cC RМT.\t]'P8麈O.r\@*L.N. \t]'PO.r*T.r\@*PV)sYPO.r*T.r\@*P8麈O.r\@*T.r*PT~TH(+E*>E|r \t]'PO.r*PIE|r*PO.r \'PT.rqu\@">T. \@*T.r \'PT.rowmv- p8%ޑy*5ST[^VJko [_U: {+|y 93qn%ZBi8wwD+uwC!D4 8 RWCNU季—OӔƔƔ/sb%+ 5nIu9.Jvz _B?*uT*IS{Iz611ҔĹ٭—O;&Fak,΁[Q[y+|y 9o!h%CsղV+ZUVU[UmUϭY02 `4+G0\qJ-^sbt(-jਁ[̺44f?IM^ź6kFC_Uޜ `P}S@%P_F.PA)A)A)A)E"]Hפ9='h]Y؛ u0#HYSUjw Tr}_~aaƘ˵p,ל[%z9#茖3Zh9E"rԥQX"Oţm9#Xb`%#Cp}}, fŃs\<:ttK(j՟~.O\Q u79 Jl7vS}Uys&yCoU+1t.SR{y/+\F `,\Q u}Q׹S2sGBVX™Xx w⧸o}0 +쯰?|B~bkV*ŪR*. em=ξ0o0?f6ninڻioSf4A4AA:zfv7髦jCV_Y8,?,5asp赡5QviF٥*o0otN `/?+QE)E)R6w5t][z9%O˖,KaK㡯*o0oh j~Ex+]EOq}y[2|o03Yc'c%_b%?emQgc_ _ LBaCk3%:X3N;}ח.PeP>l$X0n>Ůnh-u~v?>ֈtzY8%cAtE:fr0x x x x x ;1<1<cB'`o–7y|eVdrߤd~2G2|$G2|$}SԀy_bxZVקWexUWexUW%|+%;%cxUWexU"̷b< ;-fmѓEO=Yd%_bVnZN:꼩"6_:6͌1ϱ*̏f~4Y;~t̏/]T<(Ã2<(Ã2<(c 16qYmq2|.2|.Q uU4 ^ >X`j;`of,[Kޒ 1ޜޜޜ v0nOi?D7VSJT(n:a N5p$:@H =͢uʷRGG?[9ɻXצ&ݐnHnS sÕp[lLʹJ:yun+ttM:Ok 8& WnH%nWnrÕC&r Wnscs_k}OsU+"]Z9$]ct6˱XoRglG -͗㰛+7\ʷYX,Ńs\<:ŕpG}/ǭrÕC&r Wnp<W~T6tK2c&'Z\Q_:7<Oţ}lWnrÕfȎ Z? p&r\nrÕ|+fJ9%ca8anrÕ(ұWqzɢ'yt"p+7\ʏθ*Z*ŪRbd6}{?#p+7 WYi6r6-(ԠI+ߊ{܏I^fwӻ7M_5}XrqG}x:]C-kFuK+]QviTŕ/+7a71 WnrÕE:^.®jQnm5tC: WnH'?sĕ/+7a71 WnrÕEz+7\!Mrp+7\QYLO qGxrÕC&r Wnx4b|373|3qqM sÕpGaxޜޜrÕ(ZU@\QJq+?j(n Sq[pIhވ+BF#{4+><:{ĕGɣWq[N”G\ʥ(U/|%;{G\y<=p!6yM7ѓICl<=p+QW(9邚&5Hr$5HһFOgUlZ`\yC<&WpYP#{PbYXVէ9({K=_MK6Vw걗+?Bu{-~Q KZ2Rn׻fW0G۩Rs0G^2Vl=ʷ|#TM7L:afVojZr%հ5O[kYh2ݞ]n4qhpG0Q'8jh7LZo5sE omn1 'JQIׯQVgxV@*%YbCH+?Jz(t]qںjS+{+͜4gLu”$\BLBJݏs#\ eB#S y[G(4zO~DH(l[rJ)YQ+{+CRo^Rϗzt:puN~n+u]FOl հd%/햑]u”49u:aʷPnuVsS{Q+*:aʏP.|Ôhl)?Bi{5G ppՍ}4q F0QFsg4K\^֯K|AU"GȻڬM)M:{ԥ(W)R(WP7ŕ\V+[#IWۤۤۤkjs`5⑰<V&߉R~3f4O˸s)JU%3܃$}eϩe c|yD+J+>Qʯ"]x.IWj3Is_EMFQ`x+/}AQ_0F<ϙ׏Ҳ(*2xn.'yμ~y8(Wq 8+l)|_@NϓW`x@/(tX's QjobE`_<ųy}+KQʯJ~(JpNHG_}UbH+/y*jkW^:UodxTnѻդ +Pqfĕ\y_e(GRX6M6Xoz7A 4vhӍ̥/(wV⭈+/E)? ćY.kX98<q[_BHg3ԧ"*:v%js696t]C:٩Vy_Dri8Qʯ<چ#*&yFx+]E]{CkZ>#m x _ y*JImQۤRȫhVo9_P~#sŎ}c/(?JR~6<q(W9 8[`|NHG_}NyK`xFK_P~&։gdxu|_p8Bvz|o44F6i u]Önu%soy/K(ZՊVl܂Kv Zy1.H=]uttI <&j !Tnkժ|]8J˵H"$Yݨ&3lҴP 5ХvgA )*+$Gy7?(-LpyTnQjgqո\ T~IڱHIG۾mkOǎZjj\52F篖UZ~\Q6ߊx*%3<E:'sչ\ WBOCvjKvz~Wiۢmkqո TJWU1 /*jPԀXMɛ7%KsL3|`QBA_O-IQ?OIjc>9#茖ƄO mNۜZnI Ɯ}^ Gޭ` /oC5z#]dFɂo2|$9`M:,x x,`vXOJs!i9` 2' c’*Z~Ks?鿤d'IldM WQ{&Vz2Y]ՍjJƫ2*ël=WSUJIR^ l GEvГ՟2_b1No3>E:Zm,b4ج/Z\e}as ?秔iO9ti[6c~]eW4>()[8 ]6`#6vRoEo~ l [2XO)ǰSYRUz 'Û39Û3sʳg6f@~/O X6EE^C9h-v| 387=o,.| Qld,-f뗖͗lԫ[u>/H Q+ZՊ-jف[-2]a"]` 4[7ݺfyq[(eW ,_Z9/(~>| UUiMϳi˷0( -HO7F}jFm5pdp锳NЭX.͑W#YB5OUݨFiX7źߪj\539*UtIyl>ttmѶEێ{G)iX,oe$l'vX~$vUz#\ݔGd_<]`9 ۉ]vo>PRE:G%cWE35<l .;`ˏ"]QlUFaux#NIJ위.;`ˏ2TQed6:.$>Yˏ.<{4c٬5nUZ4Vܷ{ЧM =40/Z>|N|5X' 5aFoD`VTGte]*^W|W)+PM<.W2Ocr*vXN~ 7\ Wv$]REߒnSM0/,?Jve1۳SR GI W5(s-wr0ZG;x6gdIN(\k9Ulי^oxA: ۉ]vE:FIX~lH`QԔ O>M:x x x ?G`QlhXvNvbGͶbG]JJoJ*ىJ/Y oEOPl-ݢ'= p1*.;`ˏ"VW4ȰMcWNIJ|+4~# ,ߊ*VGe ؇16bcF`Q^6qXf߬9Hyb9?ņ%`oE:ִi[<(Ã2<(ÃXvNvb[1zS}Y_E:F͘7׬/s |aQt`x&[/xs7gxs7'위.;`ˏ"=nb[-i~,;X{[x?E)jp58aˏb_>AqU3ꧾ{Jޔ)ywwS&oszD,;`Xv"GqȰrr~^A$}WxWxWx/*(hS`9 ۉ]v8: d7O`˷2%%HcO`VXa9u]vE:}=.;`ˏ" :~(ɋ` xx΢ =9񁱏;;]vE:lܱqg<kwgS`˷bX~#P}A`NIJe$l'vX2#0e,;`ىXve'bXvrO{W{W{{!Pr,ߢxwV;!Pr,wV{?~HU3Csfs ˡ@X$N3B`9 *r$X*OSUW5C`'i{PB!| &*o@%qҤj`'P9C'ar(P9Brh7Pr,4m ˡ@XũyO *-F=vr$X*OloY:XҨ[jljˡ/,C`ʕTv TPr,NPr,r(P9C`9Zj{C!| eWg6Pr,B R(W"ν{SMGy-F #- TX.7+ɡ[&ʺY~Hp.un-..c[9*)/IG;&ڤmߓ`ѶC@,X(=,,Y P9 Y[i*,Ar@G|+σt3n^+W7WNߔǨz3%&CV}c9TmAۂ2Gٹxx*P9 YY*d98 ; Ar@*d9 ˷²+N'UbI$7,W_~If7ų}p_<,,Y P9 YG^+쪰bVr5JOP,Yr,Yr,,Yr,d9Tr@|+leAr@RЌe4c*dV M:6NylG9mso"7@, *A{C$ P9 YGVI,6N>/^/n*dQʛGgad9Tr,,Yr,?ZbWM Trpv@@,Yr,Yr,,Yr,d9Tr@|+zIX(OFX(Հ-*dQ"6+fF@,j[nƷi+"ˏ"mkִegFdQS<(Ã2<(*d98 ; Ar@@,gad9Tr@@,d9nf}-_|`X#;Vae`藡_z29Û39ÛSr@*d9T&PYRdW?Rj|W))P9 ˏ"GQJQ"]nS2{&&mM]5tCC y{|1·Y~`J{Ur@-yѧ>SuR+uR+uR+u|Q*dQrxr P9 YY P9 Ygް@,gad9Tr,,Yr,Yr,Yr@@,d9 ˏ"4؇Ɯ5ՠ.AyA:lk"Ar@*d9 Ar@E#g1rƈ7y-gqVgyp+  P9 Y,Yr@*d9 Yr{55$שHY{R};RTr,+;do,NNE*rٜrTr,|79)::"˩HYNHu>UuUJTr, 5|)uu*R9EBM>/{S)rTr,NNE*r*R9ESd'4(-+שHYοBrTr,::"˩S)TNY-"˩o,NNE*rTr,"Sd9ESXN|TNשHYNE*r,NNE*r*R9ESd9")"V+ J˩S)2rTr, rFhG7TNשHYNE*'d9!˷҈K|D*'dVEލB5p.u"|D*'d9TNrB$]R^RXt,k}OENrB|e99:TNrru$R9! YNN"D*'d9!IrB[5|=^_[1f$R9!IrBH,'dVaüeH,'_YNN"|D*'d9TNrBoUj55ю&EH,' YNr$R9!IrBH,'d99:TNr,' YNrBWbgZ1$R9!˷bgKd9rru$R9!IrB|+F M:θ9%[ YNN"D*'d9!WH,'_' YN"$R9!IrBD*'d9! Y~bF fm`A7tލN"|D*'d9TNrBH,' YNr,'dV_k]%vlE%̨'DH,' YNr,'d99:TNr,' YNrBH,'d9! Y3tuɲ1Nc$R9!IrBH,'dV$R9!,'_' YNN"D*'d9!˷ tu$R9! YNN"D*'d9!IrBww](|a#WH,'_' YN"+IrBH,' YNy'"D*'d9!IrB[%;y{8WդI:ʯ}+-U YNrB6۔ܤcOUd9! YN",'d \XZO+IrBH,' YNr$R9!IrBH,'d99:TNr,' YNrBoE7P%g:E*'d9!IrBH,'d9TNrB|D*'d9TNrBH,'d9!IrB,?JuF#cÃWrBH,'dV֜1rv4Mw, n8c䌑3FpV7E*'d9! YN7`ypϪH,'d9!IrB,' YNrB{w{^'Pt-DN;߬Paw"nqp֒;dwvKabKOC՟5_ðB(/W]e=7JvTEyEycm5tmѶE|W5-`: VeZfokFSьQ6ZcM6(0/zc:f ։{Щ mafAt6(ްtF:'oYs5ʫՑJJ.9vh xaطm)|+ڻ 0GNxm[jR^@o*WUJ֦MM~i~i3a؏*k{^I7\j؆Oc:crroG;i ƜpچOcNۜmԊþՐuv/{ `BOqU/c/: Qi8&WQl%3V16O ?T^ӎfьVӶmMۚhƃ-Ã2<(Ã2<(}+<b`RۖN_ 迕KxWxWx: Q78eir 1?jTSr 8cz: VXaܹ\MbVLﲯ񤅘E6%7yqkbC wc<>҅xEroȻȋ:Ŝ5b(8jPdlܱqg<\ԏ1rƈG1by#p;#ܛ3:o?E^FAg Q0nq}Wu7`:λB |+fY08,`ywwo߉: { ,bxMd'wVð-/4!&%MlS1M,˷P[蒕D]g>mw5ooq~F'>uXi{o˷8K4TS 껪LIdys,?P@˳,oB7dyCoڔB{ٴΟJ)QSN]s͋tMz,JKŠS*/гuFHGۂm! Y~Wi/SaoԴ(r`ŁXq$}r}D7dVX6e!˷bϮ0 Y7U%x/틇ð7dQ(xAa|+fwY}UbV_}n+3=S*=YVdѓŌ*fTѻV"9 {CE:یfeXXdyC7!!|+lrWe,| G hƭSicӪfv7}_M 5YC ։'FdVA^0+_Y:4ev]kХK`H5rWyφO#|SההC#-Bq-ڶc9Oð7dVP\ &WeW$9 {CEl귩}$!˷Ҝ6|a(^ފtԨQe_ŬI7\u޴ދ,oB7dVZ- Et<ځO#(6mNۜQ1ça(G5E0C7 Y!ˏRQ 8,oB7dyCoeG~EXl$(5WV;1|!ˏR;ؐ0<KZX ^0 Y~TY%}$!˷DEo6Wd6m ʊ,fT1ū2*ëY!˷bm,o,oB7dyC7dy!!˷N?dx<3+6bc+6t6؆1_lW͌ڬ>vސ} t-/CdVMۚ5m[R,ߊexPð7dQ\-j*/Wdys,ߊ5f}iݦ̏6uYwt,?J%9߰F k LrUM!(t39c#؀7?aBis !˛ Yސ[}}99j|WXG(iQmE7%oJm54unJj5c C"!˷b}JgY+HG.J%W?R+uR+uN!˷A,,,oq1C"˛ YސM,o?vo *ar5,?ѓgmJ& 4݆t؟ uf</E7dy!!ˏ"kc: {Co\ŞEEl! Yސ Y1;ߤc1r#D7dyC7!!({^W8{:" Yސ Yސ Yބ,o,o,w__EaحHYsXNZUuv+RE wtg h݊Tn;J3enzfQ+RE[a"[d"-y~BM>ð[-P`0Vr,|^Za"[d'tTS L50ծ=܊TnY yF=,MCPOgOEo4444KC[-"?U̦Tճ-"˷8ieYn݊TnVr,O.][2vmVr,r0Vr,"[dE[-"-[#1idoUP?pPg?3mE*OF3QowtQOr,nE*r+R! YkX'D*7dYM۟"奾^&R!aMrCH,7dV=S++ʣkE5h$X_ۆZ͗N:isvܐ0&R!MrCD*7dTnrCH,7d!˷ڔԊk^݈,7a7 Yn"ܐ0&R!MrCD*7d! YdH"aMrCH,7d9 Tnrܐ,7 YnrCðH,7 Ynrܐ,7dTnrCܐ[a)?Ezm^m슍c'؊M]6Vދrsvܐ&R! Y3D*7dQJ2ܐ0&R!MrC|+An"D*7d!aMrCH,7dTnrC7YV^<23 ˆn0CoL~WU+vDU9Û36 (&R! Y7e/Tnrܐ,7 YnrCrEo\ W$:;cTnrܐ,7 YnrCE]tMK~o+ܐ[}` " }W9^:^:^\m ܐ&R! Y6iyTnrCH,7d!*։7P%gEH,7dQSrCD*7d! Y~uZTnrCH,7d!MrCܐ,?{0 sV gs}8J9h;k(fyΛܻG.)P[rJtS;_{?g{~<g4Y#u[4gBi...YI(j}jyiα[vPOҨWV?&[nzbҨڕ6Y}]yD">U=/T?1J,MCPOgw'|I(M(:lBugx<,V2luVe-E'LiԊVlbWzuWO%J#?3ұ-8dV}Z4=#j2G x,@dVou!fQ۟Ҫyץi583,?t,ߺm_oi)юIפkѶE׶VS'ZnZ1ˏ"qոjՑri]珙GqUSW<|\y Y&/t=|+AO'fQjSOtUMV}\y ˷bVЎ`c"ݠmU,v*fQ\nH"Cq,dVA)ʣ7b1<1<1<)qɉ$-OڛFҶ2%(2DGQr[KybMI#Y6WGU6֒>MlS\W<|\y Y~9?*,W<|\y Yb+dy Yvdb)_6-b#؉1blSltNoffF)c=݌o3M;Z^b͓i[Ӷmx4YY  s뻪QeGdQܗgY4 |+/MdynxdG7g93L~W"vDoEoޜ6k6>8Rnb]mE:/=q,dVu_0K痓.\H%$U\-V_:J.JޔɻɻFss(yP C_'<, :lQ(`?NھE j 'ii|,7KnN,DJVҀ0EY>uaacSd!sI+~ug[q:})];])MO]+>n;F^%:僐dE/X*˛wїٺp?1v |LY>vځ# RD;TYT?DܓXWQ0GE22`!W&TYTW1tz`& 5TY޼+o*˛򦲼ygy?WT7MeyΌ3+s'R?'>pS᪊p@S;EBmUYR/\BUkPS-V*0WEO\GGdrxu; g=2𑁏 |dN*DK4@ =/4ɽuyUiQG"*|qj HZHʡ66bɊ%+ժ,`/2~,{Ȝ}:6b*͒>)|Ue (,MeU=Bf'NS~NZ)}R~[VlXYPTK?OЕa?υ&Hb"oϭ$ueRGH[.Ag<!7;l.iofvhjEst,HI]Y.D0R-ή,x͙}26N*ADXhwvc"@)ύI;-&҅t]iC5 ;1ömc\I,prGqv狐S+mc_)1rz@]iX'#>xs~t"]H,8ۍ8mcN+ǡ]Y.D;1]Y.DVkЈ,業o烔u4'҉mtNz;N<9וb;$&Q7l$={"QD B tJ,r!iXpb[Ή HvdH1~g4HyEH s7q$EHNK\cX{]Y sdܢ4 ]Y>i ƽ!WʕMAg,P"MK8M\H ۸sveteoXi:S\YBHW]Y.DI~JoˢVkaAqxnAܚ}"ESGS2}#H؇v,n/ tf+HvivW¶`9]Y>(V.A}B ю(D  [w 12Aj*؁>r!mU`<qx^XqqABzF;˅tnN=7lY.DD:zJ ¥,.,z@DvLaU]Y.$o{rbd=Њ=VՕBǚ~n2;rؒOoj8_~Rt&A;b,}wHYQ )EEHd~;R,IteRlKlKfԕX0(A9 +5j.aZNI;*%_Y|^ueC4&a_N27>076{f?RYsrPs؜6BHHK9~gЕ*9xb\h]9~~gҁt 0 3BH'MtXywaID蜌hyVhMwe{sӪ kޅ;˅h7?XiJV sرisNW уH[q+~+˅Ɉ35rxr! %&)1ue=DǓN¶.T</ w !,@z۟KyW D.#JV DzC>0_!L/C Q d#]h5MS_ZվG` 5Mtj NӉեH$M)6]Z6_j=R.yu@mKV,YdŒK^] PB&OJ$R -M\gMeSiTZ~7 ٞ)ri*HR~mb-mT[5{HT["EbBr!!-bo^my{79ՖBHѴQ[6j{.bx麈vI;l3l3lk۾ Zmi? v!\ڲQ[>l թڲQ[6}}UZT&H.gE+؅>IIt!]Hו&GjŽ| l6ƕ&HZqrGqvqz)d&@h/6 b3FmBq.[BHh78_o p$)7W";N7u2W = "=aU-$oT[6}#*U9JeW ݾ<=pguS8'b\q툈i9bEsiq'_xjh)%%#Y0(A9 aPHN N:8׋/dIG29,Mejz7{'KƳ=ސ MBBu6簹!Ŷ}m#IK9/~:{+؅jlԖ"nWy)`A+~@:>h:+؅N<y1B46#on޲¦NtڲQ[>=<\ v!x\JVҀ4`+ Xi i7W 9z DW !^ڲQ[>~D' s+؅N4 :š+؅.[9;D'y v+e;,<` [ 1 ʂ$")Ljv`Ֆ?D1QLc9ڲQ[6jb|g#3GyI 6OU[ztjbq 2]Cel v!2?Gp#Yݮ-h*̹ linbox-1.6.3/benchmarks/omp-benchmark.C000066400000000000000000000243741347646240000200000ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/omp-benchmark.C * @ingroup benchmarks * @brief f */ #include "linbox/linbox-config.h" #include #include #include #include #include "benchmarks/CSValue.h" #include "benchmarks/BenchmarkFile.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/vector/blas-vector.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/util/timer.h" #include "linbox/ring/modular.h" #include "linbox/matrix/sparsematrix/sparse-tpl-matrix-omp.h" #include "linbox/blackbox/transpose.h" #include "linbox/vector/vector-domain.h" #include "examples/map-sparse.h" #include "linbox/algorithms/blackbox-block-container.h" #include "linbox/algorithms/block-massey-domain.h" using namespace LinBox; typedef Givaro::Modular Field; typedef TriplesBBOMP OMPBB; typedef TriplesBB SeqBB; typedef SparseMatrix VPVBB; int randRange(int start, int end) { double rval = rand(); static const double NORMALIZING_CONSTANT = 1.0/(1.0+RAND_MAX); double normedRVal = rval*NORMALIZING_CONSTANT; double rangeSize = end-start; int offset = rangeSize*normedRVal; return start+offset; } template void runBlockWiedemann(BenchmarkFile& of, typename Blackbox::Field F, MapSparse matA, MapSparse matU, MapSparse matV, int iters) { typedef typename Blackbox::Field Field; typedef BlackboxBlockContainer BlockContainer; typedef BlasMatrix Block; int m=matA.rowdim(); int n=matA.coldim(); int p=matU.rowdim(); int q=matV.coldim(); Blackbox A(F,m,n); Block U(F,p,m), V(F,n,q); matU.copy(U); matV.copy(V); matA.copy(A); A.finalize(); BlockContainer Sequence(&A,F,U,V); BlockMasseyDomain MBD(&Sequence); std::vector minpoly; std::vector degree; double start = omp_get_wtime(); for (int i=0;i void runMMP(BenchmarkFile& of, typename Blackbox::Field F, MapSparse leftMat, MapSparse rightMat, int iters) { typedef typename MatrixDomain::OwnMatrix OwnMatrix; int m=leftMat.rowdim(); int n=leftMat.coldim(); int p=rightMat.coldim(); Blackbox A(F,m,n); OwnMatrix x(F,n,p), y(F,n,p); linbox_check(n==p); leftMat.copy(A); rightMat.copy(x); A.finalize(); double start = omp_get_wtime(); for (int i=0;i void runMVP(BenchmarkFile& of, typename Blackbox::Field F, MapSparse mat, MapSparse vec, int iters) { typedef typename Blackbox::Field Field; typedef typename Field::Element Element; typedef typename std::vector Vector; int m=mat.rowdim(); int n=mat.coldim(); Blackbox A(F,m,n); Vector x(n), y(n); mat.copy(A); vec.toVector(x); A.finalize(); double start = omp_get_wtime(); for (int i=0;i A(F,n,n); MapSparse U(F,n,m); MapSparse V(F,m,n); MapSparse::generateRandMat(A,nnz,q); MapSparse::generateDenseRandMat(U,q); MapSparse::generateDenseRandMat(V,q); benchmarkFile.addDataField("algorithm",CSString("Block-Wiedemann Parallel")); runBlockWiedemann(benchmarkFile,F,A,U,V,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("Block-Wiedemann Seq")); runBlockWiedemann(benchmarkFile,F,A,U,V,iters); benchmarkFile.pushBackTest(); } void MMPBenchmark(BenchmarkFile& benchmarkFile, int n, int m, int nnz, int iters, int q) { benchmarkFile.addMetadata("problem",CSString("Matrix-Matrix Product")); Field F(q); MapSparse A(F,n,n); MapSparse X(F,n,m); MapSparse::generateRandMat(A,nnz,q); MapSparse::generateDenseRandMat(X,q); benchmarkFile.addDataField("algorithm",CSString("TriplesBBOMP-applyLeft")); runMMP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("TriplesBB-seq-applyLeft")); runMMP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); } void MVPBenchmark(BenchmarkFile& benchmarkFile, int n, int nnz, int iters, int q) { benchmarkFile.addMetadata("problem",CSString("Matrix-Vector Product")); Field F(q); MapSparse A(F,n,n); MapSparse X(F,n,1); MapSparse::generateRandMat(A,nnz,q); MapSparse::generateDenseRandMat(X,q); benchmarkFile.addDataField("algorithm",CSString("TriplesBBOMP-apply")); runMVP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("TriplesBBOMP-applyLeft")); runMVP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("TriplesBB-seq-applyLeft")); runMVP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("TriplesBB-seq-apply")); runMVP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); benchmarkFile.addDataField("algorithm",CSString("SparseMatrix::VPV")); runMVP(benchmarkFile,F,A,X,iters); benchmarkFile.pushBackTest(); } int main(int argc, char **argv) { int numThreads=1,n=50000,m=100,nnz=50000,q=65521,iters=1; bool runMMPBenchmarks=false,runMVPBenchmarks=false,runWiedemann=false; static Argument args[] = { { 't', "-t THREADS", "Number of threads", TYPE_INT, &numThreads }, { 'n', "-n N", "Dimension of N*N matrix A", TYPE_INT, &n }, { 'm', "-m M", "Dimension of N*M matrix X", TYPE_INT, &m }, { 'z', "-z NNZ", "Number of non-zero entries", TYPE_INT, &nnz}, { 'q', "-q PRIME", "Use field GF(Q) for prime Q", TYPE_INT, &q}, { 'i', "-i ITERS", "Number of iterations", TYPE_INT, &iters}, { 'a', NULL, "Run Matrix-Matrix Benchmarks", TYPE_BOOL,&runMMPBenchmarks}, { 'b', NULL, "Run Matrix-Vector Benchmarks", TYPE_BOOL,&runMVPBenchmarks}, { 'c', NULL, "Run Block-Wiedemann Benchmarks", TYPE_BOOL,&runWiedemann}, END_OF_ARGUMENTS}; parseArguments (argc, argv, args); BenchmarkFile benchmarkFile; benchmarkFile.addMetadata("Field-Implementation",CSString("Givaro::Modular")); benchmarkFile.addMetadata("num_threads",CSInt(numThreads)); benchmarkFile.addMetadata("N*N Blackbox Dimensions",CSInt(n)); benchmarkFile.addMetadata("Fat Vector Dimension",CSInt(m)); benchmarkFile.addMetadata("nnz",CSInt(nnz)); benchmarkFile.addMetadata("iterations",CSInt(iters)); benchmarkFile.addMetadata("date",BenchmarkFile::getDateStamp()); benchmarkFile.addMetadata("GF(q)",CSInt(q)); benchmarkFile.setType("date",BenchmarkFile::getDateFormat()); benchmarkFile.setType("time","seconds"); omp_set_num_threads(numThreads); if (runMMPBenchmarks) { MMPBenchmark(benchmarkFile,n,m,nnz,iters,q); benchmarkFile.write(std::cout); } if (runMVPBenchmarks) { MVPBenchmark(benchmarkFile,n,nnz,iters,q); benchmarkFile.write(std::cout); } if (runWiedemann) { blockWiedemannBenchmark(benchmarkFile,n,m,nnz,iters,q); benchmarkFile.write(std::cout); } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/optimizer.h000066400000000000000000000034731347646240000173410ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by Brice Boyer (briceboyer) * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file benchmarks/optimizer.h * @ingroup benchmarks * */ #ifndef __LINBOX_benchmarks_optimizer_H_ #define __LINBOX_benchmarks_optimizer_H_ namespace LinBox { /* optimiser from a graph. */ /* * ----- * if (a < threshold) then * toto() * else * titi() * ---- * * OR (always better) * * ---- * toto(); * ---- */ // Optimizer opt(Data,Skeleton); // opt.run(); // opt.report("file"); /* optimiser from two timers */ // Optimizer opt(class1,class2,Skeleton); // opt.run(); // opt.report("file") // // opt.fit() // // class Optimizer { void report(const std::string & filename) ; void run() ; void fit(); } } #endif // __LINBOX_benchmarks_optimizer_H_ // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/benchmarks/perfpublisher.sh000077500000000000000000000112401347646240000203460ustar00rootroot00000000000000#!/bin/bash # Script to format benchmarks results into a single xml file. # See https://wiki.jenkins-ci.org/display/JENKINS/PerfPublisher+Plugin # ----- # 2014/11/17 - Written by AB XMLFILE=$1 benchmarks=$2 COMPILER=$3 # choose gdate on OS X if command -v "gdate" >/dev/null; then DATE=gdate else DATE=date fi #=================# # Plateform infos # #=================# COMPILERVERSION=$($COMPILER --version 2>&1 | head -1) if command -v "lscpu" >/dev/null; then CPUFREQ=$(lscpu | grep "MHz" | rev | cut -f1 -d' ' | rev) else CPUFREQ=$((`sysctl -n hw.cpufrequency`/1000000)) fi ARCH=$(uname -m) OSNAME=$(uname -s) OSVERSION=$(uname -r) if hash lsb_release 2>/dev/null then DISTRIB=$(lsb_release -ds) else DISTRIB='Unknown distribution' fi #==========# # Prologue # #==========# if [[ -f $XMLFILE ]] then echo '----> WARNING: File '$XMLFILE' is not empty.' echo '----> Results will be added to its end.' fi #========# # Header # #========# echo '' >> $XMLFILE echo '' >> $XMLFILE #=======# # Start # #=======# echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE #============# # Benchmarks # #============# for benchmark in $benchmarks do if [[ ! -f $benchmark ]] then #File does not exist: compile it echo '[Compiling]' $benchmark COMPILESTART=$($DATE +%s%3N) COMPILELOG=$(make $benchmark 2>&1; echo 'Returned state: '$?) COMPILEEND=$($DATE +%s%3N) COMPILETIME=$(($COMPILEEND - $COMPILESTART)) COMPILECHECK=$(echo $COMPILELOG | grep -o '[^ ]*$') COMPILETIMERELEVANT='true' else #File does exist echo '[Already compiled]' $benchmark COMPILELOG='(Previously compiled)' COMPILETIME='0.0' COMPILECHECK='0' COMPILETIMERELEVANT='false' fi if [[ $COMPILECHECK -ne 0 ]] then #Compilation failure # EXECUTED='no' - keep it to yes so that Jenkins # uses it within its results EXECUTED='yes' PASSED='no' STATE='0' EXECUTIONLOG='(Not executed)' EXECUTIONTIME='0.0' PERFORMANCEFLOPS='0.0' COMPILETIMERELEVANT='false' EXECUTIONTIMERELEVANT='false' PERFORMANCEFLOPSRELEVANT='false' ERRORLOG='Does not compile.' echo '-> Does not compile.' else #Compilation success echo '[Executing]' $benchmark EXECUTED='yes' EXECUTIONLOG=$(./$benchmark 2>&1) if [[ ${EXECUTIONLOG,,} != "time:"* ]] then #Execution failure PASSED='no' STATE='0' EXECUTIONTIME='0.0' PERFORMANCEFLOPS='0.0' EXECUTIONTIMERELEVANT='false' PERFORMANCEFLOPSRELEVANT='false' ERRORLOG='Unexpected output.' echo '-> Unexpected output.' else #Execution success PASSED='yes' STATE='100' EXECUTIONTIME=$(echo $EXECUTIONLOG | cut -d' ' -f2) PERFORMANCEFLOPS=$(echo $EXECUTIONLOG | cut -d' ' -f4) EXECUTIONTIMERELEVANT='true' if [[ ${PERFORMANCEFLOPS,,} != "irrelevant" ]] then PERFORMANCEFLOPSRELEVANT='true' else PERFORMANCEFLOPSRELEVANT='false' PERFORMANCEFLOPS='0.0' fi ERRORLOG='' fi fi echo '' >> $XMLFILE echo 'BENCHMARK' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE # Logs echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE # Times echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE echo '' >> $XMLFILE done #========# # Footer # #========# echo '' >> $XMLFILE #==========# # Epilogue # #==========# echo 'Results correctly exported to' $XMLFILE linbox-1.6.3/configure.ac000066400000000000000000000244431347646240000153170ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # This file is part of LinBox (and probably stolen here and there) # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ AC_PREREQ([2.68]) AC_INIT([LinBox], [1.6.3],[linbox-use@googlegroups.com],[linbox], [http://www.linalg.org/]) AC_CONFIG_MACRO_DIR([macros]) AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([1.10 -Wall -Wno-portability foreign]) AC_CONFIG_HEADERS([config.h]) AX_PREFIX_CONFIG_H(linbox/config.h, __LINBOX) # symlinks to matrix files for the testsuite AC_CONFIG_LINKS([tests/data/sms.matrix:tests/data/sms.matrix]) AC_CONFIG_LINKS([tests/data/30_30_27.sms:tests/data/30_30_27.sms]) AC_CONFIG_LINKS([tests/data/fib25.sms:tests/data/fib25.sms]) AM_PROG_AR AM_ACLOCAL_INCLUDE(macros) AC_LANG([C++]) echo "-----------------------------------------------" AC_DEBUG AC_PROFILE AC_WARNINGS echo "-----------------------------------------------" # CFLAGS=${CFLAGS:-$DEFAULT_CFLAGS} # CXXFLAGS=${CXXFLAGS:-$DEFAULT_CXXFLAGS} ###################################################### # Try and pass different flags according to compiler # ###################################################### # disable default -g -O2 CXXFLAGS : ${CXXFLAGS=""} #set CXX AC_PROG_CXX AC_COMPILER_NAME STDFLAG=${CXXFLAGS} CXXFLAGS="" # We need a C++11 compiler now - AB 2014-12-12 # clang-3.8 does not support __float128 without explicitly passing it -std=c++11 if test "x${CCNAM}" = "xclang38" ; then AX_CXX_COMPILE_STDCXX_11([noext],[mandatory]) else AX_CXX_COMPILE_STDCXX_11([ext],[mandatory]) fi AC_SUBST([DEFAULT_CFLAGS]) AC_SUBST([DEBUG_CFLAGS]) AC_SUBST([TESTS_CFLAGS]) TESTS_CFLAGS="-O2" DEBUG_CFLAGS="-g" DEFAULT_CFLAGS="" WARN_CFLAGS="-Wall" #TODO use -fast for icc, -ipa for eko... if test "x$DBG" = "xyes" ; then DEFAULT_CFLAGS="-O0 ${DEFAULT_CFLAGS} " #those are CXXFLAGS DEBUG_CFLAGS="${DEBUG_CFLAGS} -DDEBUG -D_LB_DEBUG" else DEFAULT_CFLAGS="-O2 ${DEFAULT_CFLAGS} " DEBUG_CFLAGS="${DEBUG_CFLAGS} -DNDEBUG -U_LB_DEBUG" fi if test "x$PROF" = "xyes" ; then DEFAULT_CFLAGS="${DEFAULT_CFLAGS} -pg" fi if test "x$WARN" = "xyes" -o "x$WARN" = "xfull" ; then case x${CCNAM} in xicc) WARN_CFLAGS="${WARN_CFLAGS} -Wcheck" WARN_CFLAGS="${WARN_CFLAGS} -Wall -Wno-unused-parameter -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wwrite-strings -Wno-long-long" WARN_CFLAGS="${WARN_CFLAGS} -Wextra -ansi" ;; xeko) WARN_CFLAGS="${WARN_CFLAGS} -Wno-unused-parameter" ;; xgcc|xgcc44) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" fi if test "x${HAVE_CXX11}" = "x0" ; then WARN_CFLAGS="${WARN_CFLAGS} -ansi" fi ;; xgcc48) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-variadic-macros -Wno-vla" # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" fi if test "x${HAVE_CXX11}" = "x0" ; then WARN_CFLAGS="${WARN_CFLAGS} -ansi" fi ;; xclang) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -Wno-vla-extension -Wno-variadic-macros" WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" fi ;; xclang31) WARN_CFLAGS="${WARN_CFLAGS} -Wextra -Wno-unused-parameter" if test "x${WARN}" = "xfull" ; then WARN_CFLAGS="${WARN_CFLAGS} -Wuninitialized -Wconversion -Wcast-qual -pedantic -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wno-long-long -g -Wno-vla-extension -Wno-variadic-macros" WARN_CFLAGS="${WARN_CFLAGS} -D__STRICT_ANSI__" # WARN_CFLAGS="${WARN_CFLAGS} -fsanitize=address" fi ;; *) echo echo "*******************************************************" echo "unsupported compiler ($CCNAM). Please file a bug." echo "*******************************************************" echo WARN_CFLAGS="${WARN_CFLAGS}" esac fi DEFAULT_CFLAGS="${DEFAULT_CFLAGS} ${WARN_CFLAGS} ${DEBUG_CFLAGS}" TESTS_CFLAGS="${TESTS_CFLAGS} ${WARN_CFLAGS} ${DEBUG_CFLAGS}" AC_HEADER_STDC AC_PROG_LIBTOOL AC_PROG_SED # newer libtool... LT_PREREQ([2.4.2]) LT_INIT([win32-dll]) # needed for building interfaces as shared libs on Windows AC_CANONICAL_HOST case "${host_os}" in cygwin*|mingw*) LINBOX_LDFLAGS=-no-undefined ;; *) LINBOX_LDFLAGS="" ;; esac AC_SUBST([LINBOX_LDFLAGS]) echo "-----------------------------------------------" echo " START LINBOX CONFIG " echo "-----------------------------------------------" # Checks which SIMD optimization flags to use and set SIMD_CFLAGS accordingly INSTR_SET AC_SUBST(SIMD_FLAGS) dnl gcc-4.9.2 bug See https://trac.sagemath.org/ticket/17635#comment:178 AS_IF([ test "x$CCNAM" = "xgcc492" ],[CXXFLAGS="${CXXFLAGS} -fpermissive"],[]) echo "-----------------------------------------------" LB_OMP echo "-----------------------------------------------" AC_SUBST([PARFLAGS],['${OMPFLAGS}']) AC_SUBST([PARLIBS],['${OMPFLAGS}']) # Machine characteristics AC_CHECK_SIZEOF(char, 8) AC_CHECK_SIZEOF(short, 16) AC_CHECK_SIZEOF(int, 32) AC_CHECK_SIZEOF(long, 32) AC_CHECK_SIZEOF(long long, 64) AC_CHECK_SIZEOF(__int64, 64) # Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([float.h limits.h stddef.h stdlib.h string.h sys/time.h stdint.h pthread.h]) # check endianness of the architecture AC_C_BIGENDIAN( [AC_DEFINE(HAVE_BIG_ENDIAN, 1, [Define that architecture uses big endian storage])], [AC_DEFINE(HAVE_LITTLE_ENDIAN, 1, [Define that architecture uses little endian storage])], []) echo "-----------------------------------------------" # Feature checks LB_MISC LB_DRIVER echo "-----------------------------------------------" # Now getting GMP and Givaro from FFLAS-FFPACK - AB 2014-12-10 PKG_CHECK_MODULES([FFLAS_FFPACK], [fflas-ffpack >= 2.4.0]) PKG_CHECK_MODULES([GIVARO], [givaro >= 4.1.0]) dnl LB_CHECK_FFLAS_FFPACK(,,[ dnl echo '' dnl echo '*******************************************************************************' dnl echo ' ERROR: Fflas-Ffpack not found!' dnl echo dnl echo ' Fflas-Ffpack routines are required for this library to compile. Please' dnl echo ' make sure they are installed and specify its location with the option' dnl echo ' --with-fflas-ffpack= when running configure.' dnl echo ' Also make sure your compiler supports cxx-11...' dnl echo '*******************************************************************************' dnl exit 1 dnl ]) LB_CHECK_LAPACK # AC_MSG_RESULT($BLAS_LIBS) # AC_MSG_RESULT($BLAS_CFLAGS) LB_CHECK_IML LB_CHECK_M4RI LB_CHECK_M4RIE LB_CHECK_MPFR # we nedd mpfr next : LB_CHECK_FPLLL LB_CHECK_FLINT LB_CHECK_NTL LB_CHECK_SACLIB LB_CHECK_MAPLE LB_CHECK_EXPAT LB_BENCH LB_CHECK_XML # LB_OPT LB_DOC LB_CHECK_OCL LB_CHECK_MPI if test ! -d ./benchmarks/data ; then echo "Creating data dir in benchmark" ; mkdir ./benchmarks/data ; fi DEPS_CFLAGS="${FFLAS_FFPACK_CFLAGS} ${NTL_CFLAGS} ${MPFR_CFLAGS} ${FPLLL_CFLAGS} ${IML_CFLAGS} ${FLINT_CFLAGS}" DEPS_LIBS=" ${NTL_LIBS} ${MPFR_LIBS} ${FPLLL_LIBS} ${IML_LIBS} ${FLINT_LIBS} ${OCL_LIBS} ${FFLAS_FFPACK_LIBS} ${XML_LIBS}" CXXFLAGS="${CXXFLAGS} ${STDFLAG}" CXXFLAGS="${CXXFLAGS} ${SIMD_CFLAGS}" AC_SUBST(CXXFLAGS) AC_SUBST(DEPS_CFLAGS) AC_SUBST(DEPS_LIBS) echo "-----------------------------------------------" dnl MYLIBS="${FFLAS_FFPACK_LIBS} ${NTL_LIBS} ${MPFR_LIBS} ${FPLLL_LIBS} ${IML_LIBS} ${FLINT_LIBS} ${LDFLAGS} ${OCL_LIBS}" dnl MYLIBS="${LIBS}" dnl MYFLAGS="${FFLAS_FFPACK_CFLAGS} ${NTL_CFLAGS} ${MPFR_CFLAGS} ${FPLLL_CFLAGS} ${IML_CFLAGS} ${FLINT_CFLAGS} ${OPT_FLAGS}" echo "CXXFLAGS = ${CXXFLAGS}" echo "LIBS = ${LIBS}" echo "DEPS_CFLAGS = ${DEPS_CFLAGS}" echo "DEPS_LIBS = ${DEPS_LIBS}" echo "DEFAULT CFLAGS = ${DEFAULT_CFLAGS}" echo "TESTS CFLAGS = ${TESTS_CFLAGS}" echo "-----------------------------------------------" echo " END LINBOX CONFIG " echo "-----------------------------------------------" AC_CONFIG_FILES([ Makefile linbox-config examples/Makefile examples/data/Makefile doc/Makefile linbox/Makefile linbox/algorithms/Makefile linbox/algorithms/gauss/Makefile linbox/algorithms/matrix-blas3/Makefile linbox/algorithms/opencl-kernels/Makefile linbox/algorithms/polynomial-matrix/Makefile linbox/blackbox/Makefile linbox/element/Makefile linbox/field/Makefile linbox/matrix/Makefile linbox/matrix/sparsematrix/Makefile linbox/matrix/densematrix/Makefile linbox/matrix/matrixdomain/Makefile linbox/matrix/sliced3/Makefile linbox/randiter/Makefile linbox/ring/Makefile linbox/ring/ntl/Makefile linbox/ring/modular/Makefile linbox/solutions/Makefile linbox/solutions/solve/Makefile linbox/solutions/echelon/Makefile linbox/util/Makefile linbox/util/formats/Makefile linbox/vector/Makefile linbox/polynomial/Makefile tests/Makefile tests/data/Makefile tests/matrix/Makefile interfaces/Makefile interfaces/driver/Makefile interfaces/maple/Makefile interfaces/kaapi/Makefile macros/Makefile macros/CodeChunk/Makefile benchmarks/Makefile benchmarks/data/Makefile benchmarks/matrix/Makefile linbox.pc ]) # linbox/algorithms/IML/Makefile # examples/Readme-make # examples/field # examples/solver # examples/blackbox # examples/data AC_OUTPUT echo "-----------------------------------------------" linbox-1.6.3/doc/000077500000000000000000000000001347646240000135675ustar00rootroot00000000000000linbox-1.6.3/doc/Doxyfile.mod000066400000000000000000002276011347646240000160630ustar00rootroot00000000000000# Doxyfile 1.8.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = linbox # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = . # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = "bib=\xrefitem bib \"Bibliography\" \"Bibliography\"" # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = doxy.debug #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = SRCDIR/linbox \ SRCDIR/doc \ SRCDIR/examples \ SRCDIR/tests \ SRCDIR/benchmarks # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.cc \ *.cpp \ *.C \ *.h \ *.inl \ *.doxy # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = *_src.inl \ Attic # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *_src.inl \ */Attic/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = .. # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = *.C \ *.inl \ *INSTALL \ *COPYING \ *HACKING \ *AUTHORS \ *.html # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = linbox-html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://www.mathjax.org/mathjax # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = stmaryrd \ amsmath # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # managable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES linbox-1.6.3/doc/DoxyfileDev.mod000066400000000000000000002276231347646240000165260ustar00rootroot00000000000000# Doxyfile 1.8.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. # # All text after a hash (#) is considered a comment and will be ignored. # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" "). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or sequence of words) that should # identify the project. Note that if you do not use Doxywizard you need # to put quotes around the project name if it contains spaces. PROJECT_NAME = linbox # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer # a quick idea about the purpose of the project. Keep the description short. PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is # included in the documentation. The maximum height of the logo should not # exceed 55 pixels and the maximum width should not exceed 200 pixels. # Doxygen will copy the logo to the output directory. PROJECT_LOGO = # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = . # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful if your file system # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = YES # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = "bib=\xrefitem bib \"Bibliography\" \"Bibliography\"" # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding # "class=itcl::class" will allow you to use the command class in the # itcl::class meaning. TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this # tag. The format is ext=language, where ext is a file extension, and language # is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, # C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make # doxygen treat .inc files as Fortran files (default is PHP), and .f files as C # (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions # you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all # comments according to the Markdown format, which allows for more readable # documentation. See http://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you # can mix doxygen, HTML, and XML commands with Markdown formatting. # Disable only in case of backward compatibilities issues. MARKDOWN_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also makes the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and # unions are shown inside the group in which they are included (e.g. using # @ingroup) instead of on a separate page (for HTML and Man pages) or # section (for LaTeX and RTF). INLINE_GROUPED_CLASSES = NO # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and # unions with only public data fields will be shown inline in the documentation # of the scope in which they are defined (i.e. file, namespace, or group # documentation), provided this scope is documented. If set to NO (the default), # structs, classes, and unions are shown on a separate page (for HTML and Man # pages) or section (for LaTeX and RTF). INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penalty. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will roughly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. SYMBOL_CACHE_SIZE = 0 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given # their name and scope. Since this can be an expensive process and often the # same symbol appear multiple times in the code, doxygen keeps a cache of # pre-resolved symbols. If the cache is too small doxygen will become slower. # If the cache is too large, memory is wasted. The cache size is given by this # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols. LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespaces are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen # will sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the default) # the constructors will appear in the respective orders defined by # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to # do proper type resolution of all parameters of a function it will reject a # match between the prototype and the implementation of a member function even # if there is only one candidate or it is obvious which candidate to choose # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen # will still accept a match between prototype and implementation in such cases. STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or macro consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and macros in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated # output files in an output format independent way. The create the layout file # that represents doxygen's defaults, run doxygen with the -l option. # You can optionally specify a file name after the option, if omitted # DoxygenLayout.xml will be used as the name of the layout file. LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files # containing the references data. This must be a list of .bib files. The # .bib extension is automatically appended if omitted. Using this command # requires the bibtex tool to be installed. See also # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this # feature you need bibtex and perl available in the search path. CITE_BIB_FILES = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # The WARN_NO_PARAMDOC option can be enabled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = doxydev.debug #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = SRCDIR/linbox \ SRCDIR/doc \ SRCDIR/examples \ SRCDIR/tests \ SRCDIR/benchmarks # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py # *.f90 *.f *.for *.vhd *.vhdl FILE_PATTERNS = *.cc \ *.cpp \ *.C \ *.h \ *.inl \ *.doxy # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. # Note that relative paths are relative to the directory from which doxygen is # run. EXCLUDE = *_src.inl \ Attic # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *_src.inl \ */Attic/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = *__LINBOX_* # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = .. # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = *.C \ *.inl \ *INSTALL \ *COPYING \ *HACKING \ *AUTHORS \ *.html # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty or if # non of the patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) # and it is also possible to disable source filtering for a specific pattern # using *.ext= (so without naming a filter). This option only has effect when # FILTER_SOURCE_FILES is enabled. FILTER_SOURCE_PATTERNS = #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = linbox-dev-html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. Note that when using a custom header you are responsible # for the proper inclusion of any scripts and style sheets that doxygen # needs, which is dependent on the configuration options used. # It is advised to generate a default header using "doxygen -w html # header.html footer.html stylesheet.css YourConfigFile" and then modify # that header. Note that the header is subject to change so you typically # have to redo this when upgrading to a newer version of doxygen or when # changing the value of configuration settings such as GENERATE_TREEVIEW! HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # style sheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note # that these files will be copied to the base HTML output directory. Use the # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these # files. In the HTML_STYLESHEET file, use the file name only. Also note that # the files will be copied as-is; there are no commands or markers available. HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. # Doxygen will adjust the colors in the style sheet and background images # according to this color. Hue is specified as an angle on a colorwheel, # see http://en.wikipedia.org/wiki/Hue for more information. # For instance the value 0 represents red, 60 is yellow, 120 is green, # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. # The allowed range is 0 to 359. HTML_COLORSTYLE_HUE = 110 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of # the colors in the HTML output. For a value of 0 the output will use # grayscales only. A value of 255 will produce the most vivid colors. HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to # the luminance component of the colors in the HTML output. Values below # 100 gradually make the output lighter, whereas values above 100 make # the output darker. The value divided by 100 is the actual gamma applied, # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, # and 100 does not change the gamma. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated # that can be used as input for Qt's qhelpgenerator to generate a # Qt Compressed Help (.qch) of the generated HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to # add. For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see # # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's # filter section matches. # # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before # the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) # at top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. Since the tabs have the same information as the # navigation tree you can set this option to NO if you already set # GENERATE_TREEVIEW to YES. DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. # Since the tree basically has the same information as the tab index you # could consider to set DISABLE_INDEX to NO when enabling this option. GENERATE_TREEVIEW = NO # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values # (range [0,1..20]) that doxygen will group on one line in the generated HTML # documentation. Note that a value of 0 will completely suppress the enum # values from appearing in the overview section. ENUM_VALUES_PER_LINE = 4 # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open # links to external symbols imported via tag files in a separate window. EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are # not supported properly for IE 6.0, but are supported on all modern browsers. # Note that when changing this option you need to delete any form_*.png files # in the HTML output before the changes have effect. FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax # (see http://www.mathjax.org) which uses client side Javascript for the # rendering instead of using prerendered bitmaps. Use this if you do not # have LaTeX installed or if you want to formulas look prettier in the HTML # output. When enabled you may also need to install MathJax separately and # configure the path to it using the MATHJAX_RELPATH option. USE_MATHJAX = NO # When MathJax is enabled you need to specify the location relative to the # HTML output directory using the MATHJAX_RELPATH option. The destination # directory should contain the MathJax.js script. For instance, if the mathjax # directory is located at the same level as the HTML output directory, then # MATHJAX_RELPATH should be ../mathjax. The default value points to # the MathJax Content Delivery Network so you can quickly see the result without # installing MathJax. # However, it is strongly recommended to install a local # copy of MathJax from http://www.mathjax.org before deployment. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension # names that should be enabled during MathJax rendering. MATHJAX_EXTENSIONS = # When the SEARCHENGINE tag is enabled doxygen will generate a search box # for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets # (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a PHP enabled web server instead of at the web client # using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server # based approach is that it scales better to large projects and allows # full text search. The disadvantages are that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = stmaryrd \ amsmath # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for # the generated latex document. The footer should contain everything after # the last chapter. If it is left blank doxygen will generate a # standard footer. Notice: only use this tag if you know what you are doing! LATEX_FOOTER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include # source code with syntax highlighting in the LaTeX output. # Note that which sources are shown also depends on other settings # such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See # http://en.wikipedia.org/wiki/BibTeX for more info. LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load style sheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # pointed to by INCLUDE_PATH will be searched when a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition that # overrules the definition found in the source code. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all references to function-like macros # that are alone on a line, have an all uppercase name, and do not end with a # semicolon, because these will confuse the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. For each # tag file the location of the external documentation should be added. The # format of a tag file without this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths # or URLs. Note that each tag file must have a unique name (where the name does # NOT include the path). If a tag file is not located in the directory in which # doxygen is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option also works with HAVE_DOT disabled, but it is recommended to # install and use dot, since it yields more powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is # allowed to run in parallel. When set to 0 (the default) doxygen will # base this on the number of processors available in the system. You can set it # explicitly to a value larger than 0 to get control over the balance # between CPU load and processing speed. DOT_NUM_THREADS = 0 # By default doxygen will use the Helvetica font for all dot files that # doxygen generates. When you want a differently looking font you can specify # the font name using DOT_FONTNAME. You need to make sure dot is able to find # the font, which can be done by putting it in a standard location or by setting # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the # directory containing the font. DOT_FONTNAME = FreeSans.ttf # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the Helvetica font. # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to # set the path where dot can find it. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside # the class node. If there are many fields or methods and many nodes the # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS # threshold limits the number of items for each type to make the size more # managable. Set this to 0 for no limit. Note that the threshold may be # exceeded by 50% before the limit is enforced. UML_LIMIT_NUM_FIELDS = 10 # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will generate a graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are svg, png, jpg, or gif. # If left blank png will be used. If you choose svg you need to set # HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible in IE 9+ (other browsers do not have this requirement). DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. # Note that this requires a modern browser other than Internet Explorer. # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files # visible. Older versions of IE do not have SVG support. INTERACTIVE_SVG = NO # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the # \mscfile command). MSCFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 1000 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES linbox-1.6.3/doc/Makefile.am000066400000000000000000000046551347646240000156350ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ if LINBOX_BUILD_DOC USE_TARGETS = docs INSTALL_TARGETS = install-doc endif docdir=$(LINBOX_DOC_PATH) man1_MANS = linbox-config.1 all all-local: $(USE_TARGETS) install install-data-local: $(INSTALL_TARGETS) docs : sed -i 's/\\version\s1.*/\\version\ $(VERSION)/' mainpage.doxy if test -d linbox-html ; then echo exists; else mkdir linbox-html ; fi if test -d linbox-dev-html ; then echo exists; else mkdir linbox-dev-html ; fi cp $(top_srcdir)/doc/index-dev.html linbox-dev-html/index.html cp $(top_srcdir)/doc/install-dist.html linbox-html/ cp $(top_srcdir)/doc/install-dev.html linbox-html/ cp $(top_srcdir)/README.md linbox-html/ cp $(top_srcdir)/COPYING linbox-html/ cp $(top_srcdir)/AUTHORS linbox-html/ doxygen Doxyfile docs_dev : make docs cp $(top_srcdir)/doc/install-dist.html linbox-dev-html/ cp $(top_srcdir)/doc/install-dev.html linbox-dev-html/ cp $(top_srcdir)/README.md linbox-dev-html/ cp $(top_srcdir)/COPYING linbox-dev-html/ cp $(top_srcdir)/AUTHORS linbox-dev-html/ doxygen DoxyfileDev install-doc : mkdir -p $(DESTDIR)/$(docdir) cp -rp linbox-html $(DESTDIR)/$(docdir)/linbox-html cp -rp linbox-dev-html $(DESTDIR)/$(docdir)/linbox-dev-html cp -p linbox.html $(DESTDIR)/$(docdir)/linbox.html EXTRA_DIST= \ linbox.html \ install-dev.html \ index-dev.html \ install-dist.html \ Doxyfile.mod \ DoxyfileDev.mod \ doc.doxy \ mainpage.doxy \ tutorial.doxy \ versionning.doxy \ linbox-config.1 clean-local : rm -rf linbox-html rm -rf linbox-dev-html linbox-1.6.3/doc/doc.doxy000066400000000000000000000140021347646240000152360ustar00rootroot00000000000000// Copyright (C) 2005 David Saunders, part of LinBox, GNU LGPL, see COPYING /* * Coypright (c) LinBox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * */ /** \ingroup linbox \defgroup doc doc \brief This is a discussion of the form and organization of %LinBox documentation. The doc directory contains - in subdirectory linbox-html/ the html documentation, it has been built using Doxygen. Start at linbox-html/index.html. - Doxyfile, which specifies parameters for Doxygen to use when building the docs. - %doc.doxy, which is the source of this page. - %mainpage.doxy, which is the source of linbox-html/index.html. - install-dist.html and install-dev.html, some basic installation information. - linbox.html, which can be a handy way to get to linbox-html/index.html. There is a documentation page for each directory (see Modules) and each class of the %LinBox distribution. A directory (Module) page discusses the primary concepts supported by codes in the directory and lists the classes declared in the directory's files. A class page discusses properties of the class beyond the primary concept(s) that it implements and lists it's documented members. Files containing a \\file my_dir/my_file.h documentation show up in the files list. Each documented object (directory, class, member function, ...) has a one line memo that appears with it's name or signature in a parent object listing and at the top of it's own page if it has one (directory, class, top-level function). The memo also reappears as the first line of the fuller documentation. Some attempt is made to indicate which parts are most relevant to the user. HOW??

Developers:

Here are some rules of thumb about the documentation. Each directory dir/ has a dir/dir.doxy file listing its most user oriented contents and explaining the general nature of them. All other documentation is in the header files, a doc comment for each class and for each documented member function. In tests/ and examples/ there is also some documentation in .C files. Each documentation comment begins with a \\brief memo. Keep in mind that the \\brief text appears with the name/signature line of the object right above it. Thus there is no need to restate information that is plain from the signature such as the C++ type of a parameter. Try to make the brief memo succinctly state what the object is for. The user, looking at the signature and brief memo, will be trying to decide whether, at this moment in her study of things, she needs to click on this item for the fuller documentation of it. Try to help. The brief memo should not contain links to other pages. Put desired links in the fuller documentation. Most particularly the brief memo should not contain links to the object of which this item is a member. Such links become links to the current page and are a distraction and annoyance to the reader. Use documented parameter listings, with \\param arg - ..., when you have something significant to say about all or most of the parameters. When you use \\param for one parameter of a function, use it for all of them. However, it is sometimes better to skip the \\param listing format and just discuss in sentences the parameters, their requirements on input, relation to each other, and properties on output. Use your judgement about this on a case by case basis. Members of archetypes should be thoroughly documented in the archetype and then not documented at all in classes adhering to the archetype. Just a reference to the archetype documentation suffices. See ??? for an example of this. However, if the archetype function has a particular property concerning it's performance or use in this particular class, then document that special property. See Butterfly for an example of this. In many functions the return value is a reference to the first parameter, the primary output paramater. parameter and is rarely used in practice. In this case, don't use both the \\param and the \\return. Earlier I proposed not to use \\return at all in these situations. Perhaps we should use \\return arg1 - ... in place of \\param arg1 - ... . See ??? for an example of this.

References

References to papers/book can be documented for classes, functions, groups,... and referenced in a Bibliography page using : \n \\ref - [Authors] [Title] [journal,conference,book,...] [doi]. */ // vim:syn=doxygen linbox-1.6.3/doc/index-dev.html000066400000000000000000000031701347646240000163410ustar00rootroot00000000000000 LinBox documentation for Developers

Dead link

If you reached and see this page, then you need to compile the documentation first with

			> make docs_dev.
		

You may also want to return to users documentation or wait till the docs are built (auto refreshing page).

linbox-1.6.3/doc/install-1.0.html000066400000000000000000000144071347646240000164250ustar00rootroot00000000000000  

How to install LinBox (from a distribution)


See also INSTALL.  Once the LinBox distribution has been downloaded from the LinBox download section ,

1. Unpack the distribution using tar command:

tar -xvzf linbox-X.X.X.tar.gz
2. Go to the newly-created linbox directory and run the script configure, optionally you may specify the LinBox installation directory or an optional package directory using prefixes:
> cd linbox
> ./configure [--prefix=<inst. dir.> --with-package=<location> --enable-feature]
Gmp is required and its location must be specified <gmp location> is not a standard location such as /usr or /usr/local:
> ./configure --with-gmp= <gmp location> [...]
Atlas, or other source of BLAS, is also required and its location must be specified if not standard.
> ./configure --with-atlas= <atlas location> [...]
This sets up the library and runs  ./configure

3. Optional configurations

3.1. Where to put the include/ and lib/ directories:
--prefix= <chosen installation directory>
Ex:  ./configure --prefix= `pwd` will put the files within the current directory

3.2. The use of an optional package is switched on by specifying the directory where it can be found:

--with-package=<package_directory>

<package_directory> can be left blank if the package is installed in a standard directory (/usr or /usr/local)
Ex: ./configure --with-givaro will enable the use of Givaro library and assume it is installed in a standard directory

Available packages are the following:

Givaro (v3.1.3) --with-givaro= <givaro_directory> used for finite field arithmetic.
Lidia --with-lidia= <lidia_directory> used for finite field arithmetic.
NTL --with-ntl= <ntl_directory> used for finite field, polynomial arithmetic.
Saclib --with-saclib= <saclib_directory> not yet used
Maple --with-maple= <maple-directory>  used to create an interface with Maple.
Doxygen --with-doxygen= <doxygen-path>  used to create the html reference manual.

Note:

the use of --with-default= <default_directory> can add a special directory to the default location of library

the use of --with-all specifies that all packages will be used

3.3. The use of special feature is switched on by calling the enable parameter:

--enable-feature
Ex: ./configure --enable-shared will turn on the build of a shared library

Available extra features are the following:

--enable-optimization turn on runtime optimization during the configuration
--enable-doc turn on the build of documentation via Doxygen.
4.  Install the library:
>  make install

Copyright 1999-2005 The Linbox Group.
linbox-1.6.3/doc/install-dev.html000066400000000000000000000042531347646240000167030ustar00rootroot00000000000000 linbox: Installation (for developers)  

How to install LinBox (for developers using git)

Retrieve givaro, fflas-ffpack, and from github.com/linbox-team. You can configure LinBox with the autogen.sh script. You can use it exactly the same way ./configure works (execpt for the --help part... :() See here for additional information on configure script.

If you are not sure, run autogen.sh with the minimal options so LinBox can be well configured and then you will get more information with configure --help.


See also HACKING.


Copyright 1999-2011 The Linbox Group.
linbox-1.6.3/doc/install-dist.html000066400000000000000000000200021347646240000170560ustar00rootroot00000000000000 linbox: Installation  

How to install LinBox (from a distribution)


See also INSTALL.  Once the LinBox distribution has been downloaded from the LinBox download section,

1. Unpack the distribution using tar command:

tar -xvzf linbox-X.X.X.tar.gz
2. Go to the newly-created linbox directory and run the script configure.
> cd linbox
There are many options for configuring LinBox. If you are not sure, just run
> ./configure --help
You will find a very comprehensible list of all possible features you may enable/disable.

Required packages are the following:

Givaro --with-givaro= <givaro_directory> used for finite fields, integer, rational and polynomial arithmetic.
Fflas-Ffpack --with-fflas-ffpack= <fflasffpack_directory> used for small field dense linear algebra.
Basically, minimal LinBox only requires a working Givaro and Fflas-Ffpack installation. If they are not under the standard /usr or /usr/local paths, you may enable them with --with-givaro=<path/to/givaro> and --with-fflas-ffpack=<path/to/fflas-ffpack> options.

NOTE : other requirements
Givaro requires GMP for big integer operations, see Givaro page for more information.
Fflas-Ffpack requires some BLAS for floating point dense matrix multiplication, see Fflas-Ffpack page for more information.

For Givaro install GMP
For Fflas-Ffpack install Goto BLAS 2 ATLAS or ...

NOTE : There is a script in alpha version that tries to automate the installation of required packages:

> sh auto-install.sh
this will download the appropriate dependencies, compile and install them. Use --help for help on how to use this script.

3. Optional configurations
Available packages are the following:

NTL --with-ntl= <ntl_directory> used for finite field, polynomial arithmetic.
Lidia --with-lidia= <lidia_directory> used for finite field arithmetic.
Saclib --with-saclib= <saclib_directory> not yet used
Maple (> v9) --enable-shared --with-maple= <maple-directory>  used to create an interface with Maple.
Doxygen --enable-doc used to create the html reference manual (nothing will be created otherwise).
IML --with-iml= <IML-path>  used for fast integer/rational linear algebra.
gnuplot -enable-benchmark used for creating plots in benchmarks.

Note:

the use of --with-default= <default_directory> can add a special directory to the default location of library

the use of --with-all specifies that all packages will be used

4.  Install the library:
>  make
>  make install
5.  Optional make targets:
>  make examples
will compile the examples.
>  make check
will check LinBox is up and running.
>  make fullcheck
will perform additionnal checks to ensure LinBox is completely sane.
>  make benchmarks
will benchmarks some LinBox functionnalities.

6.  Enjoy ! (and report bugs, supply patches, ask for more functionnalities,... on the linbox mailing lists)

Copyright 1999-2011 The Linbox Group.
linbox-1.6.3/doc/linbox-config.1000066400000000000000000000014601347646240000164100ustar00rootroot00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36. .TH LINBOX-CONFIG "1" "June 2008" "linbox-config 1.1.6rc0" "User Commands" .SH NAME linbox-config \- tool for linking against LinBox .SH SYNOPSIS .B linbox-config [\fIOPTION\fR] .SH DESCRIPTION Known values for OPTION are: .TP \fB\-\-prefix\fR show Linbox installation prefix .TP \fB\-\-libs\fR print library linking information .TP \fB\-\-cflags\fR print pre\-processor and compiler flags .TP \fB\-\-help\fR display this help and exit .TP \fB\-\-version\fR output version information .SH "SEE ALSO" The full documentation for .B linbox-config is maintained as a Texinfo manual. If the .B info and .B linbox-config programs are properly installed at your site, the command .IP .B info linbox-config .PP should give you access to the complete manual. linbox-1.6.3/doc/linbox.html000066400000000000000000000027761347646240000157640ustar00rootroot00000000000000 Starter to LinBox documentation LinBox documentation main page: linbox-html/index.html (going there in 5 seconds). If it is a dead link, you have to build the documentation first with make docs. linbox-1.6.3/doc/mainpage.doxy000066400000000000000000000236171347646240000162660ustar00rootroot00000000000000// Copyright (C) 2005 David Saunders, 2010 LinBox. This file is part of LinBox, // GNU LGPL, see COPYING for license information. /* * Coypright (c) LinBox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * */ /** \mainpage LinBox Symbolic Linear Algebra Software Library. * * \section intro Introduction * * %LinBox is a C++ template library of routines for solution of linear algebra * problems including linear system solution, rank, determinant, minimal * polynomial, characteristic polynomial, and Smith normal form. * * Algorithms are provided for matrices with integer entries or entries in a * finite field. A number of matrix storage types is provided, especially for * blackbox representation of sparse or structured matrix classes. * A few algorithms for rational matrices are available. %LinBox also uses * underlying data structures and algorithms for integer, rational, polynomial, * finite fields and rings, as well as dense and sparse matrix formats coming * from the %Givaro (https://casys.gricad-pages.univ-grenoble-alpes.fr/givaro) * and FFLAS-FFPACK (http://linbox-team.github.io/fflas-ffpack) libraries. * * \section goals Goals * * Project %LinBox (http://linalg.org) is a collaborative effort among * researchers at a number of locations around the world. Some of the most * active participants are listed \subpage AUTHORS "here". The goals are to * produce algorithms and software for symbolic linear algebra, particularly * using \ref blackbox matrix methods, i.e. iterative methods requiring only * the linear transform property of the matrix (that, given A and x, one can * compute \f$y \gets Ax\f$). Such methods are especially effective with * sparse or structured matrices for which the matrix-vector product can be * computed cheaply. %LinBox also provides elimination based methods * for dense matrices exploiting the numeric BLAS routines via FFLAS-FFPACK. * * A good collection of finite field implementations is available. Some * algorithms are probabilistic, but their results are extremely reliable * except over very small fields (less than 1000 elements, say). * * \section desig Design * * %LinBox depends on other packages for some of its functionality. It is a * design goal of %LinBox to be a kind of \e middleware, providing a common * interface for use in projects needing linear algebra and providing access to * other systems and programs through wrappers whenever their capabilities may * contribute to the linear algebra. Thus, to gain full advangage of %LinBox * it will be desirable to have certain other packages installed. In * particular GMP and a BLAS implementation are required. GMP provides the * basic large integer system used throughout. We have been using ATLAS for * the BLAS implementation. The remaining dependencies are optional, but two * packages stand out as contributing substantially to %LinBox. They are %NTL * and Givaro. %NTL is used for some finite field and ring representations, * particularly in the case of \c GF(q), where \c q is a prime power or a prime * greater than word size. %NTL is also used by algorithms that need * polynomial operations such as factorization. Givaro is another source of * field representations and polynomial operations. Importantly, Givaro * provides our best representation of small non-prime fields, say q = * pe < 106. Functionality from some other * systems has been wrapped also but is currently less widely used in %LinBox. * * \e Genericity and \e high \e performance are the twin goals of %LinBox. The * genericity is achieved by use of a small set of interfaces. Algorithms are * implemented with C++ template parameters which may be instantiated with any * class adhering to the specified interface. High performance is achieved by * judicious specializations of the generic algorithms. It is entirely within * the spirit of the project to introduce new implementations. Thus a user of * the library may invoke a %LinBox algorithm, say for determinant or rank of a * matrix, but providing a blackbox class of her own design and perhaps even * providing the underlying field (or commutative ring) representation. * Conversely, the %LinBox field and ring interfaces and the many specific * representations can be used for purposes other than linear algebra * computation or with algorithms not provided by %LinBox. * * \section using Using LinBox * * - \subpage copy. * - \subpage tuto. This is a brief introduction to %LinBox capabilities. * - \subpage inst. Explains how to install from sources or from the latest svn * version. * - \subpage arch. Describes how %LinBox is organized * \internal * - \subpage upgr. Explains how to make new versions of %LinBox \endinternal * . * * \section docu Documentation * - Documentation for Users. If everything around is blue, then you * are reading the lighter, user-oriented, documentation. * - Documentation for Developers. If everything around is green, then * you can get to everything (not necessarily yet) documented. * . * * \section contrib Contributing to LinBox, getting assistance. * We warmly welcome contributors ! Contributing can rhyme with providing * documentation, pointing out bugs, requesting more features, giving * test-cases, making comments about the code,...
* You can contact the LinBox team at \f$\mathtt{linbox}\!-\!\mathtt{use} * \mathtt{@} \mathtt{googlegroups}\!\cdot\!\mathtt{com}\f$ (user oriented * discussions) or \f$\mathtt{linbox}\!-\!\mathtt{use} \mathtt{@} * \mathtt{googlegroups}\!\cdot\!\mathtt{com}\f$ (development oriented * discussions). * * \authors Members of the \link AUTHORS %LinBox group\endlink. The most * prolific documenters have been William J Turner, Bradford Hovinen, * David Saunders, Brice Boyer. * * \version 1.6.2 * * \par Support. * The project is supported by the National Science Foundation * (http://www.nsf.gov/) in the USA and by CNRS in France. */ /*! \page copy Copyright and Licencing * The copyright and licensing (GNU LGPL) info of %LinBox is in \c COPYING.LESSER (and below). * It gives permissions in addition to those of the GPL, see \c COPYING. * \verbinclude "COPYING.LESSER". */ /*! \page inst Installing LinBox * To install from a distribution, the usual configure, make sequence * applies. See \subpage dist "configuring and installing" for more details. * To install a development version from the SVN repository see the \subpage dev * "developer info". The generic Free Software Foundation \subpage INSTALL * "INSTALL" may also be of use. */ /*! \page arch Architecture of the library * * The distribution contains subdirectories (documented as `modules' here) * * - linbox. This contains the library * sources. The defined objects are in the namespace LinBox. * - linbox/field, linbox/ring, field and ring representations. * - linbox/randiter, random element * generation for fields and rings. * - linbox/blackbox, generally * immutable matrix representations for blackbox methods (based on * matrix-vector products). * - linbox/matrix, mutable sparse and * dense matrices. * - linbox/algorithms, the core * algorithms of %LinBox * - linbox/solutions, convenience * wrappers of algorithms * - linbox/element, details of field * and ring element representation. * - linbox/fflas, wrapper of BLAS for * exact finite prime field linear algebra. * - linbox/ffpack, . * - linbox/util, basic integers, timing * clocks, commentator. * . * - examples, programs meant to be * directly useful or be guides * for the progammer using %LinBox. * - doc, the browsable \c html documentation is * generated with Doxygen, * - interfaces, interfaces to other * systems, such as Maple, gap, web servers, * - tests, primarily correctness tests to aid * development. * - benchmarks, where you can benchmark * and compare your LinBox installation. * . */ /*! \page AUTHORS LinBox Authors * \verbinclude "AUTHORS" */ /*! \page INSTALL The INSTALL in LinBox * \verbinclude "INSTALL" */ /*! \page dist Configuring and Installing LinBox * \htmlinclude "doc/install-dist.html" */ /*! \page dev Developer info for LinBox * \htmlinclude "doc/install-dev.html" * * \par HACKING LinBox. * \verbinclude "HACKING" */ // vim:syn=doxygen linbox-1.6.3/doc/organization/000077500000000000000000000000001347646240000162735ustar00rootroot00000000000000linbox-1.6.3/doc/organization/Linbox.draft000066400000000000000000000042011347646240000205450ustar00rootroot00000000000000/Linbox --/doc : Describes Linbox --/algorithms : requirements and implementations for algorithms --/organization : documentation on the package organization --/config : generic makefiles, configuration files --/src : Library --/library --/archetypes : Linbox archetypes --/Field --/Blackbox --/Polynomials --/algorithms : Linbox algorithms (generic on Linbox objects) --/Ring --/Field --/FiniteExtension : Finite fields as a polynomial domain over finite fields Requires templates with field operations Implements field operations --/Blackbox : Requires templates with Apply Implements Apply --/Composition : A o B --/Transposition : A^t --/Sequence : Minimum polynomials --/Iterator : Requires templates with Apply Implements forward_iterator (u^t A^i v) --/Massey : Requires templates with forward_iterator Implements degree, minimun_poly --/Wiedemann : Requires templates with Apply, minimum_poly Implements rank, matrix minpoly --/objects : Implements from scratch --/Random --/Blackbox --/Field --/wrappers : Links existing libraries --/by_library : Wraps existing classes to match Linbox requirements --/A Library --/Rings : Implements ring operations from +,*,.. --/Integer : Implements integer operations from GMP, ... --/Polynomials : Implements Polynomial domain from ... --/Fields : Implements field operations from +,*,/,.. --/ZpZ : parametrized with a modulus from NTL ... --/GFq : tabulated finite fields from Givaro ... --/Blackbox --/SparseBlackbox : Implements Apply from vector of sparse vectors --/DenseBlackbox : Implements Apply from bidimensionnal arrays --/by_scope : Links to wrappers, but organized by scope --/tools --/Commentator --/SparseVector --/examples --/Gauss : Sparse gaussian elimination with reordering --/Random : Random generators tests --/Sequence : Wiedemann algorithm linbox-1.6.3/doc/organization/Makefile.am000066400000000000000000000016221347646240000203300ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # see COPYING for licence # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== EXTRA_DIST=\ Linbox.draft linbox-1.6.3/doc/tex/000077500000000000000000000000001347646240000143675ustar00rootroot00000000000000linbox-1.6.3/doc/tex/Makefile.am000066400000000000000000000023671347646240000164330ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== if USE_DOCPLUSPLUS_TEX USE_TARGETS = linbox.tex linbox.ps linbox.dvi endif CLEANFILES = linbox.tex linbox.ps MOSTLYCLEANFILES = linbox.aux linbox.log linbox.dvi all-local: $(USE_TARGETS) linbox.ps: linbox.dvi dvips linbox.dvi -o linbox.ps linbox.dvi: linbox.tex latex "\scrollmode\input linbox"; exit 0 linbox.tex: $(top_srcdir)/linbox/linbox.dxx doc++ -t -o linbox.tex $(top_srcdir)/linbox/linbox.dxx linbox-1.6.3/doc/tutorial.doxy000066400000000000000000000224701347646240000163440ustar00rootroot00000000000000// Copyright (C) 2005 David Saunders, 2010 LinBox. // This file is part of LinBox, see COPYING for licence information. /* * Coypright (c) LinBox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * */ /*! \page tuto LinBox tutorial The person requiring some exact linear algebra computation may exploit LinBox at any of four general levels. In order from least involved with the details to most involved, they are:
  1. Access using a LinBox web server.
  2. The user at this level must attend to preparation of a matrix in a suitable file format and invoking the webservice. The server itself should provide adequate documentation for this. Servers are generally available at linalg.org.
  3. Access using compiled codes. Full programs exist in the examples directory and can be used through an interface to LinBox in a general purposes system such as Maple or SAGE.
  4. The user at this level must see to installation, and then attend to preparation of her matrix in a suitable file format and to the form of the program or procedure invocation. A number of programs are available in the examples directory distributed with LinBox providing for rank, determinant, linear system solution, etc. The documentation of the examples module should serve for this level of access.
  5. Use of LinBox as a programmers library for exact linear algebra functions.
  6. At this level a user must do at least the following:
    1. Choose a field or ring representation and construct a specific field or ring object \c R.
    2. Choose a blackbox or matrix representation suitable to your data and construct specific matrix \c A over \c R.
    3. Call the desired algorithm. The solutions directory is designed to support this by providing functions with simple problem oriented interfaces (\c rank(), \c det(), \c solve()), yet allowing some user control of algorithm details. The programmer may be providing some of the parts such as an application specific blackbox matrix class.
  7. Power development.
  8. Again, this is use of LinBox as a library, but with hands fully on the details. The programmer at this level apparently needs the best opportunities for high performance and is willing to use the more complicated internal interfaces to get it. Direct calls to functions in the algorithms directory and perhaps to related packages such as \c FFLAS, \c FFPACK, or other components are being used. The programmer working at this level of intimacy with LinBox is likely to develop some components that ought to be included in future releases of LinBox. Such contributions are warmly welcomed. The online documentation system is intended primarily for the programmer at level 3. Thus documentation is not generated to the last internal detail. It is supposed that the level 4 (and 3) programmer, when studying internal details, will be best served by reading the code. It is possible, if you wish, to set doxygen parameters so as to have a documentation listing for every class and function. Good luck separating wheat from chaff in that case.
In this tutorial we will discuss a simple application at level 3, the design of a program to compute the determinant of a sparse matrix over \f$\mathbf{GF}(101)\f$. The programmer has 3 major issues: field, matrix, algorithm. The basic algorithm choice is between blackbox and elimination algorithms. If our matrix is \c A, then the algorithm call may look like \code det(d, A, Method::Blackbox()); //or det(d, A, Method::Elimination()); \endcode To have access to this determinant function just \#include . The larger and sparser the matrix the more likely that the blackbox algorithm is fastest. Hybrids are under development to help make this choice, and even to make it at run time adaptively. The last argument to the solutions functions is a method object which specifies the algorithm to be used. In each case there is a default, so this argument is optional. Also, some method objects may be constructed so as to convey more detail about the algorithm to use. For example it may help to promise that the matrix is nonsingular or symmetric or to request a particular algorithm variant. The blackbox algorithm based fundamentally on Wiedemann's approach is specified by \c Method::Wiedemann, see \c solutions/methods.h for more details. Specification of a blocked blackbox algorithm may be advantageous (in the future). Elimination is likely fastest if the matrix is not extremely sparse or not large or not subject to rapid fill-in. Of course, first we must construct the matrix and field. For the field, you must first choose the class (representation type) of field and then instantiate your specific field. \code #include typedef Givaro::Modular Field; Field F(101); \endcode It is a good idea to use a \p typedef, making it easy to change representations later. The \ref modular field representations are LinBox's own and contain some useful optimizations. Another possibility is use of NTL's \c NTL::ZZ_p class. The LinBox wrapper of that, called \p LinBox::NTL_ZZ_p is found in \c field/ntl-ZZ_p.h. Or use a Givaro table based representation, \c LinBox::Givaro::GFq in \c field/givaro-gfq.h ...and there are many other options. The program \c tests/test-fields.C will provide some timing data on the basic functions of each representation. In %LinBox, a \p Field class and the class representing the field entries are distinct types. The field object owns the arithmetic operations, whereas the entry objects may be of a primitive type such as \c short, \c int, \c double. Each field class \p Fld has the embedded class \c Fld::Element for it's elements. \code Field::Element a, b, c; F.init(a, 2); F.init(b, 3); F.mul(c, a, b); // c <- a*b F.write(cout, c); \endcode You have seen that the field representations are in subdirectory \c linbox/field. Similarly the matrix representations are in \c linbox/blackbox. All of these are are suitable for blackbox algorithms. Only those deriving from representations in \c linbox/matrix are suitable for elimination. For a sparse matrix, \c LinBox::TriplesBB is a good representation choice if a blackbox algorithm is to be used. For a \f$\{0,1\}-\f$incidence matrix, the class \c LinBox::ZeroOne will be more economical of space and time. On the other hand, if elimination is to be used, those will not serve at all, but \c LinBox::SparseMatrix, which allows internal modification, will do the trick. The ordinary matrix representation is \c LinBox::BlasMatrix. If your matrix structure allows you to compute matrix-vector products in a way faster than these classes provide, you can gain by defining your own matrix class adhering to the \ref blackbox interface. The main components of the blackbox interface are member functions \c apply() and \c applyTranspose() functions. \c A.apply(y, x) performs \f$y \gets Ax\f$. Then there is the question of initializing matrix entries. Two basic approaches are illustrated here. \code TriplesBB A; A.read("triples-file"); // initialize A from data in file (including shape). \endcode Or a program can add entries to a sparse or dense matrix one by one using the \c setEntry function. \code SparseMatrix B(100, 200); // 100 by 200 zero matrix (so far). for ( ... ) { Field::Element v; F.init(v, ...); B.setEntry(i, j, v); // put nonzero v in i,j position. } \endcode Putting it all together, we may have a program looking like this. \code #include #include #include #include using namespace LinBox; int main() { typedef Givaro::Modular Field; Field F(101); SparseMatrix A(F); A.read(std::cin); Field::Element d; Method::BlasElimination M; det(d, A, M); F.write(std::cout << "the determinant is ", d) << std::endl; return 0; } \endcode A possible format for the input matrix is that of hpac.imag.fr. This tutorial should continue with a discussion of compilation issues, but it doesn't. Something useful may be learned from examining the Makefile.am in the examples directory. */ // vim:syntax=doxygen linbox-1.6.3/doc/versionning.doxy000066400000000000000000000120441347646240000170360ustar00rootroot00000000000000// Copyright (C) 2013 the LinBox Group // Written by Brice Boyer (briceboyer) // This file is part of LinBox, see COPYING for licence information. /* * Coypright (c) LinBox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * */ /*! * \page upgr Updating/Versionning *

Creating a new version number for LinBox/Givaro/fflas-ffpack:

* * These software are versioned as \c projectname-x.y.z where \c x is a \b major revision * number, \c y a \b minor number and \c z a \b revision (or bug) number. * The script \c incremente-version — in the root directory of these project * sources — takes care of incrementing these numbers (along with the library * so-names if necessary). * *
    *
  • \b Revision number.
    * Minor changes are changes that do not change any API and do not provoke * any miscompilation in LinBox. As a consequence, for instance, any release * \c 1.3.z of LinBox should compile with any givaro \c 3.7.z and any * fflas-ffpack \c 1.6.z.
    * This correspondance should be published on the website. It is however always put in * the \c auto-install.sh script. *
  • * *
  • \b Minor number.
    * Any change in these numbers in givaro or fflas-ffpack produces a minor * version change in LinBox. A minor version number changed is required when there * is some API change in fflas-ffpack or givaro or linbox or anything leading to * a failure to compile properly due to newly added inconsistencies. *
  • * *
  • \b Major number.
    * These number are incremented when big change happens. Only the minor number * of LinBox is needed to change when a major increment happens in * givaro/fflas-ffpack. *
  • *
* *

Publishing

* Before publishing a new version : *
    *
  • \b Testing * - The buildbots should be green and the script \c auto-install.sh should * succeed and the tests/example pass/compile. (It would be cool if more * compilers were tested, namely clang and ekopath). * - The number of warnings when compiled with \c --enable-warnings=full should * also be minimised. * - The number of warnings when compiling the doc should be minimised (and new * functionalities/concepts documented). * . *
  • * *
  • \b Incrementing * - on an up-to-date svn source, run the script \c incremente-version, follow * its instruction and confirm. * - commit these changes as in: \code svn commit -m "updated to projectname-x.y.z"\endcode * so that it is easier to spot the changes in the ChangeLog when publishing it. *
  • * *
  • \b Branching
    * Once the incrementing has been done, if the minor or major number * has been changed, then a new branch should be created in the svn repository * using \code svn copy /path/to/trunk /path/to/branch/project-x.y \endcode * This is done in order to allow maintainance and support, eg. new patches from * distributions and easy support of a \c x.y major.minor version (for sage for * instance). *
  • * *
  • \b Publishing
    * A release comes with a tar ball \c tar.gz, a \c md5sum of it and a summary \c ChangeLog. * *
      *
    • LinBox and fflas-ffpack * - a \c tar.gz and a \c md5sum is created in the \c www directory * - the corresponding web pages are updated * - The changes form the ChangeLog should be * put in \c NEWS-a.b.html (even for revision versions) for LinBox and \c fflas-ffpack-Changelog-x.y.z for * fflas-ffpack. *
    • * *
    • Givaro
      * - a \c tar.gz and a \c md5sum is created and uploaded to the * forge where * one can also put the ChangeLog in a form. *
    • * *
    • \c auto-install.sh script
      * - the auto-installation script (first 4 lines) should be updated * accordingly. They should correspond to the latest stable/desired version number for * givaro/fflas-ffpack. *
    • *
    • ChangeLogs
      * It would be nice if the ChangeLogs looked something like (the * users cannot/won't view the svn log): * * \verbatim Date - code update : * item - bugs : * item - new features : * item \endverbatim * *
    • *
    *
  • *
  • \b Documentation
    * If a minor revision change happens, there should be an automatic way to update the doxygen documentation. *
  • *
*. * */ // vim:syntax=doxygen linbox-1.6.3/examples/000077500000000000000000000000001347646240000146405ustar00rootroot00000000000000linbox-1.6.3/examples/Makefile.am000066400000000000000000000063001347646240000166730ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # This file is part of LinBox # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ # DEFAULT_INCLUDES=-I@includedir@ # -DLinBoxSrcOnly DEFCPPFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR AM_CPPFLAGS = -I$(top_srcdir) $(DEFCPPFLAGS) $(DEPS_CFLAGS) AM_CPPFLAGS += $(OPTFLAGS) LDADD = $(DEPS_LIBS) $(LDFLAGS) LDADD += $(top_builddir)/linbox/liblinbox.la LDADD += $(OPTLIBES) # AM_LDFLAGS=-static #AM_LDFLAGS=-L@libdir@ -llinbox # if LINBOX_HAVE_OCL # AM_CPPFLAGS += $(OCL_CFLAGS) # LDADD += $(OCL_LIBS) # endif #EX_LDADD = $(NTL_LIBS) #LDADD = $(LINBOX_LIBS) $(EX_LDADD) # SUBDIRS=fields solver data blackbox SUBDIRS=data EXAMPLES=rank det minpoly valence solve dot-product echelon sparseelimdet \ sparseelimrank checksolve doubledet smithvalence charpoly blassolve solverat \ sparsesolverat poweroftwo_ranks power_rank genprime #polysmith bench-fft bench-matpoly-mult # EXAMPLES+=nulp yabla GIVARONTL_EXAMPLES=smith graph-charpoly if LINBOX_HAVE_NTL USE_GIVARONTL_EXAMPLES = $(GIVARONTL_EXAMPLES) endif EXTRA_PROGRAMS= $(EXAMPLES) $(USE_GIVARONTL_EXAMPLES) CLEANFILES=$(EXTRA_PROGRAMS) EXTRA_DIST = examples.doxy test.sh #map-sparse.h map-sparse.inl examples: ${EXTRA_PROGRAMS} dot_product_SOURCES = dot-product.C doubledet_SOURCES = doubledet.C #linbox_program_SOURCES = \ # linbox-program.C checksolve_SOURCES = checksolve.C charpoly_SOURCES = charpoly.C graph_charpoly_SOURCES = graph-charpoly.C det_SOURCES = det.C genprime_SOURCES = genprime.C rank_SOURCES = rank.C smith_SOURCES = smith.C minpoly_SOURCES = minpoly.C valence_SOURCES = valence.C solve_SOURCES = solve.C echelon_SOURCES = echelon.C smithvalence_SOURCES = smithvalence.C sparseelimdet_SOURCES = sparseelimdet.C sparseelimrank_SOURCES = sparseelimrank.C solverat_SOURCES = solverat.C sparsesolverat_SOURCES = sparsesolverat.C blassolve_SOURCES = blassolve.C power_rank_SOURCES = power_rank.C poweroftwo_ranks_SOURCES=poweroftwo_ranks.C #smithformlocal_SOURCES = smith-form-local.C #polysmith_SOURCES = poly-smith.C #bench_fft_SOURCES = bench-fft.C #bench_matpoly_mult_SOURCES = bench-matpoly-mult.C LINBOX=@prefix@ LINBOX_BIN=@bindir@ # for compilation of new examples define comp_new_examp $(AM_V_CXX)$(CXXCOMPILE) -c -o $@.$(OBJEXT) $< $(AM_V_CXXLD)$(CXXLINK) $@.$(OBJEXT) $(LDADD) endef %:%.C $(comp_new_examp) %:%.cpp $(comp_new_examp) linbox-1.6.3/examples/Readme000066400000000000000000000000561347646240000157610ustar00rootroot00000000000000See also matrix examples in ../../tests/data/ linbox-1.6.3/examples/Readme-make.in000066400000000000000000000110301347646240000172730ustar00rootroot00000000000000#!/bin/sh # # Created by B. David Saunders # Modified by G. Villard # mar mai 6 18:15:17 CEST 2003 # dim aou 3 01:22:55 CEST 2003 ##################################################################################### # This Readme-make is actually a makefile illustrating two ways (A and B below) # to compile programs which use LinBox. # # Usage: "make -f Readme-make " ##################################################################################### # # Linbox is a C++ template source library using a two level directory structure. # To include a linbox file write "#include ". # For compiling code using linbox, three issues arise. # 1. location of LinBox include directory (which contains linbox/subdir/file.h). # 2. location of LinBox lib directory. Some components of LinBox ( those in linbox/util/ ) # are separately compiled and installed in this library. It is possible to include # sources from linbox/util/ rather than linking to this library. Compile # with "-DLinBoxSrcOnly". # 3. LinBox depends on other packages for some of it's functionality. The compiler must # find the include files and library objects for these packages. # Of these GMP is necessary, the others are optional. # # This makefile illustrates two ways to proceed (A and B below). # # ----> In both cases REPLACE ".." below with your LinBox top directory # e.g. LINBOX=/home/gvillard/Soft/linbox LINBOX=@prefix@ # ----> And put here your compiler's name and options #CCC=g++ CPPFLAGS= -O0 LDFLAGS= ######################################################################################### # A. # # If your LinBox library is compiled, normally the rest of this makefile # needn't be modified. # # If the LinBox library is compiled, use `$(LINBOX_BIN)/linbox-config --cflags --libs` # on the compile command to get the include and lib locations for LinBox and the # other packages it uses that were available when it was installed. # This is the simplest way to proceed. # This approach is used here for targets whose source suffix is .C # # no /bin if LinBox is uncompiled LINBOX_BIN=$(LINBOX)/bin #LINBOX_BIN=@bindir@ %:%.C #$(CXX) $(CPPFLAGS) $*.C -o $* $(shell $(LINBOX_BIN)/linbox-config --cflags --libs) CXXFLAGS+= $(shell $(LINBOX_BIN)/linbox-config --cflags) LOADLIBES+= $(shell $(LINBOX_BIN)/linbox-config --libs) ######################################################################################### # B. # You can compile from LinBox sources even without compiling LinBox. This approach is used # in this makefile example for targets whose source suffix is .cc or .cpp. # You must first indicate in this makefile the locations of LinBox and the packages used. # ----> Simply REPLACE ".." below with your LinBox top and packages directories GMP=.. #NTL=.. #GIVARO=.. #LIDIA=.. #SACLIB=.. # e.g. #GMP=/usr/local/algebra/gmp #NTL=/usr/local/algebra/ntl #GIVARO=/usr/local/algebra/givaro #LIDIA=/usr/local/algebra/lidia #SACLIB=/usr/local/algebra/saclib ###################################################################################### # Normally the rest of this makefile needn't be modified. Change remaining definitions # only when, in your installations, the includes or libs are not in the indicated places. ###################################################################################### LINBOX_INCL= -I$(LINBOX) -DLinBoxSrcOnly # GMP is a necessary component, used throughout LinBox. GMP_INCL= -I$(GMP)/include GMP_LIB= -L$(GMP)/lib -lgmp GMP_RLIB= -R$(GMP)/lib -lgmp # NTL is an optional component, used in a number of field classes. NTL_INCL= -I$(NTL)/include NTL_LIB= -L$(NTL)/lib -lntl # GIVARO is an optional component, used for instance in the Zech log fields GIVARO_INCL= -I$(GIVARO)/include GIVARO_LIB= -L$(GIVARO)/lib # LIDIA is an optional component. LIDIA_INCL= -I$(LIDIA)/include LIDIA_LIB= -L$(LIDIA)/lib # SACLIB is an optional component, not currently used. SACLIB_INCL= -I$(SACLIB)/include SACLIB_LIB= -L$(SACLIB)/lib INCL= $(LINBOX_INCL) $(GMP_INCL) INCL+=$(NTL_INCL) $(GIVARO_INCL) $(LIDIA_INCL) $(SACLIB_INCL) LIB= $(LINBOX_LIB) $(GMP_LIB) LIB+= $(NTL_LIB) $(GIVARO_LIB) $(LIDIA_LIB) $(SACLIB_LIB) # fixme: this is udel specific. RLIB= $(LINBOX_RLIB) $(GMP_RLIB) -R/usr/local/gnu/gcc/lib %:%.cc $(CCC) $(CPPFLAGS) $(LDFLAGS) $*.cc -o $* $(INCL) $(LIB) $(RLIB) # ... or use separate compilation and linkage %.o:%.cpp $(CCC) $(CPPFLAGS) $(INCL) $*.cpp -c %:%.o $(CCC) $(LDFLAGS) $*.o -o $* $(LIB) clean: rm -f *.o linbox-1.6.3/examples/athadet.C000066400000000000000000000055151347646240000163640ustar00rootroot00000000000000/* * examples/athadet.C * * Copyright (C) 2007, 2010 S. Guelton * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/athadet.C * @example examples/athadet.C \brief Determinant of sparse matrix over Z or Zp. \ingroup examples @author serge.guelton@imag.fr */ /* * to be compiled with kaapi library **svn sources**, available at http://gforge.inria.fr * g++ -o atahdet athadet.C $(pkg-config --cflags --libs kaapi) -g3 $( linbox-config --cflags --libs) * or * g++ -o atahdet athadet.C $KAAPI_CPPFLAGS $KAAPI_LDFLAGS -g3 $( linbox-config --cflags --libs) */ #define __LINBOX_HAVE_KAAPI #include #include #include #include #include #include #include using namespace LinBox; using namespace std; typedef Givaro::ZRing Integers; struct cra_det_task { void operator()(int argc, char **argv) { ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file '" << argv[1] << "'" << endl; return ; } Util::logfile() << "creating matrix" << std::endl; Integers ZZ; SparseMatrix sparseMatrix (ZZ); sparseMatrix.read(input); Util::logfile() << "matrix created" << std::endl; Givaro::ZRing::Element det_A; try { cra_det(det_A, sparseMatrix, RingCategories::IntegerTag(), Method::Auto() ); } catch ( LinBox::LinboxError & err ) { std::cerr << err << std::endl; } cout << "Determinant is "; ZZ.write(cout, det_A) << endl; } }; int main (int argc, char **argv) { if(argc<2) { cerr << "not enough args : usage = athadet file" << endl; return 1; } a1::Community com = a1::System::join_community(argc,argv); Util::logfile() << "starting job" << std::endl; a1::ForkMain()(argc,argv); com.leave(); a1::System::terminate(); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/bench-fft.C000066400000000000000000000223501347646240000166020ustar00rootroot00000000000000/* * Copyright (C) 2013 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #include #include #include #include #include using namespace std; #include "linbox/algorithms/polynomial-matrix/polynomial-fft-transform.h" #include "linbox/randiter/random-fftprime.h" #include "linbox/ring/modular.h" #include "fflas-ffpack/utils/align-allocator.h" using namespace LinBox; template void randomVect (Rand& r, Vect& v) { size_t s = v.size(); for (size_t i = 0; i < s; ++i) r.random(v[i]); } /********************************** ****** DFT CHECKING FUNCTION ***** *********************************/ template struct congruent{ T p; congruent(T _p): p(_p){} bool operator()(T a, T b) const { return ((uint64_t)a%(uint64_t)p) == ((uint64_t)b%(uint64_t)p);} }; template bool DFT_sanity_check(FFT& FFTDom, Funct f, const Vect& x, const Vect& y, string msg){ typedef typename FFT::Element Element ; Vect z(x); auto Functor = bind(f, &FFTDom, &z[0]); Functor(); msg+=" "; msg.resize(45,'.'); cout<<" Checking ... "<(FFTDom._p))?" done":" error")<(FFTDom._p)))){ std::ostream_iterator out_it (std::cout,", "); std::copy ( z.begin(), z.end(), out_it ); std::cout< bool check_DIF(const Field& fld, size_t kmax, long seed) { typedef typename Field::Element Element; bool passed = true; for (size_t lpts = 1; lpts < kmax ; lpts++){ size_t pts = 1 << lpts; cout<<"********************************************************"< x(pts),y(pts); std::vector> x(pts),y(pts); // Generate random inputs typename Field::RandIter Gen(fld);//,fld.characteristic(),seed); randomVect(Gen,y); x=y; FFT_transform MulDom(fld,lpts); typedef FFT_transform FFT_t; /* CHECK DIF */ // compute the correct result MulDom.FFT_DIF_Harvey_mod2p_iterative(y.data()); // check 2x2 passed &= DFT_sanity_check(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative2x2,x,y, "DIF_Harvey_mod2p_iterative2x2"); // check 3x3 passed &= DFT_sanity_check(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative3x3,x,y, "DIF_Harvey_mod2p_iterative3x3"); // check 4x1 SSE //passed &= DFT_sanity_check(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative4x1_SSE,x,y, "DIF_Harvey_mod2p_iterative4x1_SSE"); // check 4x2 SSE //passed &= DFT_sanity_check(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative4x2_SSE,x,y, "DIF_Harvey_mod2p_iterative4x2_SSE"); #ifdef __LINBOX_HAVE_AVX2_INSTRUCTIONS // check 8x1 AVX //passed &= DFT_sanity_check(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative8x1_AVX,x,y, "DIF_Harvey_mod2p_iterative8x1_AVX"); #endif // check Harvey SSE passed &= DFT_sanity_check(MulDom,&FFT_t::template FFT_DIF,x,y, "DIF_Harvey_SSE"); // cout<<"---------------------------------------------------------------"<,x,y, "DIT_Harvey_SSE"); // cout< void DFT_performance(FFT& FFTDom, Funct f, size_t lpts, const Vect& x, string msg){ Vect z(x); auto Functor = bind(f, &FFTDom, &z[0]); Timer chrono; double time; double Miops; size_t ct,minct=4; ct = 0; chrono.start(); while (chrono.realElapsedTime() < 1){ for (size_t k=0;k void bench_DIF(const Field& fld, size_t kmax, long seed) { typedef typename Field::Element Element; for (size_t lpts = 5; lpts < kmax ; lpts++){ size_t pts = 1 << lpts; cout<<"*********************************************************"< x(pts); // Generate random inputs typename Field::RandIter Gen(fld,seed); randomVect(Gen,x); FFT_transform MulDom(fld,lpts); typedef FFT_transform FFT_t; // check 1x1 DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative,lpts, x, "DIF_Harvey_mod2p_iterative"); // check 2x2 DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative2x2,lpts, x, "DIF_Harvey_mod2p_iterative2x2"); // check 3x3 DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative3x3,lpts, x, "DIF_Harvey_mod2p_iterative3x3"); // check 4x1 SSE //DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative4x1_SSE,lpts, x, "DIF_Harvey_mod2p_iterative4x1_SSE"); // check 4x2 SSE //DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative4x2_SSE,lpts, x, "DIF_Harvey_mod2p_iterative4x2_SSE"); #ifdef __LINBOX_HAVE_AVX2_INSTRUCTIONS // check 8x1 AVX //DFT_performance(MulDom,&FFT_t::FFT_DIF_Harvey_mod2p_iterative8x1_AVX,lpts, x, "DIF_Harvey_mod2p_iterative8x1_AVX"); #endif // check Harvey SSE DFT_performance(MulDom,&FFT_t::template FFT_DIF,lpts, x, "DIF_Harvey_SSE"); cout<<"---------------------------------------------------------------"<,lpts, x, "DIT_Harvey_SSE"); cout<3){ cerr<<"usage : prime_bitsize , (seed)"<2)?atoi(argv[2]):time(NULL)); integer prime; RandomFFTPrime::seeding (seed); if (!RandomFFTPrime::randomPrime (prime, 1< since the implementation will convert to uint32 // and use the uint32 implementation Givaro::Modular Fi(p); cout << "Test : " << ((check_DIF(Fi,k,seed))?"OK":"KO!!!!") << endl; bench_DIF(Fi,k,seed); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/bench-matpoly-mult.C000066400000000000000000000374701347646240000205000ustar00rootroot00000000000000/* * Copyright (C) 2013 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #ifdef VERB #define KARA_TIMING #define FFT_PROFILE #endif #ifdef VERBINT #define INTFFT_TIMING #endif #ifdef HAVE_OPENMP #include #define GIVARO_USES_OMP #include #define gettime realtime typedef Givaro::OMPTimer myTimer; #else #include #define gettime usertime typedef Givaro::Timer myTimer; #endif #include #include #include using namespace std; #include #include #include //#include #include #include #include #include #include #include #include #ifdef BENCH_FLINT #define __GMP_BITS_PER_MP_LIMB 64 extern "C" { #include "flint/longlong.h" #include "flint/ulong_extras.h" #include "flint/nmod_poly_mat.h" #include "flint/flint.h" } #endif #ifdef BENCH_MMX #include #include #include #include #include #include #include #define Prime_field(C, n, p) \ modular >, modular_fixed > #endif using namespace LinBox; template void randomVect (Rand& r, Vect& v) { size_t s = v.size(); for (size_t i = 0; i < s; ++i) r.random(v[i]); } template void randomMat (Rand& r, Mat& m) { for (size_t i = 0; i < m.rowdim(); ++i) for (size_t j = 0; j < m.coldim(); ++j) r.random(m.refEntry(i,j)); } template bool operator==(const MatPol& A, const MatPol& B){ MatrixDomain MD(A.field()); if (A.size()!=B.size()|| A.rowdim()!= B.rowdim() || A.coldim()!=B.coldim()) return false; size_t i=0; while (i struct congruent{ T p; congruent(T _p): p(_p){} bool operator()(T a, T b) const { return (a%p) == (b%p);} }; template void MATPOLMUL_sanity_check(MULDOM& MulDom, const MatPol& C, const MatPol& A, const MatPol& B, std::string msg){ MatPol CC(C.field(),C.rowdim(),C.coldim(),C.size()); //auto Functor = bind(f, &MulDom, ref(CC),A,B); //Functor(); #ifdef FFT_PROFILER FFT_PROF_LEVEL=3; #endif MulDom.mul(CC,A,B); msg+=" "; msg.resize(45,'.'); cout<<" Checking ... "< void check_matpol_mul(const Field& fld, RandIter& Gen, size_t n, size_t d) { typedef PolynomialMatrix MatrixP; typedef PolynomialMatrix PMatrix; // product m*n n*m size_t m=n; PMatrix A(fld,m,n,d),B(fld,n,m,d),C(fld,m,m,2*d-1); MatrixP AA(fld,m,n,d),BB(fld,n,m,d),CC(fld,m,m,2*d-1); // Generate random matrix of polynomial for (size_t i=0;i Naive; typedef PolynomialMatrixKaraDomain Kara; typedef PolynomialMatrixFFTMulDomain FFT; Naive NMD(fld); Kara PMKD(fld); FFT PMFFT(fld); // compute the correct result for (size_t r=0;r void MATPOLMUL_performance(MULDOM& MulDom, const MatPol& A, const MatPol& B, double Miops, std::string msg){ MatPol C(A.field(),A.rowdim(),A.coldim(),A.size()+B.size()-1); //auto Functor = bind(f, &MulDom, ref(C),A,B); Timer chrono; double time; size_t ct,minct=4; size_t prec=6; ct = 0; chrono.start(); while (chrono.realElapsedTime() < 1){ for (size_t k=0;k void bench_matpol_mul(const Field& fld, RandIter& Gen, size_t n, size_t d) { typedef PolynomialMatrix MatrixP; MatrixP A(fld,n,n,d),B(fld,n,n,d),C(fld,n,n,2*d-1); // Generate random matrix of polynomial for (size_t i=0;i Naive; typedef PolynomialMatrixKaraDomain Kara; typedef PolynomialMatrixFFTMulDomain FFT; Naive NMD(fld); Kara PMKD(fld); FFT PMFFT(fld); size_t mmul=2*n*n*n; size_t madd=n*n; size_t kara=pow((double)d, log(3.)/log(2.)); //size_t fft= 17 *d *log(2.*d)/log(2.); size_t costNaive= mmul*d*d + madd*(d-1)*(d-1); size_t costKara = mmul*kara+ 6*madd*kara; //size_t costFFT = mmul*2*d + 3*madd*fft; #ifdef FFT_PROFILER FFT_PROF_LEVEL=3; #endif // bench naive MATPOLMUL_performance(NMD,A,B,costNaive, "Naive Multiplication"); // bench karatsuba MATPOLMUL_performance(PMKD,A,B,costKara, "Karatsuba Multiplication"); // bench fft //MATPOLMUL_performance(PMFFT,A,B,costFFT, "FFT Multiplication"); Timer chrono; #ifdef BENCH_FLINT nmod_poly_mat_t AA,BB,CC; nmod_poly_mat_init(AA,n,n,(uint64_t)fld.cardinality()); nmod_poly_mat_init(BB,n,n,(uint64_t)fld.cardinality()); nmod_poly_mat_init(CC,n,n,(uint64_t)fld.cardinality()); flint_rand_t state; flint_randinit(state); nmod_poly_mat_randtest(AA,state,d); nmod_poly_mat_randtest(BB,state,d); cout<<"-----------------------"< void profile_matpol_mulfft(const Field& fld, RandIter& Gen, size_t n, size_t d) { typedef PolynomialMatrix MatrixP; MatrixP A(fld,n,n,d),B(fld,n,n,d),C(fld,n,n,2*d-1); // Generate random matrix of polynomial for (size_t i=0;i FFT; FFT PMFFT(fld); myTimer chrono; //size_t mmul=2*n*n*n; //size_t madd=n*n; //size_t fft= 17 *d *log(2.*d)/log(2.); //size_t costFFT = mmul*2*d + 3*madd*fft; size_t count=0; chrono.start(); do { PMFFT.mul(C,A,B); count++; } while (false);//count<20 && chrono.userElapsedTime()<1); //cout<<"FFT Multiplication total: "< > MOD; // typedef mmx::modulus MOD; // typedef mmx::modular COEFF; // MOD M((uint64_t)fld.cardinality()); // COEFF::set_modulus(M); typedef mmx::modular >, mmx::modular_fixed> COEFF; //mmx::mmout <<"\n MMX mod :"<< COEFF::get_modulus()<<"\n"; typedef mmx::polynomial_tft PV; typedef mmx::matrix_tft MV; typedef mmx::polynomial POLY; typedef mmx::matrix MATRIX; MATRIX AAA(1,n,n), BBB(1,n,n), CCC(1,n,n); for (mmx::nat i=0; i vA,vB; for(size_t h=0;h void profile_matpol_mulkara(const Field& fld, RandIter& Gen, size_t n, size_t d) { typedef PolynomialMatrix MatrixP; MatrixP A(fld,n,n,d),B(fld,n,n,d),C(fld,n,n,2*d-1); // Generate random matrix of polynomial for (size_t i=0;i Kara; Kara PM(fld); Timer chrono; chrono.start(); PM.mul(C,A,B); size_t mmul=2*n*n*n; size_t madd=n*n; size_t kara=pow((double)d, log(3.)/log(2.)); size_t costKara = mmul*kara+ 6*madd*kara; cout<<"Kara Multiplication total: "< void profile_matpol_mul(const Field& fld, RandIter& Gen, size_t n, size_t d) { typedef PolynomialMatrix MatrixP; size_t k=n; size_t m=n; size_t d1=236113,d2=337846; if (d) d1=d2=d; MatrixP A(fld,m,n,d1),B(fld,n,k,d2),C(fld,m,k,d1+d2-1); // Generate random matrix of polynomial for (size_t i=0;i PolMatDom; PolMatDom PMD(fld); Timer chrono; chrono.start(); PMD.mul(C,A,B); cout<<"Polynomial MAtrix Multiplication : "< void runTest(const Field& F, size_t n, long b, long d, long seed, std::string test){ typename Field::RandIter G(F,b,seed); //typename Field::RandIter G(F,seed); if (test == "check"|| test == "all") check_matpol_mul(F,G,n,d); if (test == "bench" || test == "all") bench_matpol_mul(F,G,n,d); if (test == "fft") profile_matpol_mulfft(F,G,n,d); if (test == "longfft"){ size_t N[15]={16,16,16,16,16,16,16,16, 64,128,256,512,512,1024,2048}; size_t D[15]={64,128,256,512,1024,2048,4096,8192,1024,512,256,512,128, 64,32 }; for (size_t i=0;i<15;i++) profile_matpol_mulfft(F,G,N[i],D[i]); } if (test == "kara") profile_matpol_mulkara(F,G,n,d); if (test == "mul") profile_matpol_mul(F,G,n,d); } int main(int argc, char** argv){ static size_t n = 32; // matrix dimension static long b = 20; // entries bitsize static uint64_t d = 32; // matrix degree static bool z = false; // computer over Z[x] static bool fourier = false; // computer over Fp[x] with p a fourier prime static long seed = time(NULL); static std::string test ="all"; static Argument args[] = { { 'n', "-n N", "Set dimension of test matrices to NxN.", TYPE_INT, &n }, { 'd', "-d D", "Set degree of test matrices to D.", TYPE_INT, &d }, { 'b', "-b B", "Set bitsize of the matrix entries", TYPE_INT, &b }, { 'z', "-z y", "Perform the computation over Z[x]", TYPE_BOOL, &z}, { 's', "-s s", "Set the random seed to a specific value", TYPE_INT, &seed}, { 't', "-t t", "Choose the targeted test {all,check,bench,fft,kara,longfft}", TYPE_STR, &test}, { 'f', "-f f", "Choose a fourier prime when b<26 ", TYPE_BOOL, &fourier}, END_OF_ARGUMENTS }; parseArguments (argc, argv, args); if (z){ #ifdef FFT_PROFILER FFT_PROF_LEVEL=2; #endif cout<<"Computation over Z[x] "< F; runTest (F,n,b,d,seed,test); } else { if (b > 29){ #ifdef FFT_PROFILER FFT_PROF_LEVEL=2; #endif PrimeIterator Rd(b,seed); integer p= *Rd; Givaro::Modular F(p); //Givaro::Modular F(p); cout<<"Computation over Fp[x] with p= "< F((int32_t)p); Givaro::Modular F((int32_t)p); cout<<"Computation over Fp[x] with p= "< Rd(b,seed); //uint64_t dd=integer(d).bitsize()+1; integer p = *Rd; //Givaro::Modular F((int32_t)p); Givaro::Modular F((int32_t)p); cout<<"Computation over Fp[x] with p= "<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/bench-new-fft.C000066400000000000000000000264111347646240000173730ustar00rootroot00000000000000/* * Copyright (C) 2013 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #include #include #include #include #include using namespace std; #include "linbox/algorithms/polynomial-matrix/polynomial-fft-butterflies.h" #include "linbox/algorithms/polynomial-matrix/polynomial-fft-algorithms.h" #include "linbox/algorithms/polynomial-matrix/polynomial-fft-transform.h" #include "linbox/randiter/random-fftprime.h" #include "linbox/ring/modular.h" #include "fflas-ffpack/utils/align-allocator.h" using namespace LinBox; template void randomVect (Rand& r, Vect& v) { size_t s = v.size(); for (size_t i = 0; i < s; ++i) r.random(v[i]); } /********************************** ****** DFT CHECKING FUNCTION ***** *********************************/ template struct congruent{ T p; congruent(T _p): p(_p){} bool operator()(T a, T b) const { return ((uint64_t)a%(uint64_t)p) == ((uint64_t)b%(uint64_t)p);} }; template bool DFT_sanity_check(FFT& FFTDom, Funct f, const Vect& x, const Vect& y, string msg){ typedef typename FFT::Element Element ; Vect z(x); auto Functor = bind(f, &FFTDom, &z[0]); Functor(); msg+=" "; msg.resize(45,'.'); cout<<" Checking ... "<(FFTDom._p))?" done":" error")<(FFTDom._p)))){ // std::ostream_iterator out_it (std::cout,", "); // std::copy ( z.begin(), z.end(), out_it ); // std::cout< bool check_DIF(const Field& fld, size_t kmax, long seed) { typedef typename Field::Element Element; bool passed = true; for (size_t lpts = 1; lpts < kmax ; lpts++){ size_t pts = 1 << lpts; cout<<"********************************************************"< x(pts),y(pts); std::vector> x(pts),y(pts); // Generate random inputs typename Field::RandIter Gen(fld);//,fld.characteristic(),seed); randomVect(Gen,y); x=y; // FFT_transform MulDom(fld,lpts); // typedef FFT_transform FFT_t; FFT_init fft_init (fld, lpts); FFT_algorithms > fft_algo_nosimd (fft_init); // using FFT_a = FFT_algorithms >; /* CHECK DIF */ // compute the correct result fft_algo_nosimd.DIF(y.data()); #if defined(__FFLASFFPACK_HAVE_SSE4_1_INSTRUCTIONS) // check FFT_algorithms::DIF if (Simd128::vect_size == 4 || Simd128::vect_size == 8){ FFT_algorithms > fft_algo_simd128 (fft_init); using FFT_a128 = FFT_algorithms >; passed &= DFT_sanity_check(fft_algo_simd128,&FFT_a128::DIF,x,y, "FFT_algorithms::DIF"); } #endif #if defined(__FFLASFFPACK_HAVE_AVX2_INSTRUCTIONS) // check FFT_algorithms::DIF if (Simd256::vect_size == 4 || Simd256::vect_size == 8){ FFT_algorithms > fft_algo_simd256 (fft_init); using FFT_a256 = FFT_algorithms >; passed &= DFT_sanity_check(fft_algo_simd256,&FFT_a256::DIF,x,y, "FFT_algorithms::DIF"); } #endif cout<<"---------------------------------------------------------------"<::vect_size == 4 || Simd128::vect_size == 8){ FFT_algorithms > fft_algo_simd128 (fft_init); using FFT_a128 = FFT_algorithms >; passed &= DFT_sanity_check(fft_algo_simd128,&FFT_a128::DIT,x,y, "FFT_algorithms::DIT"); } #endif #if defined(__FFLASFFPACK_HAVE_AVX2_INSTRUCTIONS) // check FFT_algorithms::DIT if (Simd256::vect_size == 4 || Simd256::vect_size == 8){ FFT_algorithms > fft_algo_simd256 (fft_init); using FFT_a256 = FFT_algorithms >; passed &= DFT_sanity_check(fft_algo_simd256,&FFT_a256::DIT,x,y, "FFT_algorithms::DIT"); } #endif cout< void DFT_performance(FFT& FFTDom, Funct f, size_t lpts, const Vect& x, string msg){ Vect z(x); auto Functor = bind(f, &FFTDom, &z[0]); Timer chrono; double time; double Miops; size_t ct,minct=4; ct = 0; chrono.start(); while (chrono.realElapsedTime() < 1){ for (size_t k=0;k void bench_DIF(const Field& fld, size_t kmax, long seed) { typedef typename Field::Element Element; for (size_t lpts = 5; lpts < kmax ; lpts++){ uint64_t pts = 1UL << lpts; cout<<"*********************************************************"< x(pts); // Generate random inputs typename Field::RandIter Gen(fld,seed); randomVect(Gen,x); FFT_init fft_init (fld, lpts); FFT_algorithms > fft_algo_nosimd (fft_init); using FFT_a = FFT_algorithms >; DFT_performance(fft_algo_nosimd,&FFT_a::DIF, lpts, x, "FFT_algorithms::DIF"); #if defined(__FFLASFFPACK_HAVE_SSE4_1_INSTRUCTIONS) if (Simd128::vect_size == 4 || Simd128::vect_size == 8){ FFT_algorithms > fft_algo_simd128 (fft_init); using FFT_a128 = FFT_algorithms >; DFT_performance(fft_algo_simd128,&FFT_a128::DIF, lpts, x, "FFT_algorithms::DIF"); } #endif #if defined(__FFLASFFPACK_HAVE_AVX2_INSTRUCTIONS) if (Simd256::vect_size == 4 || Simd256::vect_size == 8){ FFT_algorithms > fft_algo_simd256 (fft_init); using FFT_a256 = FFT_algorithms >; DFT_performance(fft_algo_simd256,&FFT_a256::DIF, lpts, x, "FFT_algorithms::DIF"); } #endif cout<<"---------------------------------------------------------------"<::DIT"); #if defined(__FFLASFFPACK_HAVE_SSE4_1_INSTRUCTIONS) if (Simd128::vect_size == 4 || Simd128::vect_size == 8){ FFT_algorithms > fft_algo_simd128 (fft_init); using FFT_a128 = FFT_algorithms >; DFT_performance(fft_algo_simd128,&FFT_a128::DIT, lpts, x, "FFT_algorithms::DIT"); } #endif #if defined(__FFLASFFPACK_HAVE_AVX2_INSTRUCTIONS) if (Simd256::vect_size == 4 || Simd256::vect_size == 8){ FFT_algorithms > fft_algo_simd256 (fft_init); using FFT_a256 = FFT_algorithms >; DFT_performance(fft_algo_simd256,&FFT_a256::DIT, lpts, x, "FFT_algorithms::DIT"); } #endif cout<3){ // cerr<<"usage : prime_bitsize , (seed)"<2)?atoi(argv[2]):time(NULL)); size_t l2n = 20; size_t k = l2n; uint32_t p; integer prime; //Modular // bits = 22; // Rd = RandomFFTPrime (1< Fd(p); // cout << "Test Modular: " << ((check_DIF(Fd,k,seed))?"OK":"KO!!!!") << endl; /* #ifdef __FFLASFFPACK_HAVE_INT128 //Modular bits = 59; Rd = RandomFFTPrime (uint64_t(1)< Fi64(p); cout << "Test Modular : " << ((check_DIF(Fi64,k,seed))?"OK":"KO!!!!") << endl; #endif */ //Modular bits = 27; RandomFFTPrime::seeding (seed); if (!RandomFFTPrime::randomPrime (prime, 1< Fi32(p); Fi32.write(cout)<: " << ((check_DIF(Fi32,k,seed))?"OK":"KO!!!!") << endl; // bench_DIF(Fi32,k,seed); //Modular bits = 11; k = l2n = 7; if (!RandomFFTPrime::randomPrime (prime, 1< Fi16(p); Fi16.write(cout)< : " << ((check_DIF(Fi16,k,seed))?"OK":"KO!!!!") << endl; // Bench FFT // cout << "Test : " << ((check_DIF(Fi16,k,seed))?"OK":"KO!!!!") << endl; // cout << "Test : " << ((check_DIF(Fd,k,seed))?"OK":"KO!!!!") << endl; // bench_DIF(Fi,k,seed); // bench_DIF(Fd,k,seed); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/bigmat.C000066400000000000000000000037651347646240000162220ustar00rootroot00000000000000/* * examples/bigmat.C * * Copyright (C) 2007, 2010 B Youse, D. Saunders * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/bigmat.C * @example examples/bigmat.C * \ingroup examples * @brief Outputs a big and very sparse matrix. * * let C be the cyclic shift matrix with 1 on the 1,n position and along the first subdiagonal. * * This matrix is \f$2C + 3I\f$. It has 2 nonzero entries per row and per column. * It is an \f$ n \times n\f$ matrix whose determinant is considerably less than the * Hadamard bound (but is large -- 3^n +- 2^n). * */ #include #include using namespace std; int main(int argc, char* argv[]) { if (argc != 2 ) { cerr << "Usage: bigmat , where is the size you like." << endl; return -1; } int n = atoi(argv[1]); cout << n << " " << n << " M" << endl; cout << "1 1 3" << endl; cout << "1 " << n << " 2" << endl; for (int i = 2; i <=n; ++i) { cout << i << " " << i-1 << " " << 2 << endl; cout << i << " " << i << " " << 3 << endl; } cout << "0 0 0" << endl; return 0 ; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/000077500000000000000000000000001347646240000164255ustar00rootroot00000000000000linbox-1.6.3/examples/blackbox/Makefile.am000066400000000000000000000027501347646240000204650ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # This file is part of LinBox # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ INCLUDES=-I$(top_srcdir) EXTRA_PROGRAMS = smith example ex-mat0 load-det load-minpoly load-symmetrize random-rank #zeroone-rank AM_CPPFLAGS=-DLinBoxSrcOnly $(NTL_CFLAGS) -DEXAMPLE_DATADIR=\"$(srcdir)/data\" LDADD = $(NTL_LIBS) -lgivaro -lclapack -lcblas -latlas $(LDFLAGS) example_SOURCES = example.C smith_SOURCES = smith.C load_det_SOURCES = load-det.C load_minpoly_SOURCES = load-minpoly.C load_symmetrize_SOURCES = load-symmetrize.C random_rank_SOURCES = random-rank.C #zeroone_rank_SOURCES = zeroone-rank.C ex_mat0_SOURCES = ex-mat0.C # general %:%.o $(CXXLINK) $(LDFLAGS) $(OBJECTS) $(LDADD) $(LIBS) linbox-1.6.3/examples/blackbox/ex-mat0.C000066400000000000000000000045411347646240000200100ustar00rootroot00000000000000/* * examples/blackbox/example.C * * Copyright (C) 2003 William J. Turner * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/ex-mat0.C * @author William J. Turner for the LinBox group * * @memo usage: ex-mat0 in-file out-file * * @doc * Run tests on Wiedemann algorithm for solving nonhomogeneous linear * equations * * FIXME What does it do? I think this may be a remnant, has evolved * into one of the other examples. delete it? */ //@{ #include #include #include #include #include #include "linbox/field/modular.h" //#include "linbox/blackbox/sparse0.h" #include "linbox/blackbox/sparse1.h" using namespace LinBox; using namespace std; int main(int argc, char* argv[]) { if (argc != 3) { cerr << "usage: " << argv[0] << " in_file out_file" << endl; return -1; } char* in_file = argv[1]; char* out_file = argv[2]; typedef Givaro::Modular Field; typedef Field::Element Element; typedef Field::RandIter RandIter; typedef std::list< pair > Row; typedef std::vector Vector; Field K(7); ofstream out_stream(out_file); ifstream in_stream(in_file); // SparseMatrix A(K,4,4); // A.read(in_stream); // A.write(out_stream); SparseBlackBoxDom< Field > A(K) ; A.read(in_stream); A.write(out_stream); } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/example.C000066400000000000000000000074621347646240000201750ustar00rootroot00000000000000/* * examples/blackbox/example.C * * Copyright (C) 2001, 2002, 2010 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/example.C * * @author Bradford Hovinen * @memo * Simple example on Linbox use. Demonstrates loading and application of * blackbox matrix to a vector and computation of the minimal polynomial. * @doc * FIXME what is shown different that in other minpoly example? * */ //@{ #include "linbox/linbox-config.h" #include #include #include // Field we are working with //#include "linbox/field/modular.h" #include "linbox/field/givaro-gfq.h" // Black box classes we are going to work with #include "linbox/matrix/sparse-matrix.h" // Minimal polynomial algorithm #include "linbox/solutions/minpoly.h" #include "linbox/vector/vector-domain.h" //using namespace LinBox; using namespace std; // This is the field we are going to be working with - integers mod q //typedef Givaro::Modular Field; typedef LinBox::Givaro::GFq Field; // Some typedefs to make the type names less daunting typedef vector Vector; typedef vector Polynomial; typedef vector > Row; typedef LinBox::SparseMatrix ::SparseFormat > Blackbox; // Constants: we are working with an n x n matrix over GF(q) const int n = 10; const int q = 101; void printVector (const Field &F, const Vector &v) { int i; cout << '('; for (i = 0; i < v.size (); i++) { F.write (cout, v[i]); if (i < v.size () - 1) cout << ", "; } cout << ')' << endl; } void printPolynomial (const Field &F, const Polynomial &v) { int i; for (i = v.size () - 1; i >= 0; i--) { F.write (cout, v[i]); if (i > 0) cout << " x^" << i << " + "; } cout << endl; } void makeTestVector (const Field &F, const Blackbox &A, Vector &v) { int i; v.resize (A.coldim ()); for (i = 0; i < v.size (); i++) F.init (v[i], i); } void testApply (const Field &F, const Blackbox &A, const Vector &v) { Vector w (A.coldim ()); cout << "v = "; printVector (F, v); A.apply (w, v); cout << "Av = "; printVector (F, w); cout << endl; } void testMinpoly (const Field &F, const Blackbox &A) { Polynomial m_A; LinBox::minpoly (m_A, A, F); cout << "Minimal polynomial m_A of A is: "; printPolynomial (F, m_A); cout << endl; } /// no command line args int main (int argc, char **argv) { srand (time (NULL)); // Construct the field GF(q) and a vector over GF(q)^n to // which to apply the matrix //Field F (q); Field F (2, 15); Vector v (n); // Construct and load the sparse test matrix Blackbox A (F, n, n); //ifstream input (EXAMPLE_DATADIR "/test.matrix"); ifstream input ("mat.txt"); A.read (input); // Run tests makeTestVector (F, A, v); testApply (F, A, v); testMinpoly (F, A); return 0; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/load-det.C000066400000000000000000000047751347646240000202370ustar00rootroot00000000000000/* * examples/blackbox/load-det.C * * Copyright (C) 2001, 2002, 2010 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/load-det.C * * @author Bradford Hovinen * * @memo * Small program that loads and computes the determinant of a matrix whose * filename is given on the command line. */ //@{ #include "linbox/linbox-config.h" #include #include #include "linbox/field/modular.h" #include "linbox/solutions/det.h" using namespace LinBox; using namespace std; // Select our field: integers modulo a word-size (max. 31-bit) modulus typedef Givaro::Modular Field; // Select our black box: a sparse matrix over the above-mentioned field with // default application vector and row representation types typedef DenseMatrix Blackbox; // Constants: we are working with a matrix over GF(q) /// load-det matrix-file int main (int argc, char **argv) { Field::Element det_A; int q = 65521U; if (argc < 2 || argc > 3) { cerr << "Usage: load-det [

]" << endl; return -1; } commentator().setMaxDepth (2); commentator().setReportStream (cout); if (argc == 3) q = atoi(argv[2]); Field F (q); Blackbox A (F); ifstream input (argv[1]); if (!input) { cerr << "Error: Cannot load matrix " << argv[1] << endl; return -1; } A.read (input); // size is determined by the input. cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; det (det_A, A, F); cout << "Determinant is " << det_A << " mod " << q << endl; return 0; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/load-minpoly.C000066400000000000000000000054061347646240000211420ustar00rootroot00000000000000/* * examples/blackbox/load-minpoly.C * * Copyright (C) 2001, 2002 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/load-minpoly.C * * @author Bradford Hovinen * * @memo * Small program that loads and computes the minimal polynomial of a matrix * whose filename is given on the command line. */ //@{ #include "linbox/linbox-config.h" #include #include #include #include "linbox/field/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/minpoly.h" using namespace LinBox; using namespace std; // Select our field: integers modulo a word-size (max. 31-bit) modulus typedef Givaro::Modular Field; // Select our black box: a sparse matrix over the above-mentioned field with // default application vector and row representation types typedef SparseMatrix Blackbox; // We are using dense vectors to represent polynomials typedef Vector::Dense Polynomial; // Constants: we are working with an n x n matrix over GF(q) const int n = 1000; const int q = 65521U; void printPolynomial (const Field &F, const Polynomial &v) { int i; for (i = v.size () - 1; i >= 0; i--) { F.write (cout, v[i]); if (i > 0) cout << " x^" << i << " + "; } cout << endl; } /// load-minpoly matrix-file int main (int argc, char **argv) { Polynomial m_A; if (argc < 2) { cerr << "Usage: load-minpoly " << endl; return -1; } commentator().setMaxDepth (2); commentator().setReportStream (cout); Field F (q); Blackbox A (F, n, n); ifstream input (argv[1]); if (!input) { cerr << "Error: Cannot load matrix " << argv[1] << endl; return -1; } A.read (input); minpoly (m_A, A, F); cout << "Minimal polynomial is "; printPolynomial (F, m_A); return 0; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/load-symmetrize.C000066400000000000000000000053121347646240000216570ustar00rootroot00000000000000/* * examples/blackbox/load-sylletrize.C * * Copyright (C) 2001, 2002, 2010 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/load-symmetrize.C * * @author Bradford Hovinen * @memo * Small program that loads and computes the minimal polynomial of A^T A, where * A is a matrix whose filename is given on the command line */ //@{ #include "linbox/linbox-config.h" #include #include #include #include "linbox/field/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/algorithms/blackbox-container-symmetrize.h" #include "linbox/algorithms/massey-domain.h" using namespace LinBox; using namespace std; typedef Givaro::Modular Field; typedef vector Vector; typedef vector Polynomial; typedef SparseMatrix ::SparseFormat > Blackbox; // Constants: we are working with an n x n matrix over GF(q) const int n = 1000; const int q = 65521U; /// load-symmetrize matrix-file int main (int argc, char **argv) { if (argc < 2) { cerr << "Usage: load-symmetrize " << endl; return -1; } commentator().setMaxDepth (2); commentator().setReportStream (cout); Field F (q); Blackbox A (F, n, n); ifstream input (argv[1]); if (!input) { cerr << "Error: Cannot load matrix " << argv[1] << endl; return -1; } A.read (input); unsigned long deg; std::vector P; BlackboxContainerSymmetrize TF (&A, F); MasseyDomain< Field, BlackboxContainerSymmetrize > WD (&TF, 20); WD.pseudo_minpoly (P, deg); cout << "Determinant is " << P[0] << endl; cout << "Degree is " << P.size () - 1 << endl; return 0; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/mat.txt000066400000000000000000000000611347646240000177440ustar00rootroot000000000000004 4 M 1 1 1 1 2 2 1 3 8 1 3 9 2 2 3 3 0 9 -1 linbox-1.6.3/examples/blackbox/mat2.txt000066400000000000000000000000411347646240000200240ustar00rootroot000000000000002 2 M 0 0 1 0 1 2 1 0 3 1 1 4 -1 linbox-1.6.3/examples/blackbox/random-rank.C000066400000000000000000000066301347646240000207470ustar00rootroot00000000000000/* * examples/blackbox/random-rank.C * * Copyright (C) 2001, 2002, 2010 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @name examples/blackbox/random-rank.C * * @author Bradford Hovinen * * @memo rank by several algorithms over large and small fields. * @doc FIXME what's it do more precisely? */ //@{ #include "linbox/linbox-config.h" #include #include #include #include "linbox/field/modular.h" #include "linbox/field/givaro-gfq.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/rank.h" #include "linbox/solutions/methods.h" #include "linbox/vector/stream.h" using namespace LinBox; using namespace std; // Select our field: integers modulo a word-size (max. 31-bit) modulus typedef Givaro::Modular Field; typedef Givaro::GFq FieldExtn; // The Gaussian elimiation code only works with sparse sequence vectors, so we'll use those typedef Vector::SparseSeq Row; typedef Vector::SparseSeq RowE; // Select our black box: a sparse matrix over the above-mentioned field with // default application vector and row representation types typedef SparseMatrix::SparseFormat> Blackbox; typedef SparseMatrix::SparseFormat> BlackboxE; // Constants: we are working with an n x n matrix over GF(q) const int n = 1000; //const int q = 65521U; const int q = 2U; const double p = 0.026; /// no command line args int main (int argc, char **argv) { size_t rank_A_Wiedemann, rank_A_elimination; commentator().setMaxDepth (2); commentator().setReportStream (cout); Field F (q); Field::RandIter gen(F); FieldExtn E (q, 10); FieldExtn::RandIter Egen(E); RandomSparseStream A_stream (F, gen, p, n, n); RandomSparseStream B_stream (E, Egen, p, n, n); Blackbox A (F, A_stream); BlackboxE B (E, B_stream); rank (rank_A_Wiedemann, A, F, MethodTrait::Wiedemann ()); rank (rank_A_elimination, A, F, MethodTrait::Elimination ()); cout << "Rank by Wiedemann is " << rank_A_Wiedemann << endl; cout << "Rank by Elimination is " << rank_A_elimination << endl; rank (rank_A_Wiedemann, B, E, MethodTrait::Wiedemann ()); rank (rank_A_elimination, B, E, MethodTrait::Elimination ()); cout << "Over Extension Field Rank by Wiedemann is " << rank_A_Wiedemann << endl; cout << "Over Extension Field Rank by Elimination is " << rank_A_elimination << endl; return 0; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blackbox/smith.C000066400000000000000000000276671347646240000176770ustar00rootroot00000000000000/* Copyright (C) LinBox * Written by bds, zw * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/blackbox/smith.C \brief mod m Smith form by elmination \author bds & zw */ #include #include #include #include using namespace std; #include "linbox/util/timer.h" #include "linbox/field/unparametric.h" #include "linbox/field/local2_32.h" //#include "linbox/field/PIR-modular-int32.h" #include "linbox/algorithms/2local-smith.h" #include "linbox/algorithms/local-smith.h" #include "linbox/algorithms/iliopoulos-elimination.h" using namespace LinBox; #ifndef BIG #include "linbox/field/PIR-modular-int32.h" typedef PIRModular PIR; #else #include "linbox/field/PIR-ntl-ZZ_p.h" typedef PIR_ntl_ZZ_p PIR; #endif template void Mat(DenseMatrix& M, PIR& R, int n, string src, string file, string format); template void distinct (I1 a, I1 b, Lp& c); template void display(I b, I e); int main(int argc, char* argv[]) { if (argc < 5) { cout << "usage: " << argv[0] << " alg m n source format \n" << endl; cout << "alg = `adaptive', `ilio', `local', or `2local', \n" << "m is modulus (ignored by 2local, adaptive), " << "n is matrix order, \n" << "source is `random', `random-rough', `fib', `tref', or a filename \n" << "format is `dense' or `sparse' (if matrix from a file)\n" << "compile with -DBIG if you want big integers used.\n"; return 0; } string algo = argv[1]; int m = atoi(argv[2]); int n = atoi(argv[3]); string src = argv[4]; string file = src; string format = (argc >= 6 ? argv[5] : ""); UserTimer T; if (algo == "adaptive") { cerr << "adaptive call not implemented yet" << endl; } if (algo == "ilio") { PIR R(m); DenseMatrix M(R); Mat(M, R, n, src, file, format); T.start(); IliopoulosElimination::smithIn (M); T.stop(); typedef list< PIR::Element > List; List L; for (size_t i = 0; i < M.rowdim(); ++i) L.push_back(M[i][i]); list > p; distinct(L.begin(), L.end(), p); cout << "#"; display(p.begin(), p.end()); cout << "# ilio, PIR-Modular-int32_t(" << m << "), n = " << n << endl; cout << "T" << n << "ilio" << m << " := "; } else if (algo == "local") { // m must be a prime power PIR R(m); DenseMatrix M(R); Mat(M, R, n, src, file, format); typedef list< PIR::Element > List; List L; LocalSmith SmithForm; T.start(); SmithForm( L, M, R ); T.stop(); list > p; distinct(L.begin(), L.end(), p); cout << "#"; display(p.begin(), p.end()); cout << "# local, PIR-Modular-int32_t(" << m << "), n = " << n << endl; cout << "T" << n << "local" << m << " := "; } else if (algo == "2local") { Local2_32 R; DenseMatrix M(R); Mat(M, R, n, src, file, format); typedef list< Local2_32::Element > List; List L; LocalSmith SmithForm; T.start(); SmithForm( L, M, R ); T.stop(); list > p; distinct(L.begin(), L.end(), p); cout << "#"; display(p.begin(), p.end()); cout << "# 2local, Local2_32, n = " << n << endl; cout << "T" << n << "local2_32 := "; } else { printf ("Unknown algorithms\n"); exit (-1); } T.print(cout); cout << ";" << endl; return 0 ; } /** Output matrix is determined by src which may be: "random-rough" This mat will have s, near sqrt(n), distinct invariant factors, each repeated twice), involving the s primes 101, 103, ... "random" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... 999, 0, 1, 2, ...). "fib" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... fib(k)), where k is about sqrt(n). The basic matrix is block diagonal with i-th block of order i and being a tridiagonal {-1,0,1} matrix whose snf = diag(i-1 1's, fib(i)), where fib(1) = 1, fib(2) = 2. But note that, depending on n, the last block may be truncated, thus repeating an earlier fibonacci number. "file" (or any other string) mat read from named file with format "sparse" or "dense". Also "tref" and file with format "kdense" */ template void Mat(DenseMatrix& M, PIR& R, int n, string src, string file, string format) { if (src == "random-rough") RandomRoughMat(M, R, n); else if (src == "random") RandomFromDiagMat(M, R, n); else if (src == "fib") RandomFibMat(M, R, n); else if (src == "tref") TrefMat(M, R, n); else // from file { int rdim, cdim; std::ifstream in (file.c_str(), std::ios::in); if (! in) { cerr << "error: unable to open file" << endl; exit(-1); } in >> rdim >> cdim; M. resize (rdim, cdim); if (format == "dense" ) { int val; for (int i = 0; i < rdim; ++ i) for ( int j = 0; j < cdim; ++ j) { in >> val; R. init (M[i][j], val); } } else if (format == "sparse") { int i, j; char mark; in >> mark; LinBox::integer val; do { in >> i >> j; in. ignore (1); in >> val; if ( i == 0) break; R. init (M[i-1][j-1], val); } while (true); } //Krattenthaler's q^e matrices, given by exponent else if (format == "kdense") KratMat(M, R, n, in); else { cout << "Format: " << format << " Unknown\n"; exit (-1); } } /*show some entries for (int k = 0; k < 10; ++k) cout << M.getEntry(0,k) << " " << M.getEntry(M.rowdim()-1, M.coldim()-1 - k) << endl; cout << endl << M.rowdim() << " " << M.coldim() << endl; */ /* some row ops and some col ops */ } // Mat // This mat will have s, near sqrt(n), distinct invariant factors, // each repeated twice), involving the s primes 101, 103, ... template void RandomRoughMat(DenseMatrix& M, PIR& R, int n) { M.resize(n, n, R.zero); if (n > 10000) {cerr << "n too big" << endl; exit(-1);} int jth_factor[130] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733}; for (int j= 0, i = 0 ; i < n; ++j) { typename PIR::Element v; R.init(v, jth_factor[25+j]); for (int k = j ; k > 0 && i < n ; --k) { M[i][i] = v; ++i; if (i < n) {M[i][i] = v; ++i;} } } scramble(M); } // This mat will have the same nontrivial invariant factors as // diag(1,2,3,5,8, ... 999, 0, 1, 2, ...). template void RandomFromDiagMat(DenseMatrix& M, PIR& R, int n) { M.resize(n, n, R.zero); for (int i= 0 ; i < n; ++i) R.init(M[i][i], i % 1000 + 1); scramble(M); } // This mat will have the same nontrivial invariant factors as // diag(1,2,3,5,8, ... fib(k)), where k is about sqrt(n). // The basic matrix is block diagonal with i-th block of order i and // being a tridiagonal {-1,0,1} matrix whose snf = diag(i-1 1's, fib(i)), // where fib(1) = 1, fib(2) = 2. But note that, depending on n, // the last block may be truncated, thus repeating an earlier fibonacci number. template void RandomFibMat(DenseMatrix& M, PIR& R, int n) { M.resize(n, n, R.zero); typename PIR::Element pmone; R.assign(pmone, R.one); for (int i= 0 ; i < n; ++i) M[i][i] = R.one; int j = 1, k = 0; for (int i= 0 ; i < n-1; ++i) { if ( i == k) { M[i][i+1] = R.zero; k += ++j; } else { M[i][i+1] = pmone; R.negin(pmone); } R.neg(M[i+1][i], M[i][i+1]); } scramble(M); } template < class Ring > void scramble(DenseMatrix& M) { Ring R = M.field(); int N,n = M.rowdim(); // number of random basic row and col ops. N = n; for (int k = 0; k < N; ++k) { int i = rand()%M.rowdim(); int j = rand()%M.coldim(); if (i == j) continue; // M*i += alpha M*j and Mi* += beta Mj //int a = rand()%2; int a = 0; for (size_t l = 0; l < M.rowdim(); ++l) { if (a) R.subin(M[l][i], M[l][j]); else R.addin(M[l][i], M[l][j]); //K.axpy(c, M.getEntry(l, i), x, M.getEntry(l, j)); //M.setEntry(l, i, c); } //a = rand()%2; for (size_t l = 0; l < M.coldim(); ++l) { if (a) R.subin(M[i][l], M[j][l]); else R.addin(M[i][l], M[j][l]); } } std::ofstream out("matrix", std::ios::out); //M. write(std::cout); out << n << " " << n << "\n"; for (int i = 0; i < n; ++ i) { for ( int j = 0; j < n; ++ j) { R. write(out, M[i][j]); out << " "; } out << "\n"; } //} } ////////////////////////////////// // special mats tref and krat // Trefethen's challenge #7 mat (primes on diag, 1's on 2^e bands). template void TrefMat(DenseMatrix& M, PIR& R, int n) { M.resize(n, n, R.zero); std::vector power2; int i = 1; do { power2. push_back(i); i *= 2; } while (i < n); std::ifstream in ("prime", std::ios::in); for ( i = 0; i < n; ++ i) in >> M[i][i]; std::vector::iterator p; for ( i = 0; i < n; ++ i) { for ( p = power2. begin(); (p != power2. end()) && (*p <= i); ++ p) M[i][i - *p] = 1; for ( p = power2. begin(); (p != power2. end()) && (*p < n - i); ++ p) M[i][i + *p] = 1; } } //// end tref /////// begin krat ///////////////////////////// struct pwrlist { vector m; pwrlist(integer q) { m.push_back(1); m.push_back(q); //cout << "pwrlist " << m[0] << " " << m[1] << endl; } integer operator[](int e) { for (int i = m.size(); i <= e; ++i) m.push_back(m[1]*m[i-1]); return m[e]; } }; // Read "1" or "q" or "q^e", for some (small) exponent e. // Return value of the power of q at q = _q. template num& qread(num& val, pwrlist& M, istream& in) { char c; in >> c; // next nonwhitespace if (c == '0') return val = 0; if (c == '1') return val = 1; if (c != 'p' && c != 'q') { cout << "exiting due to unknown char " << c << endl; exit(-1);} in.get(c); if (c !='^') {in.putback(c); return val = M[1];} else { int expt; in >> expt; return val = M[expt]; }; } template void KratMat(DenseMatrix& M, PIR& R, int q, istream& in) { pwrlist pwrs(q); for (int i = 0; i < M.rowdim(); ++ i) for ( int j = 0; j < M.coldim(); ++ j) { int /* e,*/ val; qread(val, pwrs, in); R. init (M[i][j], val); } } ///// end krat //////////////////////////// template void distinct (I1 a, I1 b, Lp& c) { typename I1::value_type e; size_t count = 0; if (a != b) {e = *a; ++a; count = 1;} else return; while (a != b) { if (*a == e) ++count; else { c.push_back(typename Lp::value_type(e, count)); e = *a; count = 1; } ++a; } c.push_back(typename Lp::value_type(e, count)); return; } template void display(I b, I e) { cout << "("; for (I p = b; p != e; ++p) cout << p->first << " " << p->second << ", "; cout << ")" << endl; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/blassolve.C000066400000000000000000000110421347646240000167340ustar00rootroot00000000000000/* * examples/blassolve.C * * Copyright (C) J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #include "linbox/matrix/dense-matrix.h" #include "linbox/solutions/solve.h" #include "linbox/util/matrix-stream.h" #include "linbox/solutions/methods.h" using namespace LinBox; typedef Givaro::ZRing Ints; typedef DenseVector ZVector; int main (int argc, char **argv) { // Usage if (argc < 2 || argc > 4) { std::cerr << "Usage: solve []" << std::endl; return 0; } // File std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } std::ifstream invect; bool createB = false; if (argc == 2) { createB = true; } if (argc == 3) { invect.open (argv[2], std::ifstream::in); if (!invect) { createB = true; } else { createB = false; } } // Read Integral matrix from File Ints ZZ; MatrixStream< Ints > ms( ZZ, input ); DenseMatrix A (ms); Ints::Element d; std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; { // Print Matrix // Matrix Market // std::cout << "A is " << A << std::endl; // Maple A.write(std::cout << "Pretty A is ", Tag::FileFormat::Maple) << std::endl; } // Vectors ZVector X(ZZ, A.coldim()),B(ZZ, A.rowdim()); if (createB) { std::cerr << "Creating a random {-1,1} vector " << std::endl; srand48( BaseTimer::seed() ); for(ZVector::iterator it=B.begin(); it != B.end(); ++it) if (drand48() <0.5) *it = -1; else *it = 1; } else { for(ZVector::iterator it=B.begin(); it != B.end(); ++it) invect >> *it; } { // Print RHS std::cout << "B is ["; for(auto it:B) ZZ.write(std::cout, it) << " "; std::cout << "]" << std::endl; } std::cout << "B is " << B.size() << "x1" << std::endl; Timer chrono; // DenseElimination Method::DenseElimination M; //M.singular(Specifier::NONSINGULAR); chrono.start(); solve (X, d, A, B, M); chrono.stop(); std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; { // Solution size std::cout<<"Reduced solution: \n"; size_t maxbits=0; for (size_t i=0;i X[i].bitsize() ? maxbits: X[i].bitsize()); } std::cout<<" numerators of size "< VD(ZZ); MatrixDomain MD(ZZ); ZVector LHS(ZZ, A.rowdim()), RHS(ZZ, B); // check that Ax = d.b MD.vectorMul(LHS, A, X); VD.mulin(RHS, d); if (VD.areEqual(LHS, RHS)) std::cout << "Ax=b : Yes" << std::endl; else std::cout << "Ax=b : No" << std::endl; } } { // Print Solution std::cout << "(DenseElimination) Solution is ["; for(auto it:X) ZZ.write(std::cout, it) << " "; std::cout << "] / "; ZZ.write(std::cout, d)<< std::endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/charpoly.C000066400000000000000000000113121347646240000165630ustar00rootroot00000000000000#define _LB_CRATIMING 1 /* * examples/charpoly.C * * Copyright (C) 2005, 2010 D. Saunders, C. Pernet, J-G. Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/charpoly.C * @example examples/charpoly.C \brief Characteristic polynomial of matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include #include #include using namespace std; #include #include using namespace LinBox; template std::ostream& printPolynomial (std::ostream& out, const Field &F, const Polynomial &v) { for (int i = (int)(v.size () - 1); i >= 0; i--) { F.write (out, v[(size_t)i]); if (i > 0) out << " X^" << i << " + "; } return out; } template std::ostream& prettyprintIntegerPolynomial (std::ostream& out, const Field &F, const Polynomial &v) { size_t n = v.size()-1; if (n == 0) { F.write(out, v[0]); } else { if(v[n] != 0) { if (v[n] != 1) F.write(out, v[n]) << '*'; out << 'X'; if (n > 1) out << '^' << n; for (int i = (int)n - 1; i > 0; i--) { if (v[(size_t)i] != 0) { if (v[(size_t)i] >0) out << " + "; if (v[(size_t)i] != 1) F.write (out, v[(size_t)i]) << '*'; out << 'X'; if (i > 1) out << '^' << i; } } if (v[0] != 0) { if (v[0] >0) out << " + "; F.write(out, v[0]); } } } return out; } template std::ostream& printFactorization (std::ostream& out, const Field &F, const Factors &f, const Exponents& exp) { typename Factors::const_iterator itf = f.begin(); typename Exponents::const_iterator ite = exp.begin(); for ( ; itf != f.end(); ++itf, ++ite) { prettyprintIntegerPolynomial(out << '(', F, *itf) << ')'; if (*ite > 1) out << '^' << *ite; out << endl; } return out; } typedef Givaro::ZRing IntDom; int main (int argc, char **argv) { commentator().setMaxDetailLevel (2); commentator().setMaxDepth (2); commentator().setReportStream (std::cerr); cout< 3) { cerr << "Usage: charpoly [

]" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } if (argc == 2) { IntDom ZZ; DenseMatrix A (ZZ); A.read (input); DensePolynomial c_A(ZZ); Timer tim; tim.clear();tim.start(); charpoly (c_A, A); tim.stop(); clog << "Characteristic Polynomial is "; printPolynomial (clog, ZZ, c_A) << endl; cout << tim << endl; #ifdef __LINBOX_HAVE_NTL clog << "Do you want a factorization (y/n) ? "; char tmp; cin >> tmp; if (tmp == 'y' || tmp == 'Y') { commentator().start("Integer Polynomial factorization by NTL", "NTLfac"); vector > intFactors; vector exp; PolynomialRing IPD(ZZ); tim.start(); IPD.factor (intFactors, exp, c_A); tim.stop(); commentator().stop("done", NULL, "NTLfac"); printFactorization(clog << intFactors.size() << " integer polynomial factors:" << endl, ZZ, intFactors, exp) << endl; cout << tim << endl; } #endif } if (argc == 3) { typedef Givaro::Modular Field; double q = atof(argv[2]); Field F(q); DenseMatrix B (F); B.read (input); clog << "B is " << B.rowdim() << " by " << B.coldim() << endl; DensePolynomial c_B(F); Timer tim; tim.clear();tim.start(); charpoly (c_B, B); tim.stop(); clog << "Characteristic Polynomial is "; printPolynomial (clog, F, c_B) << endl; cout << tim << endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/checksolve.C000066400000000000000000000056111347646240000170750ustar00rootroot00000000000000/* * examples/checksolve.C * * Copyright (C) 2007 C. Pernet * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/checksolve.C * @example examples/checksolve.C \brief Solving of sparse matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include #include using namespace LinBox; // using namespace std; int main (int argc, char **argv) { // commentator().setMaxDetailLevel (-1); // commentator().setMaxDepth (-1); // commentator().setReportStream (std::cerr); if (argc < 2 || argc > 4) { std::cerr << "Usage: checksolve

" << std::endl; return 0; } std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } std::ifstream invect(argv[2]); if (!input) { std::cerr << "Error opening vector file " << argv[2] << std::endl; return -1; } typedef Givaro::Modular Field; double q = atof(argv[3]); Field F(q); MatrixStream< Field > ms ( F, input ); DenseMatrix A (ms); // A.write(std::cout); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; DenseVector X(F, A.coldim()),B(F, A.rowdim()); for(DenseVector::iterator it=B.begin(); it != B.end(); ++it) invect >> *it; std::cout << "B is [ "< r(F, A.rowdim()); BlasMatrixDomain BMD(F); BMD.mul(r, static_cast& >(A), X); //A.apply (r,X); VectorDomain VD(F); if (VD.areEqual (r,B)) std::cout<<"CHECK"< [

]" << endl; return -1; } if (argc == 2 ) { // For a small integer matrix test, do "det data/mat2S". // It is a 2 by 2 matrix with determinant = -2. typedef Givaro::ZRing Integers; Integers ZZ; ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } DenseMatrix A(ZZ); A.read(input); cout << "Matrix is " << A.rowdim() << " by " << A.coldim() << endl; Integers::Element det_A; det (det_A, A); cout << "Determinant is "; ZZ.write(cout, det_A) << endl; } if (argc == 3) { typedef Givaro::Modular Field; double q = atof(argv[2]); Field F(q); ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } SparseMatrix B (F); B.read(input); cout << "Matrix is " << B.rowdim() << " by " << B.coldim() << endl; Field::Element det_B; det (det_B, B); cout << "Determinant is "; F.write(cout, det_B) << " mod " << q << endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/dot-product.C000066400000000000000000000057151347646240000172200ustar00rootroot00000000000000/* * examples/dot-product.C * * Copyright (C) 2002, 2010 Bradford Hovinen * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/dot-product.C * @example examples/dot-product.C * \brief Timings on dot products of random vectors. * \ingroup examples * * \author Bradford Hovinen * * Use of vectors meeting the LinBox dense and sparse vector archetypes * is illustrated and their dot-product times are benchmarked. * * Constructs random vectors and computes their dot product, giving the * required time. */ #include #include #include #include #include #include using namespace LinBox; typedef Givaro::Modular Field; /// no command line args int main (int argc, char **argv) { // Constants: we are working with an n x n matrix over GF(q) const int n = 10000000; const double p = .001; const int q = 32749; commentator().setMaxDepth (1); commentator().setReportStream (std::cout); Field F (q); Field::RandIter gen(F); RandomDenseStream::Dense> factory1 (F, gen, n); RandomSparseStream::SparseSeq> factory2 (F, gen, p, n); RandomSparseStream::SparsePar> factory3 (F, gen, p, n); Vector::Dense v1 (n), v2 (n); Vector::SparseSeq v3; Vector::SparsePar v4; factory1 >> v1 >> v2; factory2 >> v3; factory3 >> v4; VectorDomain VD (F); Field::Element res; commentator().start ("dense/dense dot product (1)"); for (int i = 0; i < 1; i++) VD.dot (res, v1, v2); commentator().stop ("done"); commentator().start ("dense/sparse sequence dot product (1000)"); for (int i = 0; i < 1000; i++) VD.dot (res, v1, v3); commentator().stop ("done"); commentator().start ("dense/sparse parallel dot product (1000)"); for (int i = 0; i < 1000; i++) VD.dot (res, v1, v4); commentator().stop ("done"); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/doubledet.C000066400000000000000000000056361347646240000167250ustar00rootroot00000000000000/* * examples/doubledet.C * * Copyright (C) 2008, 2010 C. Pernet * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/doubledet.C * @example examples/doubledet.C * @ingroup examples * @brief computes doubleDet. */ #include #include #include #include #include #include #include using namespace LinBox; using namespace std; int main (int argc, char **argv) { // commentator().setMaxDetailLevel (-1); // commentator().setMaxDepth (-1); // commentator().setReportStream (std::cerr); Givaro::ZRing ZZ; ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } MatrixStream > ms (ZZ, input); DenseMatrix > A (ms); cout << "Matrix is " << A.rowdim() << " by " << A.coldim() << endl; if (A.rowdim() != A.coldim() + 1){ cerr<<"Wrong dimensions: A must be (n+1) x n"< 2) proof = true; //doubleDet (det1, det2, A, true); doubleDet (det1, det2, A, proof); tim.stop(); // Check solution size_t n = A.coldim(); DenseMatrix > B (ZZ, n, n); for (size_t i=0; is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/echelon.C000066400000000000000000000050701347646240000163630ustar00rootroot00000000000000/* * examples/echelon.C * * Copyright (C) 2007, 2010 C. Pernet * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/echelon.C * @example examples/echelon.C \brief Echelon form of matrix over Zp. \ingroup examples */ #include #include #include #include #include #define COMPARE_FFPACK using namespace LinBox; using namespace std; int main (int argc, char **argv) { if (argc < 3 || argc > 3) { cerr << "Usage: echelon

" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } typedef Givaro::Modular Field; double q = atof(argv[2]); Field F(q); DenseMatrix A(F); A.read(input); DenseMatrix E(F,A.rowdim(),A.coldim()); cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; //cout << A << std::endl; reducedRowEchelon(E,A); #ifdef COMPARE_FFPACK DenseMatrix G(A); size_t * P = new size_t[G.rowdim()]; size_t * Q = new size_t[G.coldim()]; /* size_t r = (size_t)*/ size_t r= FFPACK::ReducedRowEchelonForm (F, G.rowdim(), G.coldim(), G.getWritePointer(), G.coldim(), P, Q,false); FFPACK::getReducedEchelonForm (F, FFLAS::FflasUpper, G.rowdim(), G.coldim(), r, Q, G.getWritePointer(), G.coldim()); if (G.coldim() <20) G.write(cerr<<"FFPACK::Echelon = "< #include #include // --------------------------------------------- //#include "linbox/field/unparametric.h" //#include "linbox/modular.h" #include "linbox/field/ntl.h" #include "linbox/field/archetype.h" using namespace LinBox; // --------------------------------------------- /* The template function "fct" reads two elements "a" and "b" of the * field "K" from the standard input and writes a/b on the standard output */ template int fct(const Field& K) { typedef typename Field::Element K_elt; K_elt a,b,r; K.init(a); K.init(b); K.init(r); K.read(std::cin,a); K.read(std::cin,b); K.div(r,a,b); K.write(std::cout,r) << "\n"; return 0; } // --------------------------------------------- /// no command line args int main() { /* The field objects "K_o" and "Q_o" are constructed as in previous examples */ // Givaro::ZRing Q_o; NTL_RR Q_o ; NTL::RR::SetPrecision(400); NTL::RR::SetOutputPrecision(50); // Givaro::ZRing K_o; NTL::zz_p::init(553); NTL_zz_p K_o ; /* These field objects "K_o" and "Q_o" of different types can be converted to * objects Q and K of a unique type "Field_archetype" for instance using * a constructor: */ FieldArchetype Q( & Q_o ); FieldArchetype K( & K_o ); /* The template function "fct" is called with two different fields but the * template is instantiated only once since it is called with a unique * template parameter "Field_archetype" */ fct(Q); fct(K); return 0; }; // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/fields/ex-fields.C000066400000000000000000000052661347646240000201030ustar00rootroot00000000000000/* * examples/fields/ex-fields.C * * Copyright (C) 2001, 2002, 2010 G. Villard * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/fields/ex-fields.C * \author Gilles Villard * \brief Using a template function with two distinct fields. */ // --------------------------------------------- #include "linbox/linbox-config.h" #include // --------------------------------------------- #include "linbox/field/modular.h" #include "linbox/field/ntl.h" using namespace LinBox; using namespace std; /** The template function "fct" reads two elements "a" and "b" of the * field "K" from the standard input and writes a/b on the standard output */ template void divide_ex(const Field& K) { /* "K" is a field domain (a C++ object) of type "Field" (here the template * parameter). The type of the elements of "K" is obtained through * "Field" by typename Field::Element */ typedef typename Field::Element K_elt; K_elt a,b,r; K.init(a); K.init(b); K.init(r); cout << "division example: enter two numbers: "; K.read(cin,a); K.read(cin,b); K.div(r,a,b); K.write( K.write(cout<< "the quotient in ") << " is ", r) << endl; } // --------------------------------------------- /// no command line args int main() { /* Using the parameterized domain capabilities, several domains * representing integers modulo may be used simultaneously. */ Givaro::Modular D(3), K(7); divide_ex(D); divide_ex(K); // NTL arbitrary precision real field // (Could be parameterized by the precision) // Givaro::ZRing K2; NTL_RR K2 ; NTL::RR::SetPrecision(500); NTL::RR::SetOutputPrecision(50); // NTL modulo p field //Givaro::ZRing K2; //NTL::zz_p::init(553); divide_ex(K2); return 0; }; // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/fields/modular-int.C000066400000000000000000000072651347646240000204570ustar00rootroot00000000000000/* * examples/modular-int.C * * Copyright (C) 2005, 2010 D. Saunders, Z. Wang * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/fields/modular-int.C \brief Example of arithmetic in the Givaro::Modular finite field. */ //by Zhendong wan wan@udel.edu #include /* the header file for modular*/ #include "linbox/field/modular-int.h" int main (int argc, char **argv) { /* construct the Z/101Z field */ Givaro::Modular F(101); /* declare local variable a, b, c, x, y*/ Givaro::Modular::Element a, b, c, x, y; // initializtion F.init(a, 92); F.init(b, 50); F.init(c, 56); F.init(x, 33); F.init(y, 45); /* +, -, *, / arithmetic operation */ //compute c <- a + b mod 101; F.add(c,a,b); //output value of a F.write(std::cout,a); std::cout << " + "; //output value of b F.write(std::cout,b); std::cout << " = "; //output value of c F.write(std::cout,c); std::cout << " mod 101" << "\n"; //compute c <- a - b mod 101; F.sub(c,a,b); //output value of a F.write(std::cout,a); std::cout << " - "; //output value of b F.write(std::cout,b); std::cout << " = "; //output value of c F.write(std::cout,c); std::cout << " mod 101" << "\n"; //compute c <- a * b mod 101; F.mul(c,a,b); //output value of a F.write(std::cout,a); std::cout << " * "; //output value of b F.write(std::cout,b); std::cout << " = "; //output value of c F.write(std::cout,c); std::cout << " mod 101" << "\n"; //compute c <- a / b mod 101; F.div(c,a,b); //output value of a F.write(std::cout,a); std::cout << " / "; //output value of b F.write(std::cout,b); std::cout << " = "; //output value of c F.write(std::cout,c); std::cout << " mod 101" << "\n"; //compute c = 1 /a mod 101; F.inv(c,a); std::cout << "1 / " << a << " = "; //output value of c F.write(std::cout,c); std::cout << " mod 101" << "\n"; /* Inplace operation */ //compute a *= b; F.mulin(a,b); //compute a /= b; F.divin(a,b); //compute a <- 1 / a/; F.invin(a); /* a * x + y operation */ //compute c <- a * x + y; F.axpy(c,a,x,y); //compute c += a * x; F.axpyin(c,a,x); /* compare operation */ // test if a == 1 mod 101; //output value of a F.write(std::cout,a); std::cout << " == 1 mod 101 " << (F.isOne(a) ? "true" : "false") << "\n"; //test if a == 0 mod 101; //output value of a F.write(std::cout,a); std::cout << " == 0 mod 101 " << (F.isZero(a) ? "true" : "false") << "\n" ; // test if a == b mod 101; //output value of a F.write(std::cout,a); std::cout << " == "; //output value of b F.write(std::cout,b); std::cout << " mod 101 " << (F.areEqual(a,b) ? "true" : "false") << "\n"; //For performance, we recommend to use all possible operation, for example, using axpy, instead of mul, then addin. return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/find-invariant-factors.C000066400000000000000000000041221347646240000213130ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include //#include //#define LINBOX_USES_OMP 1 #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/algorithms/coppersmith-invariant-factors.h" // Computes the invariant factors of a sparse matrix (given in Matrix Market Format) // Effectively times: TPL_omp, BlockCoppersmithDomain and KannanBachem using namespace LinBox; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef SparseMatrix SparseMat; //typedef SparseMatrix SparseMat; typedef CoppersmithInvariantFactors FactorDomain; typedef typename FactorDomain::PolyDom PolyDom; typedef typename FactorDomain::PolyRing PolyRing; typedef DenseVector FactorVector; int main(int argc, char** argv) { int earlyTerm = 10; int p = 97, b = 3; std::string mFname,oFname; static Argument args[] = { { 'p', "-p P", "Set the field GF(p)", TYPE_INT, &p}, { 't', "-t T", "Early term threshold", TYPE_INT, &earlyTerm}, { 'b', "-b B", "Blocking factor", TYPE_INT, &b}, { 'm', "-m M", "Name of file for matrix M", TYPE_STR, &mFname}, { 'o', "-o O", "Name of file for output", TYPE_STR, &oFname}, END_OF_ARGUMENTS }; parseArguments(argc,argv,args); Field F(p); SparseMat M(F); { std::ifstream iF(mFname); M.read(iF); M.finalize(); iF.close(); } std::cout << "Finished reading" << std::endl; PolyDom PD(F,"x"); PolyRing R(PD); FactorVector factorList(R); FactorDomain CIF(F,M,b); size_t numFactors=CIF.computeFactors(factorList,earlyTerm); std::cout << "Finished computing factors" << std::endl; { std::ofstream out(oFname); for (size_t i=0;is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/genprime.C000066400000000000000000000005501347646240000165520ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include "stdlib.h" #include "linbox/randiter/random-prime.h" using namespace LinBox; int main(int argc, char**argv){ PrimeIterator gen(7); for (int i=0; i < atoi(argv[1]);i++){ integer p = *gen; std::cout< #include #include #define LINBOX_USES_OMP 1 #include "linbox/blackbox/pascal.h" #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/sliced3.h" #include "linbox/algorithms/coppersmith-invariant-factors.h" using namespace LinBox; template std::istream& readVector(std::istream& is, const Field& F, std::vector& out) { char c; is >> std::ws; is >> c; linbox_check(c=='['); is >> std::ws; out.clear(); c=is.peek(); while (is.good() && (c != ']')) { typename Field::Element d; F.read(is,d); out.push_back(d); is >> std::ws; c=is.peek(); } return is; } typedef SlicedField,uint64_t> Field; typedef typename Field::Element Element; typedef PascalBlackbox SparseMat; typedef CoppersmithInvariantFactors > FactorDomain; typedef typename FactorDomain::PolyDom PolyDom; typedef typename FactorDomain::PolyRing PolyRing; typedef DenseVector FactorVector; int main(int argc, char** argv) { int earlyTerm; int b; std::string mFname,oFname; static Argument args[] = { { 't', "-t T", "Early term threshold", TYPE_INT, &earlyTerm}, { 'b', "-b B", "Blocking factor", TYPE_INT, &b}, { 'm', "-m M", "Name of file for coefficients", TYPE_STR, &mFname}, { 'o', "-o O", "Name of file for output", TYPE_STR, &oFname}, END_OF_ARGUMENTS }; parseArguments(argc,argv,args); Field F(3); std::vector coeffs; { std::ifstream iF(mFname); readVector(iF,F,coeffs); iF.close(); } int n=coeffs.size(); coeffs.resize(2*n); SparseMat M(n,n,coeffs,F); #if 0 { MatrixDomain MD; typename MatrixDomain::OwnMatrix I(F,n,n),O(F,n,n); for (int i=0;is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/givaro-poly-local.C000066400000000000000000000067731347646240000203210ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include using namespace LinBox; using namespace std; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef Givaro::Poly1Dom PolyDom; typedef GivaroPoly PolyRing; typedef GivaroPolyQuotient QuotRing; typedef typename QuotRing::Element QElm; typedef GivaroPolyLocal LocalRing; typedef typename LocalRing::Element LElm; typedef GivaroPolyRandIter PolyRandIter; typedef typename PolyRing::Element PolyElement; bool testMul(QuotRing QR, LocalRing LR, QElm qa, QElm qb, LElm la, LElm lb) { QElm qc; QR.mul(qc, qa, qb); LElm lc; LR.mul(lc, la, lb); if (LR.areEqual(lc, qc)) { return true; } QR.write(cout << "(", qa) << ") * ("; QR.write(cout, qb) << ") = "; QR.write(cout, qc) << endl; LR.write(cout << "(", la) << ") * ("; LR.write(cout, lb) << ") = "; LR.write(cout, lc) << endl << endl; LR.write2(cout, la) << endl; LR.write2(cout, lb) << endl; return false; } bool testAdd(QuotRing QR, LocalRing LR, QElm qa, QElm qb, LElm la, LElm lb) { QElm qc; QR.add(qc, qa, qb); LElm lc; LR.add(lc, la, lb); if (LR.areEqual(lc, qc)) { return true; } QR.write(cout << "(", qa) << ") + ("; QR.write(cout, qb) << ") = "; QR.write(cout, qc) << endl; LR.write(cout << "(", la) << ") + ("; LR.write(cout, lb) << ") = "; LR.write(cout, lc) << endl << endl; LR.write2(cout, la) << endl; LR.write2(cout, lb) << endl; return false; } bool testAxpy( QuotRing QR, LocalRing LR, QElm qa, QElm qb, QElm qc, LElm la, LElm lb, LElm lc ) { QElm qd; QR.axpy(qd, qa, qb, qc); LElm ld; LR.axpy(ld, la, lb, lc); if (LR.areEqual(ld, qd)) { return true; } QR.write(cout << "(", qa) << ") * ("; QR.write(cout, qb) << ") + ("; QR.write(cout, qc) << ") = "; QR.write(cout, qd) << endl; LR.write(cout << "(", la) << ") * ("; LR.write(cout, lb) << ") + ("; LR.write(cout, lc) << ") = "; LR.write(cout, ld) << endl; LR.write2(cout, la) << endl; LR.write2(cout, lb) << endl; LR.write2(cout, lc) << endl; return false; } int main(int argc, char* argv[]) { size_t p = 3; size_t e = 3; Field F(p); PolyRing R(F, "x"); PolyRandIter PRI(R, 0, 10); PolyElement g, f; R.init(g, {2, 1, 1}); R.write(cout << "irred: ", g) << endl; R.pow(f, g, e); R.write(cout << "quotient: ", f) << endl; integer max; R.convert(max, f); QuotRing QR(R, f); LocalRing LR(R, g, e); QElm qa, qb, qc; LElm la, lb, lc; for (integer i = 1; i <= max; i++) { QR.init(qa, i); LR.init(la, i); for (integer j = 1; j <= max; j++) { cout << i << ", " << j << ":" << endl; QR.init(qb, j); LR.init(lb, j); //if (!QR.isDivisor(qa, qb)) { // continue; //} if (!testMul(QR, LR, qa, qb, la, lb)) { return 0; } if (!testAdd(QR, LR, qa, qb, la, lb)) { return 0; } for (integer k = 1; k <= max; k++) { QR.init(qc, k); LR.init(lc, k); if (!testAxpy(QR, LR, qa, qb, qc, la, lb, lc)) { return 0; } } } } } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/graph-charpoly.C000066400000000000000000000055751347646240000177000ustar00rootroot00000000000000/* * examples/graph-charpoly.C * * Copyright (C) 2005, 2007, 2010 C. Pernet ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/graph-charpoly.C * @example examples/graph-charpoly.C * @ingroup examples * @brief Compute the integer characteristic polynomial of symetric matrices with (0,1) coefficients. * Example for Pr G. Royle. */ #include #include #include #include #include #include using namespace std; using namespace LinBox; template void printPolynomial(const Field& F, const Polynomial& P) { int n= (int) P.size()-1; if (n==1){ cout<<"X"; if ( P[0] != 0) F.write(cout<<((P[0]>0)?"+":""),P[0]); } else{ cout<<"X^"<1; --i) if (!F.isZero(P[(size_t)i])) F.write(cout<<((P[(size_t)i]>0)?"+":""),P[(size_t)i])<<"*X^"<0)?"+":""),P[1])<<"*X"; if ( P[0] != 0) F.write(cout<<((P[0]>0)?"+":""),P[0]); } } int main (int argc, char **argv) { commentator().getMessageClass (BRIEF_REPORT).setMaxDepth (2); commentator().getMessageClass (BRIEF_REPORT).setMaxDetailLevel (Commentator::LEVEL_UNIMPORTANT); if (argc != 2) { cerr << "Usage: graph-charpoly <0/1-symmetric-matrix-file-in-SMS-format>" < IRing_t; IRing_t ZZ; ZeroOne A(ZZ); A.read (input); commentator().report(1, BRIEF_REPORT)<< "A is " << A.rowdim() << " by " << A.coldim() << endl; DensePolynomial c_A(ZZ); charpoly (c_A, A, Method::Blackbox(Method::Wiedemann(Shape::Symmetric))); PolynomialRing(ZZ,'X').write( cout<< "Characteristic Polynomial is ", c_A) << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/grid_reduce.C000066400000000000000000000264441347646240000172320ustar00rootroot00000000000000/* * examples/grid_reduce.C * * Copyright (C) 2008, 2010 A. Urbanska ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/grid_reduce.C * @example examples/grid_reduce.C * @ingroup examples * @brief undocumented */ #include #include #include #include #include #include #include using namespace LinBox; int main(int argc, char* argv[]) { srand(time(NULL)); if (argc < 5) { std::cout << "usage: " << argv[0] << " alg m n S source format " << std::endl << std::endl; std::cout << "alg = `adaptive', `ilio', `local', or `2local', " << std::endl << "m is modulus (ignored by 2local, adaptive), " << "n is matrix order, " << std::endl << "S is reduced rows size" << std::endl << "source is `random', `random-rough', `fib', `tref', or a filename " << std::endl << "format is `dense' or `sparse' (if matrix from a file)" << std::endl << "compile with -DBIG if you want big integers used." << std::endl; return 0; } std::string algo = argv[1]; // int m = atoi(argv[2]); // int n = atoi(argv[3]); int S = atoi(argv[4]); std::string src = argv[5]; // std::string file = src; // std::string format = (argc >= 6 ? argv[5] : ""); UserTimer T, TT; std::string out(src); out=out+"z"; if (algo == "reduceT") out=out+"T"; typedef Givaro::ZRing Ints; //typedef Givaro::ModularBalanced Ints; //typedef Givaro::Modular Ints; //Ints Z(m); Ints Z; integer p; std::cout << "Computation modulo " << Z.characteristic(p) << "" << std::endl< mC; std::vector mR; #if 0 ifstream mRow ("mR2", ios::in); char c='['; mRow >> c; std::cout << c; while (c!='[') { mRow >> c; std::cout << c; } int mark; while( mRow >> mark) { mC.push_back(mark); } mRow.close(); mRow.open("mC2", ios::in) ; c='['; mRow >> c; std::cout << c; while (c!='[') { mRow >> c; std::cout << c; } for (int i=0; i< mC.size(); ++i) { mRow >> mark; if(mark==1) mC[i] = mark; } #endif std::cout << src << "" << std::endl<< std::flush ; TT.clear(); TT.start(); Grid A(Z,in, mR, mC); TT.stop(); std::cout << "Reading the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; int rank =0; TT.clear(); TT.start(); A.reduce(rank, S, mR, mC, os); TT.stop(); std::cout << "Reducing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; std::cout << "The rank is " << rank << "" << std::endl << std::flush; A.write(os); //std::cout << "mR: \n["; //for (int i=0; i < mR.size() ; ++i) { // std::cout << mR[i] << " "; //} os << "mC: \n["; for (int i=0; i < mC.size() ; ++i) { os << mC[i] << " "; } os << "]" << std::endl; os << "mR: \n["; for (int i=0; i < mR.size() ; ++i) { os<< mR[i] << " "; } os <> c; std::cout << c; while (c!='[') { in >> c; std::cout << c; } TT.stop(); std::cout << "Time vector exchange in"; TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); std::cout << "reading additional columns" << std::endl << std::flush; for (int i=0; i < mR.size(); ++i) { int mark; in >> mark; if (mR[i]!=1) mR[i] = mark; //if (mark>0) std::cout << mark << " "; } std::cout << "columns read in "; TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; std::cout << "Time file preparation in"; TT.clear(); TT.start(); in.close(); src = argv[5+matrix]; std::cout << src << "" << std::endl << std::flush; std::string out3(src); out3= out3+"z"; if (algo == "reduceT") out3=out3+"T"; //++matrix; in.open(src.c_str(), std::ios::in); os.close(); os.open(out3.c_str(), std::ios::out); TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); A.read(Z,in, mC, mR); //Grid A2(Z,in, mR, mC); TT.stop(); std::cout << "Reading the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; rank =0; TT.clear(); TT.start(); if (matrix==1) A.reduce(rank, 1000000*S, mC, mR, os); //22(1,9) if (matrix==9) A.reduce(rank, 1000000*S, mC, mR, os); //22(1,9) if (matrix==7) A.reduce(rank, 4.7*S, mC, mR, os); //20(3,7)change1.6 if (matrix==5) A.reduce(rank, 1000000*S, mC, mR, os); //18(5,5)change3 //if (matrix==1) A.reduce(rank, S,mC,mR,os); else A.reduce(rank, S, mC, mR, os); TT.stop(); std::cout << "Reducing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; std::cout << "The rank is " << rank << "" << std::endl << std::flush; TT.clear(); TT.start(); A.write(os); TT.stop(); std::cout << "Writing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; TT.clear(); TT.start(); os << "mC:\n["; for (int i=0; i < mR.size() ; ++i) { os << mR[i] << " "; } os << "" << std::endl; os << "mR: \n["; for (int i=0; i < mC.size() ; ++i) { os<< mC[i] << " "; } os <> c; std::cout << c; while (c!='[') { in >> c; std::cout << c; } TT.stop(); std::cout << "Time vector exchange in"; TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); std::cout << "reading additional columns" << std::endl << std::flush; for (int i=0; i < mC.size(); ++i) { int mark; in >> mark; if (mC[i]!=1) mC[i] = mark; //if (mark>0) std::cout << mark << " "; } std::cout << "columns read in "; TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; std::cout << "Time file preparation in"; TT.clear(); TT.start(); in.close(); src = argv[6+matrix]; std::cout << src << "" << std::endl << std::flush; std::string out4(src); out4= out4+"z"; if (algo == "reduceT") out4=out4+"T"; matrix+=2; in.open(src.c_str(), std::ios::in); os.close(); os.open(out4.c_str(), std::ios::out); TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); A.read(Z,in, mR, mC); //Grid A2(Z,in, mR, mC); TT.stop(); std::cout << "Reading the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; int rank =0; TT.clear(); TT.start(); if (matrix==3) A.reduce(rank, 6.8*S, mR, mC, os); //21(3,9) if (matrix==9) A.reduce(rank, 6.8*S, mR, mC, os); //21(3,9) if (matrix==7) A.reduce(rank, 4.6*S, mR, mC, os); //19(5,7)nochange1.6 A.reduce(rank, S, mR, mC, os); TT.stop(); std::cout << "Reducing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; std::cout << "The rank is " << rank << "" << std::endl << std::flush; TT.clear(); TT.start(); A.write(os); TT.stop(); std::cout << "Writing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; TT.clear(); TT.start(); os << "mC:\n["; for (int i=0; i < mC.size() ; ++i) { os << mC[i] << " "; } os << "" << std::endl; os << "mR: \n["; for (int i=0; i < mR.size() ; ++i) { os<< mR[i] << " "; } os <> c; std::cout << c; while (c!='[') { in >> c; std::cout << c; } TT.stop(); std::cout << "Time vector exchange in"; TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); std::cout << "reading additional columns" << std::endl << std::flush; for (int i=0; i < mR.size(); ++i) { int mark; in >> mark; if (mR[i]!=1) mR[i] = mark; //if (mark>0) std::cout << mark << " "; } std::cout << "columns read in "; TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; std::cout << "Time file preparation in"; TT.clear(); TT.start(); in.close(); src = argv[5+matrix]; std::cout << src << "" << std::endl << std::flush; std::string out2(src); out2= out2+"z"; if (algo == "reduceT") out2=out2+"T"; //++matrix; in.open(src.c_str(), std::ios::in); os.close(); os.open(out2.c_str(), std::ios::out); TT.stop(); TT.print(std::cout); std::cout << "seconds" << std::endl << std::flush; TT.clear(); TT.start(); A.read(Z,in, mC, mR); //Grid A2(Z,in, mR, mC); TT.stop(); std::cout << "Reading the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; int rank =0; TT.clear(); TT.start(); A.reduce(rank, S, mC, mR, os); TT.stop(); std::cout << "Reducing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; std::cout << "The rank is " << rank << "" << std::endl << std::flush; TT.clear(); TT.start(); A.write(os); TT.stop(); std::cout << "Writing the matrix in "; TT.print(std::cout); std::cout << " seconds" << std::endl << std::flush; TT.clear(); TT.start(); os << "mC:\n["; for (int i=0; i < mR.size() ; ++i) { os << mR[i] << " "; } os << "" << std::endl; os << "mC: \n["; for (int i=0; i < mC.size() ; ++i) { os<< mC[i] << " "; } os <s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/iliopoulos2.C000066400000000000000000000063131347646240000172270ustar00rootroot00000000000000/* linbox/algorithms/coppersmith-invariant-factors.h * Copyright (C) 2015 Gavin Harrison * * Written by Gavin Harrison * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include "linbox/linbox-config.h" #include #include #include "linbox/ring/modular.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/random-matrix.h" #include "linbox/algorithms/smith-form-iliopoulos2.h" #include using namespace LinBox; using namespace Givaro; typedef ZRing Field; typedef typename ZRing::Element Element; typedef IliopoulosDomain IliopoulosDom; typedef MatrixDomain Domain; typedef typename Domain::OwnMatrix Matrix; typedef typename Field::RandIter RandIter; typedef RandomDenseMatrix RandomMatrix; Field Z; Domain MD(Z); RandIter RI(Z); RandomMatrix RDM(Z, RI); IliopoulosDom ID(Z); void printMatrix(Matrix &A) { size_t m = A.rowdim(); size_t n = A.coldim(); std::cout << "matrix(ZZ, " << m << "," << n << ", [" << std::endl; for (size_t i = 0; i < m; i++) { Element tmp; Z.write(std::cout << "[", A.getEntry(tmp, i, 0)); for (size_t j = 1; j < n; j++) { Z.write(std::cout << ", ", A.getEntry(tmp, i, j)); } std::cout << "]," << std::endl; } std::cout << "])" << std::endl; } void randomL(Matrix &L) { size_t n = L.rowdim(); RDM.random(L); for (size_t i = 0; i < n; i++) { L.setEntry(i, i, Z.one); for (size_t j = i+1; j < n; j++) { L.setEntry(i, j, Z.zero); } } } void randomU(Matrix &U) { size_t n = U.rowdim(); RDM.random(U); for (size_t i = 0; i < n; i++) { U.setEntry(i, i, Z.one); for (size_t j = 0; j < i; j++) { U.setEntry(i, j, Z.zero); } } } int main(int argc, char** argv) { Matrix A(Z, 4, 4); //RDM.random(A); A.setEntry(0,0,Integer(2)); A.setEntry(1,1,Integer(6)); A.setEntry(2,2,Integer(12)); printMatrix(A); Matrix L1(Z, 4, 4); randomL(L1); Matrix U1(Z, 4, 4); randomU(U1); Matrix L2(Z, 4, 4); randomL(L2); Matrix U2(Z, 4, 4); randomU(U2); Matrix B(Z, 4, 4); MD.mul(B, U1, A); MD.leftMulin(B, L1); MD.rightMulin(B, U2); MD.rightMulin(B, L2); printMatrix(B); ID.smithFormIn(B, Integer(2 * 6 * 12)); printMatrix(B); return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/integer-mul.C000066400000000000000000000035751347646240000172060ustar00rootroot00000000000000/* * examples/integer-mul.C * * Copyright (C) 2002, 2005, 2010 G Villard, D. Saunders * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/integer-mul.C * @example examples/integer-mul.C * \author Gilles Villard * \brief The LinBox arbitrary precision integer type illustrated. * \ingroup examples * * The class `integer' is a wrapper of GMP integers. */ // --------------------------------------------- #include #include // --------------------------------------------- #include // Use of Gmp based LinBox integers #include using namespace LinBox; using namespace std; // --------------------------------------------- /// no command line args. Prompts for two integers. int main() { integer a,b; cout << "1st integer > "; cin >> a; cout << "2nd integer > "; cin >> b; cout << "The product " << a*b << "\n"; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/invariant-factors.C000066400000000000000000000100161347646240000203740ustar00rootroot00000000000000/* linbox/algorithms/coppersmith-invariant-factors.h * Copyright (C) 2015 Gavin Harrison * * Written by Gavin Harrison * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include "linbox/linbox-config.h" #include #include #include "linbox/ring/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/blackbox/transpose.h" #include "linbox/blackbox/compose.h" #include "linbox/algorithms/invariant-factors.h" using namespace LinBox; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef SparseMatrix SparseMat; typedef InvariantFactors FactorDomain; typedef typename FactorDomain::PolyRing PolyRing; typedef DenseVector FactorVector; int main(int argc, char** argv) { int earlyTerm; int p = 99991, b = 30, r = 3, t = 5; std::string mFname = "jumat",oFname=""; static Argument args[] = { { 'p', "-p P", "Set the field GF(p)", TYPE_INT, &p}, { 'e', "-e E", "Early term threshold", TYPE_INT, &earlyTerm}, { 'b', "-b B", "Blocking factor", TYPE_INT, &b}, { 't', "-t T", "First blocking factor", TYPE_INT, &t}, { 'r', "-r R", "R-th factor used as mod for iliopoulos", TYPE_INT, &r}, { 'm', "-m M", "Name of file for matrix M", TYPE_STR, &mFname}, { 'o', "-o O", "Name of file for output", TYPE_STR, &oFname}, END_OF_ARGUMENTS }; parseArguments(argc,argv,args); Field F(p); SparseMat M(F); { std::ifstream iF(mFname); M.read(iF); M.finalize(); iF.close(); } std::cout << "Finished reading, dimension " << M.rowdim() << "x" << M.coldim() << ", nnz " << M.size() << std::endl; PolyRing R(F,"x"); FactorVector List1(R), List2(R), factorList(R); FactorDomain CIF(F, R); #if 1 CIF.solve(factorList, M, b, t, r, earlyTerm); #else // from solve in invariant-factors.h // Compute first b1 factors CIF.computeFactors(List1, M, t, earlyTerm); std::cout << "Finished computing early factors" << std::endl; { for (int i = List1.size()-1; i >= 0; i--) { std::cout << PD.degree(List1[i]) << ", "; } std::cout << std::endl; } // get r-th factor PolyRing::Element d; R.assign(d, List1[t - r]); // Compute factors mod r-th factor CIF.computeFactors(List2, M, d, b, earlyTerm); // Fill in zeros before r-th factor with r-th factor for (int i = 0; i < b - r; i++) { if (R.isZero(List2[i])) R.assign(List2[i], d); } // Fill in remaining factors with original values factorList.resize(b); for (int i = 0; i < r; i++) factorList[i] = List1[t-1-i]; for (int i = r; i < b; i++) factorList[i] = List2[b-1-i]; #endif std::cout << "Finished computing factors" << std::endl; for (size_t i = 0; i 0) { std::ofstream out(oFname); for (size_t i = 0; is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/makefile.mpi000066400000000000000000000040341347646240000171250ustar00rootroot00000000000000# Makefile for LinBox's examples/ directory ########################################### # this section constructed at configure time (sets compiler, flags, header locations, library locations) # basic terms compiler=g++ # MPICH # mpicompiler=mpicxx -D__LINBOX_HAVE_MPI # LAM/MPI mpicompiler=mpiCC -D__LINBOX_HAVE_MPI flags=-g -Wall -DLinBoxSrcOnly linboxincludes=-I.. # package headers locations. The default is to look in /usr/include and /usr/local/include gmpincludes= blasincludes= ntlincludes= givaroincludes= # package library locations. Default is to look in /usr/lib and /usr/local/lib gmplibdir= blaslibdir= ntllibdir= givarolibdir= ########################################### # Below this point the makefile is fixed. ########################################### # add flags so linker can get the libfilename right gmplibs=$(gmplibdir) -lgmp -lgmpxx blaslibs=$(blaslibdir) -lcblas -llapack -latlas ntllibs=$(ntllibdir) -lntl givarolibs=$(givarolibdir) -lgivaro includes=-I. $(linboxincludes) $(gmpincludes) $(blasincludes) $(ntlincludes) $(givaroincludes) libs=$(gmplibs) $(blaslibs) $(ntllibs) $(givarolibs) ########################################### # rules to make targets # generic rule for any test program %:%.C $(compiler) $(flags) $*.C -o $* $(includes) $(libs) # particular rule for some program using different setup from the generic one test-rank: test-rank.C test-generic.h # dependence on linbox sources also wanted g++ test-rank.C -o test-rank $(blasincludes) $(blaslibs) minpoly: minpoly.C ../linbox/solutions/methods.h ../linbox/solutions/minpoly.h ../linbox/algorithms/cra-domain.h $(mpicompiler) $(flags) minpoly.C -o minpoly $(includes) $(libs) mpidet: mpidet.C ../linbox/solutions/methods.h ../linbox/solutions/det.h ../linbox/algorithms/cra-domain.h $(mpicompiler) $(flags) mpidet.C -o mpidet $(includes) $(libs) mpidet2: mpidet bigmat ./bigmat 200 > file mpiexec C ./mpidet file rm file bigmat run: minpoly file mpirun -np 1 ./minpoly file clean: rm mpidet minpoly test-det test-bitonic-sort test-rank a.out *.o linbox-1.6.3/examples/map-sparse-test.C000066400000000000000000000026611347646240000177760ustar00rootroot00000000000000#include "examples/map-sparse.h" #include //bb: is this supposed to be installed ? using namespace LinBox; // why this test here ? int main(int argc, char* argv[]) { typedef Givaro::Modular Field; typedef Field::Element Element; int q=65537; int n=10; static Argument args[] = { { 'n', "-n N", "Set dimension of test matrices to NxN.", TYPE_INT, &n }, { 'q', "-q Q", "Operate over the \"field\" GF(Q) [1].", TYPE_INTEGER, &q }, //{ 's', "-s S", "Sparse matrices with density S.", TYPE_DOUBLE, &sparsity }, END_OF_ARGUMENTS }; parseArguments (argc, argv, args); srand ((unsigned)time (NULL)); Field F (q); MapSparse ms(F,n,n); Element d; for (int i=0;is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/map-sparse.h000066400000000000000000000113041347646240000170600ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/map-sparse.h * @ingroup examples * @brief */ #ifndef __LINBOX_MAP_SPARSE_H #define __LINBOX_MAP_SPARSE_H #include #include #include #include #include #include #include #include #include namespace LinBox { template class MapSparseIF { public: typedef Field_ Field; typedef typename Field::Element Element; typedef size_t Index; virtual ~MapSparseIF() {}; virtual const Element& setEntry(Index i, Index j, const Element& e) =0; virtual const Element& getEntry(Index i, Index j) const =0; protected: typedef std::map VectorType; typedef typename VectorType::iterator VectorIt; typedef typename VectorType::const_iterator VectorConstIt; typedef std::map MapType; typedef typename MapType::iterator MapIt; typedef typename MapType::const_iterator MapConstIt; }; template class MapSparse : public MapSparseIF { public: typedef Field_ Field; typedef typename Field::Element Element; typedef size_t Index; typedef std::map VectorType; typedef typename VectorType::iterator VectorIt; typedef typename VectorType::const_iterator VectorConstIt; typedef std::map MapType; typedef typename MapType::iterator MapIt; typedef typename MapType::const_iterator MapConstIt; MapSparse(); MapSparse(const Field& F, Index r, Index c); MapSparse(const MapSparse& M); void init(const Field& F, Index r, Index c); void shape(Index r, Index c); MapSparse& operator=(const MapSparse& M); ~MapSparse(); Index rowdim() const; Index coldim() const; const Field& field() const; const Element& setEntry(Index i, Index j, const Element& e); const Element& getEntry(Index i, Index j) const; bool verify(); //forall r: A_{i,r}<-A_{i,r}+k*A_{j,r} void addRow(const Element& k, Index i, Index j); //forall r: A_{r,i}<-A_{r,i}+k*A_{r,j} void addCol(const Element& k, Index i, Index j); //forall r: A_{i,r}<-k*A_{i,r} void timesRow(const Element& k, Index i); //forall r: A_{r,j}<-k*A_{r,j} void timesCol(const Element& k, Index j); void swapRows(Index i, Index j); void swapCols(Index i, Index j); void scaleMat(const Element& k); void transpose(); Index nnz() const; // A -> A' = SAS^{-1}, and A' has about nnz nonzero entries. void randomSim(Index nnz, int seed = 0); // A -> A' = UAV, with U and V nonsingular, and A' has about nnz nonzero entries. void randomEquiv(Index nnz, int seed = 0); bool areEqual(MapSparse rhs) const; std::istream& read(std::istream& in); std::ostream& print(std::ostream& out) const; std::ostream& write(std::ostream& out) const; template void copy(Matrix& mat) const; template void copyFrom(Matrix& mat); template void toVector(Vector& vec) const; template void fromVector(const Vector& vec, Index r, Index c); static void generateCompanion(MapSparse& mat,std::vector& coeffs); static void generateDenseRandMat(MapSparse& mat, int q); static void generateRandMat(MapSparse& mat, int nnz, int q); static void generateScaledIdent(MapSparse& mat, int alpha); static void generateSparseNonSingular(MapSparse& mat, int approxNNZ, int seed=0); protected: static int randRange(int start, int end); MatrixDomain MD_; MapType rowMap_; MapType colMap_; Index numCols_; Index numRows_; Index nnz_; Element zero_; }; } #include #endif // __LINBOX_MAP_SPARSE_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/map-sparse.inl000066400000000000000000000352651347646240000174270ustar00rootroot00000000000000/* Copyright (C) 2013 LinBox * Written by AJS * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/map-sparse.inl * @ingroup examples * @brief */ #ifndef __LINBOX_MAP_SPARSE_INL #define __LINBOX_MAP_SPARSE_INL #include #include #include #include #include #include namespace LinBox { template MapSparse::MapSparse() : MD_(Field_()),numCols_(0), numRows_(0), nnz_(0) {} template MapSparse::MapSparse(const Field& F, Index r, Index c): MD_(F), numCols_(c), numRows_(r), nnz_(0) {F.assign(zero_,F.zero);} template void MapSparse::init(const Field& F, Index r, Index c) { MD_=F; F.assign(zero_,F.zero); shape(r,c); } template void MapSparse::shape(Index r, Index c) { rowMap_.clear(); colMap_.clear(); numRows_=r; numCols_=c; nnz_=0; } template template void MapSparse::fromVector(const Vector& vec, Index r, Index c) { shape(r,c); if (numCols_==1) { for (Index i=0;i MapSparse::MapSparse(const MapSparse& M): MD_(M.field()), rowMap_(M.rowMap_), colMap_(M.colMap_), numCols_(M.numCols_), numRows_(M.numRows_), nnz_(M.nnz_), zero_(M.zero_) {} template MapSparse& MapSparse::operator=(const MapSparse& rhs) { if (rhs==*this) return *this; MD_.init(rhs.MD_); numCols_=rhs.numCols_; numRows_=rhs.numRows_; rowMap_=rhs.rowMap_; colMap_=rhs.colMap_; nnz_=rhs.nnz_; zero_=rhs.zero_; return *this; } template MapSparse::~MapSparse() {} template const Field_& MapSparse::field() const { return MD_.field(); } template bool MapSparse::verify() { for (int i=0;isecond).find(j); if (entry != (row->second.end())) { d=entry->second; } } Element e=zero_; MapConstIt col=colMap_.find(j); if (col != colMap_.end()) { VectorConstIt entry=(col->second).find(i); if (entry != (col->second.end())) { e=entry->second; } } if (d!=e) { return false; } } } return true; } template const typename Field_::Element& MapSparse::setEntry(Index i, Index j, const Element& e) { VectorIt it=rowMap_[i].find(j); if (it != rowMap_[i].end()) { --nnz_; rowMap_[i].erase(it); VectorIt colIt=colMap_[j].find(i); colMap_[j].erase(colIt); } if (!field().isZero(e)) { ++nnz_; rowMap_[i][j]=e; colMap_[j][i]=e; } return e; } template const typename MapSparse::Element& MapSparse::getEntry(Index i, Index j) const { MapConstIt row=rowMap_.find(i); if (row != rowMap_.end()) { VectorConstIt entry=(row->second).find(j); if (entry != (row->second.end())) { return (entry->second); } } return zero_; } //forall r: A_{i,r}<-A_{i,r}+k*A_{j,r} template void MapSparse::addRow(const Element& k, Index i, Index j) { MapIt rowJ=rowMap_.find(j); if (rowJ != rowMap_.end()) { for (VectorIt it=rowJ->second.begin();it!=rowJ->second.end();++it) { Index col=it->first; Element d=getEntry(i,col); field().axpyin(d,k,it->second); setEntry(i,col,d); } } } //forall r: A_{r,i}<-A_{r,i}+k*A_{r,j} template void MapSparse::addCol(const Element& k, Index i, Index j) { MapIt colJ=colMap_.find(j); if (colJ != colMap_.end()) { for (VectorIt it=colJ->second.begin();it!=colJ->second.end();++it) { Index row=it->first; Element d = getEntry(row,i); field().axpyin(d,k,it->second); setEntry(row,i,d); } } } //forall r: A_{i,r}<-k*A_{i,r} template void MapSparse::timesRow(const Element& k, Index i) { linbox_check(!(field().isZero(k))); MapIt row=rowMap_.find(i); if (row != rowMap_.end()) { for (VectorIt it=row->second.begin();it!=row->second.end();++it) { Index col=it->first; field().mulin(rowMap_[i][col],k); field().mulin(colMap_[col][i],k); } } } //forall r: A_{r,j}<-k*A_{r,j} template void MapSparse::timesCol(const Element& k, Index j) { linbox_check(!(field().isZero(k))); MapIt col=colMap_.find(j); if (col != colMap_.end()) { for (VectorIt it=col->second.begin();it!=col->second.end();++it) { Index row=it->first; field().mulin(rowMap_[row][j],k); field().mulin(colMap_[j][row],k); } } } template void MapSparse::swapRows(Index i, Index j) { VectorType oldRowI=rowMap_[i]; VectorType oldRowJ=rowMap_[j]; rowMap_[i].clear(); rowMap_[j].clear(); for (VectorIt it=oldRowI.begin();it!=oldRowI.end();++it) { Index col=it->first; colMap_[col].erase(colMap_[col].find(i)); } for (VectorIt it=oldRowJ.begin();it!=oldRowJ.end();++it) { Index col=it->first; colMap_[col].erase(colMap_[col].find(j)); } for (VectorIt it=oldRowI.begin();it!=oldRowI.end();++it) { Index col=it->first; rowMap_[j][col]=oldRowI[col]; colMap_[col][j]=oldRowI[col]; } for (VectorIt it=oldRowJ.begin();it!=oldRowJ.end();++it) { Index col=it->first; rowMap_[i][col]=oldRowJ[col]; colMap_[col][i]=oldRowJ[col]; } } template void MapSparse::swapCols(Index i, Index j) { VectorType oldColI=colMap_[i]; VectorType oldColJ=colMap_[j]; colMap_[i].clear(); colMap_[j].clear(); for (VectorIt it=oldColI.begin();it!=oldColI.end();++it) { Index row=it->first; rowMap_[row].erase(rowMap_[row].find(i)); } for (VectorIt it=oldColJ.begin();it!=oldColJ.end();++it) { Index row=it->first; rowMap_[row].erase(rowMap_[row].find(j)); } for (VectorIt it=oldColI.begin();it!=oldColI.end();++it) { Index row=it->first; colMap_[j][row]=oldColI[row]; rowMap_[row][j]=oldColI[row]; } for (VectorIt it=oldColJ.begin();it!=oldColJ.end();++it) { Index row=it->first; colMap_[i][row]=oldColJ[row]; rowMap_[row][i]=oldColJ[row]; } } template typename MapSparse::Index MapSparse::nnz() const { return nnz_; } // A -> A' = SAS^{-1}, and A' has about nnz nonzero entries. template void MapSparse::randomSim(Index nz, int seed) { typename Field::Element a; Index i,j; MersenneTwister ri; typename Field::RandIter r(field(),0, seed); //if (seed != 0) { ri.setSeed(seed); r.setSeed(seed); } if (seed != 0) { ri.setSeed(seed); // ridiculous constructor only seeding! typename Field::RandIter s(field(), 0, seed); r = s; } while (nnz() < nz) { field().nonzerorandom(r,a); i = ri.randomIntRange(0, rowdim()); j = ri.randomIntRange(0, coldim()); addCol(a, i, j); //std::cout << nnz() << std::endl; field().negin(a); addRow(a, i, j); } } // A -> A' = UAV, with U and V nonsingular, and A' has about nnz nonzero entries. template void MapSparse::randomEquiv(Index nz, int seed) { typename Field::Element a; Index i,j; MersenneTwister ri; typename Field::RandIter r(field(),0,seed); if (seed != 0) { ri.setSeed(seed); // ridiculous seeding! typename Field::RandIter s(field(), 0, seed); r = s; } bool flip = true; int count=0; while (nnz() < nz) { r.nonzerorandom(a); i = ri.randomIntRange(0, rowdim()); j = ri.randomIntRange(0, coldim()); if (i!=j){ if (flip) addCol(a, i, j); else addRow(a, i, j); flip = not flip; } ++count; } } template std::ostream& MapSparse::print(std::ostream& out) const { for (Index i=0;i std::ostream& MapSparse::write(std::ostream& out) const { out << "%%MatrixMarket matrix coordinate integer general" << std::endl; out << "% written from a LinBox MapSparse" << std::endl; out << numRows_ << " " << numCols_ << " " << nnz_ << std::endl; //for (Index i = 0; i < numRows_; ++i) for (MapConstIt p = rowMap_.begin(); p != rowMap_.end(); ++p) for (VectorConstIt rp = p->second.begin(); rp != p->second.end(); ++rp) field().write(out << 1+p->first << " " << 1+rp->first << " ", rp->second) << std::endl; out << std::endl; return out; } template std::istream& MapSparse::read(std::istream& in) { Index r,c; Element d; field().init(d); MatrixStream ms(field(),in); ms.getDimensions(r,c); shape(r,c); while (ms.nextTriple(r,c,d)) setEntry(r,c,d); return in; } template typename MapSparse::Index MapSparse::rowdim() const { return numRows_; } template typename MapSparse::Index MapSparse::coldim() const { return numCols_; } template void MapSparse::transpose() { rowMap_.swap(colMap_); int temp=numCols_;numCols_=numRows_;numRows_=temp; } template template void MapSparse::copy(Matrix& mat) const { std::stringstream ss; write(ss); mat.read(ss); mat.finalize(); } template template void MapSparse::copyFrom(Matrix& mat) { std::stringstream ss; mat.write(ss); read(ss); } template template void MapSparse::toVector(Vector& vec) const { if (numCols_ == 1) { for (Index i=0;i void MapSparse::scaleMat(const Element& k) { for (size_t i=0;i bool MapSparse::areEqual(MapSparse rhs) const { if (rhs.numCols_ != numCols_) { return false; } if (rhs.numRows_ != numRows_) { return false; } if (nnz_ != rhs.nnz_) { return false; } for (MapConstIt rowIt=rowMap_.begin();rowIt!=rowMap_.end();++rowIt) { for (VectorConstIt eltIt=rowIt->second.begin();eltIt!=rowIt->second.end();++eltIt) { if (eltIt->second != rhs.getEntry(rowIt->first,eltIt->first)) { return false; } } } return true; } template void MapSparse::generateDenseRandMat(MapSparse& mat, int q) { typedef typename Field::Element Element; size_t m=mat.rowdim(),n=mat.coldim(); Element d; for (size_t i=0;i void MapSparse::generateRandMat(MapSparse& mat, int nnz, int q) { typedef typename Field::Element Element; size_t m=mat.rowdim(),n=mat.coldim(); Element d; typedef std::pair CoordPair; typedef std::set PairSet; PairSet pairs; for(int i = 0; i < (int)nnz; ++i) { size_t row,col; do { row = randRange(0,(int)m); col = randRange(0,(int)n); } while (pairs.count(CoordPair(row,col))!=0); mat.field().init(d, randRange(1,q)); mat.setEntry(row,col,d); pairs.insert(CoordPair(row,col)); } } template void MapSparse::generateScaledIdent(MapSparse& mat, int alpha) { typedef typename Field::Element Element; size_t m=mat.rowdim(),n=mat.coldim(); size_t minDim=(m void MapSparse::generateSparseNonSingular(MapSparse& mat, int approxNNZ, int seed) { typedef typename Field::Element Element; int n=mat.rowdim(); linbox_check(mat.rowdim()==mat.coldim()); typename Field::RandIter r(mat.field(),0,seed); Element d; for (int i=0;i void MapSparse::generateCompanion(MapSparse& mat,std::vector& coeffs) { typedef typename Field::Element Element; int n=mat.rowdim(); linbox_check(mat.rowdim()==mat.coldim()); typename Field::RandIter r(mat.field()); Element d; mat.field().init(d,1); for (int i=1;i int MapSparse::randRange(int start, int end) { double rval = rand(); static const double NORMALIZING_CONSTANT = 1.0/(1.0+RAND_MAX); double normedRVal = rval*NORMALIZING_CONSTANT; double rangeSize = end-start; int offset = (int)(rangeSize*normedRVal); return start+offset; } } #endif // __LINBOX_MAP_SPARSE_INL // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/mats.C000066400000000000000000000231501347646240000157110ustar00rootroot00000000000000/* * examples/mats.C * * Copyright (C) 2017 D. Saunders, Z. Wang, J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/mats.C * @example examples/mats.C \brief example matrices that were chosen for Smith form testing. \ingroup examples \author bds & zw Various Smith form algorithms may be used for matrices over the integers or over Z_m. Moduli greater than 2^32 are not supported here. Several types of example matrices may be constructed or the matrix be read from a file. Run the program with no arguments for a synopsis of the command line parameters. For the "adaptive" method, the matrix must be over the integers. This is expected to work best for large matrices. For the "2local" method, the computation is done mod 2^32. For the "local" method, the modulus must be a prime power. For the "ilio" method, the modulus may be arbitrary composite. If the modulus is a multiple of the integer determinant, the integer Smith form is obtained. Determinant plus ilio may be best for smaller matrices. This example was used during the design process of the adaptive algorithm. */ #include #include #include using namespace std; //#include //#include "givaro/zring.h" //#include "linbox/integer.h" #include #include // place A: Edit here and at place B for ring change //#include //#include #include using namespace LinBox; template void Mat(DenseMatrix& M, PIR& R, int & n, string src) ; int main(int argc, char* argv[]) { if (argc < 3 or argc > 4) { cout << "usage: " << argv[0] << " type n [filename]" << endl; cout << " type = `random', `random-rough', `tref', or `fib'," << " and n is the dimension" << endl; cout << " If filename is present, matrix is written there, else to cout." << endl; return 0; } string type = argv[1]; int n = atoi(argv[2]); // place B: Edit here and at place A for ring change //typedef PIRModular PIR; typedef Givaro::ZRing PIR; PIR R; DenseMatrix M(R); Mat(M,R,n,type); if (argc == 4) { ofstream out(argv[3]); M.write(out) << endl; } else { M.write(cout) << endl; } }// main template < class Ring > void scramble(DenseMatrix& M) { Ring R = M.field(); int N,n = (int)M.rowdim(); // number of random basic row and col ops. N = n; for (int k = 0; k < N; ++k) { int i = rand()%(int)M.rowdim(); int j = rand()%(int)M.coldim(); if (i == j) continue; // M*i += alpha M*j and Mi* += beta Mj //int a = rand()%2; int a = 0; for (size_t l = 0; l < M.rowdim(); ++l) { if (a) R.subin(M[(size_t)l][(size_t)i], M[(size_t)l][(size_t)j]); else R.addin(M[(size_t)l][(size_t)i], M[(size_t)l][(size_t)j]); //K.axpy(c, M.getEntry(l, i), x, M.getEntry(l, j)); //M.setEntry(l, i, c); } //a = rand()%2; for (size_t l = 0; l < M.coldim(); ++l) { if (a) R.subin(M[(size_t)i][l], M[(size_t)j][l]); else R.addin(M[(size_t)i][l], M[(size_t)j][l]); } } } // This mat will have s, near sqrt(n), distinct invariant factors, // each repeated twice), involving the s primes 101, 103, ... template void RandomRoughMat(DenseMatrix& M, PIR& R, int n) { M.resize((size_t)n, (size_t)n, R.zero); if (n > 10000) {cerr << "n too big" << endl; exit(-1);} int jth_factor[130] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733}; for (int j= 0, i = 0 ; i < n; ++j) { typename PIR::Element v; R.init(v, jth_factor[25+j]); for (int k = j ; k > 0 && i < n ; --k) { M[(size_t)i][(size_t)i] = v; ++i; if (i < n) {M[(size_t)i][(size_t)i] = v; ++i;} } } scramble(M); } // This mat will have the same nontrivial invariant factors as // diag(1,2,3,5,8, ... 999, 0, 1, 2, ...). template void RandomFromDiagMat(DenseMatrix& M, PIR& R, int n) { M.resize((size_t)n,(size_t) n, R.zero); for (int i= 0 ; i < n; ++i) R.init(M[(size_t)i][(size_t)i], i % 1000 + 1); scramble(M); } // This mat will have the same nontrivial invariant factors as // diag(1,2,3,5,8, ... fib(k)), where k is about sqrt(n). // The basic matrix is block diagonal with i-th block of order i and // being a tridiagonal {-1,0,1} matrix whose snf = diag(i-1 1's, fib(i)), // where fib(1) = 1, fib(2) = 2. But note that, depending on n, // the last block may be truncated, thus repeating an earlier fibonacci number. template void RandomFibMat(DenseMatrix& M, PIR& R, int n) { M.resize((size_t)n,(size_t) n, R.zero); typename PIR::Element pmone; R.assign(pmone, R.one); for (int i= 0 ; i < n; ++i) M[(size_t)i][(size_t)i] = R.one; int j = 1, k = 0; for (int i= 0 ; i < n-1; ++i) { if ( i == k) { M[(size_t)i][(size_t)i+1] = R.zero; k += ++j; } else { M[(size_t)i][(size_t)i+1] = pmone; R.negin(pmone); } R.neg(M[(size_t)i+1][(size_t)i], M[(size_t)i][(size_t)i+1]); } scramble(M); } ////////////////////////////////// // special mats tref and krat // Trefethen's challenge #7 mat (primes on diag, 1's on 2^e bands). template void TrefMat(DenseMatrix& M, PIR& R, int n) { M.resize((size_t)n, (size_t)n, R.zero); std::vector power2; int i = 1; do { power2. push_back(i); i *= 2; } while (i < n); std::ifstream in ("prime", std::ios::in); for ( i = 0; i < n; ++ i) in >> M[(size_t)i][(size_t)i]; std::vector::iterator p; for ( i = 0; i < n; ++ i) { for ( p = power2. begin(); (p != power2. end()) && (*p <= i); ++ p) M[(size_t)i][(size_t)(i - *p)] = 1; for ( p = power2. begin(); (p != power2. end()) && (*p < n - i); ++ p) M[(size_t)i][(size_t)(i + *p)] = 1; } } //// end tref /////// begin krat ///////////////////////////// struct pwrlist { vector m; pwrlist(integer q) { m.push_back(1); m.push_back(q); //cout << "pwrlist " << m[0] << " " << m[1] << endl; } integer operator[](int e) { for (int i = (int)m.size(); i <= e; ++i) m.push_back(m[1]*m[(size_t)i-1]); return m[(size_t)e]; } }; // Read "1" or "q" or "q^e", for some (small) exponent e. // Return value of the power of q at q = _q. template num& qread(num& Val, pwrlist& M, istream& in) { char c; in >> c; // next nonwhitespace if (c == '0') return Val = 0; if (c == '1') return Val = 1; if (c != 'p' && c != 'q') { cout << "exiting due to unknown char " << c << endl; exit(-1);} in.get(c); if (c !='^') {in.putback(c); return Val = M[1];} else { int expt; in >> expt; return Val = M[expt]; }; } template void KratMat(DenseMatrix& M, PIR& R, int q) { pwrlist pwrs(q); for (unsigned int i = 0; i < M.rowdim(); ++ i) for ( unsigned int j = 0; j < M.coldim(); ++ j) { int Val; qread(Val, pwrs, cin); R. init (M[(size_t)i][(size_t)j], Val); } } ///// end krat //////////////////////////// /** Output matrix is determined by src which may be: "random-rough" This mat will have s, near sqrt(n), distinct invariant factors, each repeated twice), involving the s primes 101, 103, ... "random" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... 999, 0, 1, 2, ...). "fib" This mat will have the same nontrivial invariant factors as diag(1,2,3,5,8, ... fib(k)), where k is about sqrt(n). The basic matrix is block diagonal with i-th block of order i and being a tridiagonal {-1,0,1} matrix whose snf = diag(i-1 1's, fib(i)), where fib(1) = 1, fib(2) = 2. But note that, depending on n, the last block may be truncated, thus repeating an earlier fibonacci number. "file" (or any other string) Also "tref" and file with format "kdense" */ template void Mat(DenseMatrix& M, PIR& R, int & n, string src) { if (src == "random-rough") RandomRoughMat(M, R, n); else if (src == "random") RandomFromDiagMat(M, R, n); else if (src == "fib") RandomFibMat(M, R, n); else if (src == "tref") TrefMat(M, R, n); else if (src == "krat") KratMat(M, R, n); else { // from cin, mostly pointless, but may effect a file format change. M.read(cin); n = M.rowdim(); } } // Mat linbox-1.6.3/examples/minpoly.C000066400000000000000000000072411347646240000164370ustar00rootroot00000000000000/* * examples/minpoly.C * * Copyright (C) 2005, 2010 D Saunders, J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/minpoly.C * @example examples/minpoly.C \brief Minimal polynomial of a sparse matrix. \ingroup examples */ #include #include //! @bug this should be elsewhere template void printPolynomial (const Field &F, const Polynomial &v) { for (int i = (int)v.size () ; i-- ; ) { F.write (std::cout, v[(size_t)i]); if (i > 0) std::cout << " x^" << i << " + "; } std::cout << std::endl; } #include #include #include #include #include using namespace LinBox; using namespace std; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); int a = argc; while(a--){ cerr << "argv[" << a << "] = " << argv[a] << endl; } if (argc < 2) { cerr << "Usage: minpoly [

]" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } if (argc != 3) { int process = 0; Method::Blackbox M; #ifdef __LINBOX_HAVE_MPI Communicator C(&argc, &argv); process = C.rank(); M.communicatorp(&C); #endif Givaro::ZRing ZZ; typedef SparseMatrix> SpMat; /* SpMat A (ZZ); A.read (input); */ SpMat B (ZZ); B.read (input); typedef Transpose BB2; BB2 BT(B); // typedef DenseMatrix > BB2; // BB2 BT(ZZ, B.coldim(), B.rowdim()); // BT.random(); Compose A(B,BT); if(process == 0) cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; DensePolynomial > m_A(ZZ); minpoly (m_A, A, M); if(process == 0){ cout << "Minimal Polynomial is "; printPolynomial (ZZ, m_A); } // minpoly (m_A, A, Method::DenseElimination() ); // if(process == 0){ // cout << "Minimal Polynomial is "; // printPolynomial (ZZ, m_A); // } } else{ typedef Givaro::Modular Field; double q = atof(argv[2]); Field F(q); SparseMatrix B (F); B.read (input); cout << "B is " << B.rowdim() << " by " << B.coldim() << endl; DensePolynomial m_B(F); minpoly (m_B, B); cout << "Minimal Polynomial is "; printPolynomial (F, m_B); // minpoly (m_A, A, Method::DenseElimination() ); // cout << "Minimal Polynomial is "; // printPolynomial (F, m_B); } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/mpidet.C000066400000000000000000000053301347646240000162270ustar00rootroot00000000000000/* * examples/mpidet.C * * Copyright (C) 2006, 2010 B Youse, D Saunders * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/mpidet.C * @example examples/mpidet.C \brief Determinant of sparse matrix over Z or Zp. \ingroup examples */ //////#include #define __LINBOX_HAVE_MPI #include"linbox/linbox-config.h" #include"mpi.h" #include #include #include #include #include #include using namespace LinBox; using namespace std; int main (int argc, char **argv) { #ifdef __LINBOX_HAVE_MPI if (argc < 2) { cerr << "Usage: det " << endl; return -1; } // ex: ./det [matrix-file] else{ // For a small integer matrix test, do "make mpidet2 -f makefile.mpi" // set up parallel code object Communicator *Cptr = NULL; Cptr = new Communicator(&argc, &argv); typedef Givaro::ZRing Integers; Integers ZZ; ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } SparseMatrixA(ZZ); A.read(input); if(!Cptr->rank()){ cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; cout << "Beginning parallel computation with " << Cptr->size() << " processes." << endl; } Integers::Element det_A; // call parallel det with cra cra_det(det_A, A, RingCategories::IntegerTag(), Method::Auto(*Cptr), Cptr); // if parent process, report the determinant if(!Cptr->rank()){ cout << "Determinant is "; ZZ.write(cout, det_A) << endl; } // tie up parallel loose ends if necessary MPI_Finalize(); } return 0; #else cerr << "Compile with -D__LINBOX_HAVE_MPI" << endl; return -1 ; #endif } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/nullspacebasis.C000066400000000000000000000045171347646240000177630ustar00rootroot00000000000000/* * examples/nullspacebasis.C * * Copyright (C) 2014 J-G. Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/nullspacebasis.C * @example examples/nullspacebasis.C \brief NullSpace of sparse matrix over GFq. \brief nullspace is allocated m \times n. \ingroup examples */ #include #include "linbox/matrix/dense-matrix.h" #include #include "linbox/algorithms/gauss.h" using namespace LinBox; int main (int argc, char **argv) { if ( argc < 2 || argc > 4) { std::cerr << "Usage to get a random null space basis over GF(p,k): p [k]" << std::endl; return -1; } std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } //typedef Givaro::Modular Field; typedef Givaro::GFqDom Field; Field F(atoi(argv[2]),argc>3?atoi(argv[3]):1); SparseMatrix B (F); B.read (input); std::cout << "B is " << B.rowdim() << " by " << B.coldim() << std::endl; DenseMatrix NullSpace(F,B.coldim(),B.coldim()); GaussDomain GD(F); GD.nullspacebasisin(NullSpace, B); NullSpace.write( std::cerr << "X:=", Tag::FileFormat::Maple ) << ';' << std::endl; std::cerr << "NullsSpace dimensions:" << NullSpace.rowdim() << 'x' << NullSpace.coldim() << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/nullspacebasis_rank.C000066400000000000000000000054211347646240000207710ustar00rootroot00000000000000/* * examples/nullspacebasis_rank.C * * Copyright (C) 2014 J-G. Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/nullspacebasis_rank.C * @example examples/nullspacebasis_rank.C \brief NullSpace of sparse matrix over GFq. \brief nullspace is allocated rank \times n. \ingroup examples */ #include #include #include "linbox/matrix/dense-matrix.h" #include "linbox/algorithms/gauss.h" using namespace LinBox; int main (int argc, char **argv) { if ( argc < 2 || argc > 4) { std::cerr << "Usage to get a random null space basis over GF(p,k): p [k]" << std::endl; return -1; } std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } int pVal = atoi(argv[2]); //typedef Givaro::Modular Field; typedef Givaro::GFqDom Field; Field F(pVal, argc>3?atoi(argv[3]):1); SparseMatrix A (F); A.read (input); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; GaussDomain GD(F); typename Field::Element Det; size_t Rank; size_t Ni(A.rowdim()),Nj(A.coldim()); Permutation P(F,(int)Nj); GD.InPlaceLinearPivoting(Rank, Det, A, P, Ni, Nj ); for(size_t i=0; i< Ni; ++i) { if (A[i].size() == 0) { size_t j(i); if (nextnonzero(j,Ni,A)) { A[i] = A[j]; A[j].resize(0); } else { break; } } } size_t nullity = A.coldim()-Rank; DenseMatrix NullSpace(F,A.coldim(),nullity); GD.nullspacebasis(NullSpace, Rank, A, P); NullSpace.write( std::cerr << "X:=", Tag::FileFormat::Maple ) << ';' << std::endl; std::cerr << "NullsSpace dimensions:" << NullSpace.rowdim() << 'x' << NullSpace.coldim() << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/omp_block_rank.C000066400000000000000000000424731347646240000177360ustar00rootroot00000000000000/* * examples/omp_block_rank.C * * Copyright (C) 2010 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * This file is part of LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 2 of * the License, or (at your option) any later version. * * LinBox 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with LinBox. If not, see * . */ /*! @file examples/omp_block_rank.C * @example examples/omp_block_rank.C * @ingroup examples * @brief Block Wiedemann Rank with OpenMP */ #ifndef __GIVARO_USE_OPENMP #define __GIVARO_USE_OPENMP #endif #include #include #include #include #include #include #include #ifndef __LINBOX_USE_OPENMP #error "you have to compile this example with openmp enabled" #endif // ********************************************************** // Variable globale pour fixer le générateurs des FFT primes struct FFTSeeder { unsigned long seed; FFTSeeder(unsigned long s=0) : seed(s) {} void setseed(unsigned long s=0) { seed=s; } unsigned long operator()() const { return this->seed; } }; FFTSeeder FFTgenerator; #define FFT_PRIME_SEED FFTgenerator() // ********************************************************** #define LINBOX_EXTENSION_DEGREE_MAX 20 #include #include #include #include #include #include #include #include #include template void extractLeftSigma(const Field &F, std::vector > &S, std::vector >&SigmaBase, std::vector &defect, size_t block) { LinBox::BlasMatrixDomain _BMD(F); // take the block rows which have lowest defect // compute permutation such that first block rows have lowest defect std::vector Perm(2*block); for (size_t i=0;i<2*block;++i) Perm[i]=i; for (size_t i=0;i<2*block;++i) { size_t idx_min=i; for (size_t j=i+1;j<2*block;++j) if (defect[j]< defect[idx_min]) idx_min=j; std::swap(defect[i],defect[idx_min]); Perm[i]=idx_min; } LinBox::BlasPermutation BPerm(Perm); // Apply BPerm to the Sigma Base for (size_t i=0;i max) max=defect[i]; // prepare S to receive the sigma base const LinBox::DenseMatrix Zero(F,block,block); S.resize(max+1, Zero); // extract the sigma base //for (size_t k=0;k void write_sigma(const Field &F, const char* name, const std::vector > & P) { size_t m,n; m = P[0].rowdim(); n = P[0].coldim(); std::cerr< void scalarmulin(Container& C, const Field& F, const typename Field::Element& x) { for(typename Container::Iterator it=C.Begin();it!=C.End();++it) F.mulin(*it, x); } template void contaddin(Container1& C, const Field& F, const Container2& V) { typename Container1::Iterator cit=C.Begin(); typename Container2::ConstIterator vit=V.Begin(); for( ; cit!=C.End(); ++cit, ++vit) F.addin(*cit, *vit); } template void EvalPolyMat(Array& EvalDets, const Field& F, const LinBox::BlasMatrixDomain& D, const std::vector& matminpol, const Array& Points) { const long nump = Points.size(); std::cerr << "num procs: " << omp_get_num_procs() << std::endl; std::cerr << "max threads: " << omp_get_max_threads() << std::endl; std::cerr << "eval points: " << nump << std::endl; #pragma omp parallel for schedule(static) for(int i=0; i=0;--j) { scalarmulin(mat, F, Points[i]); contaddin(mat, F, matminpol[j]); } EvalDets[i] = D.det(mat); } // for(int i=0; i using namespace Givaro; template int OMP_BLOCK_RANK_main (const Field& F, int argc, char **argv) { LinBox::commentator().setMaxDetailLevel (-1); LinBox::commentator().setMaxDepth (-1); LinBox::commentator().setReportStream (std::cerr); OMPTimer chrono1,chrono2,chrono3,chrono4; chrono1.clear(); chrono2.clear(); chrono3.clear(); chrono4.clear(); Integer c; F.cardinality(c); unsigned long seed = (argc>4?atoi(argv[4]):0); FFTgenerator.setseed(seed); typename Field::RandIter generator (F,c,seed); LinBox::VectorDomain VD(F); std::ifstream input (argv[1]); LinBox::MatrixStream ms( F, input ); typedef LinBox::SparseMatrix Blackbox; typedef LinBox::DenseMatrix Block_t; Blackbox B (ms); std::cerr << "B is " << B.rowdim() << " by " << B.coldim() << std::endl; long M = B.rowdim() ; long N = B.coldim(); long R = (MN?M:N); int nb = (argc>3 ? atoi(argv[3]) : omp_get_max_threads() ); std::cerr << "block size: " << nb << std::endl; chrono1.start(); std::vector< std::vector< typename Field::Element > > LV(nb); for (typename std::vector< std::vector< typename Field::Element > >::iterator it = LV.begin(); it != LV.end(); ++it) { it->resize(R); for(typename std::vector::iterator vit=it->begin(); vit != it->end(); ++vit) generator.random( *vit ); // VD.write(output, *it) << std::endl; } Block_t LM(F, nb, R); for (size_t i=0; i < LM.rowdim(); ++i) { for (size_t j=0; j < LM.coldim(); ++j) { LM.setEntry(i,j, LV[i][j]); } } chrono1.stop(); std::cerr << "Generated " << nb << ' ' << R << "-vectors" << std::endl; std::cerr << chrono1 << std::endl; chrono2.start(); typedef LinBox::DenseMatrix Matrix; typedef std::vector Polynomial; const Matrix SigmaZero(F, 2*nb,2*nb); const Matrix SerieZero(F, 2*nb,nb); long d = 4+(R<<1)/nb; // define the serie and the sigmabase Polynomial Serie(d, SerieZero); Polynomial Sigma(d, SigmaZero); LinBox::DenseVector d1(F,S); for (int i = 0; i < S; i++) do generator.random (d1[i]); while (F.isZero (d1[i])); LinBox::Diagonal D1 (d1); LinBox::DenseVector d2(F,R); for (int i = 0; i < R; i++) do generator.random (d2[i]); while (F.isZero (d2[i])); LinBox::Diagonal D2 (d2); std::cerr << "num procs: " << omp_get_num_procs() << std::endl; std::cerr << "max threads: " << omp_get_max_threads() << std::endl; if (M>N) { #pragma omp parallel for firstprivate(B) schedule(static) for(int j=0; j v(S),u(S),w(R); std::vector< typename Field::Element > colonne(nb); LM.apply(colonne, LV[j]); for(int i=0;i v(S),u(S),w(R); std::vector< typename Field::Element > colonne(nb); LM.apply(colonne, LV[j]); for(int i=0;i defect(2*nb,0); for (int i=nb;i<2*nb;++i){ defect[i]=1; } LinBox::SigmaBasis SB(F, Serie); std::cerr<<"blockminpoly computation... "; SB.PM_Basis(Sigma, Serie, d-1, defect); std::cerr<<"done\n"; // write_sigma(F, "serie", Serie); // write_sigma(F, "sigma", Sigma); std::cerr<<"extracting bminpoly... "; std::vector LS2; extractLeftSigma(F, LS2, Sigma, defect, nb); std::cerr<<"done with size: " << LS2.size() << std::endl; std::cerr<<"Rank of the highest degree coefficient..."; unsigned long rdeg; LinBox::BlasMatrixDomain D(F); rdeg = D.rank(LS2[LS2.size()-1]); typename Field::Element d0,de; d0 = D.det(LS2[0]); de = D.det(LS2[LS2.size()-2]); if( ! ( F.isZero(d0) || F.isZero(de) ) ) { int rank = (int) ((LS2.size()-2)*(LS2[0].rowdim())+rdeg); chrono3.stop(); std::cerr<<"is " << rdeg << ", done.\n"; std::cerr << "Estimated rank: " << rank << std::endl; } else { chrono3.stop(); std::cerr<< "\n*** WARNING *** Insufficient information, interpolation required. You might also try again with a larger field.\n"; F.write(std::cerr<< "det(bm[0]): ", d0) << std::endl; std::cerr<< "rk(bm[0]): " << D.rank(LS2[0])<< std::endl; F.write(std::cerr<< "det(bm[" << (LS2.size()-2) << "]): ", de) << std::endl; std::cerr<< "rk(bm[" << (LS2.size()-2) << "]): "<< D.rank(LS2[LS2.size()-2]) << std::endl; std::cerr<< "rk(bm[" << (LS2.size()-1) << "]): "<< rdeg << std::endl; long def=0; if (F.isZero(d0)) ++def; if (F.isZero(de)) ++def; int rank = (int) ((LS2.size()-2-def)*(LS2[0].rowdim())+rdeg); std::cerr<< "*** VERY ROUGH *** rank approximation " << rank << std::endl; } std::cerr << "recursive PMBasis CPU time (s) : " << chrono3.usertime() << std::endl< PolyCRT; typedef typename PolyCRT::array_T VScal; VScal EvalPoints( LS2.size()*nb ); for(typename VScal::iterator itp = EvalPoints.begin(); itp != EvalPoints.end(); ++itp) { do { do generator.random (*itp); while (F.isZero (*itp)); } while ( (std::find(EvalPoints.begin(), itp, *itp) != itp)) ; } VScal EvalDets( EvalPoints.size() ); EvalPolyMat(EvalDets, F, D, LS2, EvalPoints); PolyCRT Interpolator(F, EvalPoints, "Y"); typename PolyCRT::Element Determinant; Interpolator.RnsToRing(Determinant, EvalDets); chrono4.stop(); std::cerr << "done\n"; // Interpolator.write(std::cerr << "Determinant of MinPoly: ", Determinant) << std::endl; Degree deg; Interpolator.getpolydom().degree(deg, Determinant); Degree val; Interpolator.getpolydom().val(val, Determinant); F.write(std::cerr, Determinant[0]) << " + "; if (val > 0) F.write(std::cerr<< "... + ", Determinant[val.value()]) << "Y^" << val << " + "; std::cerr << "... + "; if (Determinant.size() >= 2) { F.write(std::cerr, Determinant[Determinant.size()-2]) << "Y^" << (deg-1) << " + "; } F.write(std::cerr, Determinant[Determinant.size()-1]) << "Y^" << deg << std::endl; typename Field::Element t, p2; F.assign(p2, F.zero); if (Determinant.size() >= 2) { F.neg(p2, Determinant[ Determinant.size()-2]); F.divin(p2, Determinant[ Determinant.size()-1]); } if (M>N) { typedef LinBox::Transpose AT_BB; typedef LinBox::Compose< LinBox::Diagonal, AT_BB > DAT_BB ; typedef LinBox::Compose< DAT_BB, LinBox::Diagonal > DATD_BB; typedef LinBox::Compose< DATD_BB, Blackbox> DATDA_BB; typedef LinBox::Compose< DATDA_BB, LinBox::Diagonal > DATDAD_BB; AT_BB AT(&B); DAT_BB B1(&D2, &AT); // B1 = D2 B^T DATD_BB B2(&B1, &D1); // B2 = B1 D1 = D2 B^T D1 DATDA_BB B3(&B2, &B); // B3 = B2 B = D2 B^T D1 B DATDAD_BB B4(&B3, &D2); // B4 = B3 D2 = D2 B^T D1 B D2 std::cerr << "B4: " << B4.rowdim() << "x" << B4.coldim() << std::endl; // trace(t, B4); LinBox::WhisartTraceTranspose(t, F, D2, B, D1); F.write(std::cerr << "Trace D2 B^T D1 B D2: ", t) << std::endl; } else { typedef LinBox::Compose< LinBox::Diagonal, Blackbox > DA_BB; typedef LinBox::Compose< DA_BB, LinBox::Diagonal > DAD_BB; typedef LinBox::Transpose AT_BB; typedef LinBox::Compose< DAD_BB, AT_BB> DADAT_BB; typedef LinBox::Compose< DADAT_BB, LinBox::Diagonal > DADATD_BB; DA_BB B1(&D2, &B); // B1 = D2 B DAD_BB B2(&B1, &D1); // B2 = B1 D1 = D2 B D1 AT_BB AT(&B); DADAT_BB B3(&B2, &AT); // B3 = B2 B^T= D2 B D1 B^T DADATD_BB B4(&B3, &D2); // B4 = B3 D2 = D2 B D1 B^T D2 std::cerr << "B4: " << B4.rowdim() << "x" << B4.coldim() << std::endl; // trace(t, B4); LinBox::WhisartTrace(t, F, D2, B, D1); F.write(std::cerr << "Trace D2 B D1 B^T D2: ", t) << std::endl; } if (! F.areEqual( t, p2 )) { std::cerr << "*** FAILURE (" << (deg-val) << ") ***" << std::endl; F.write(std::cerr << "Trace: ", t) << std::endl; F.write(std::cerr << "Minpo: ", p2) << std::endl; } else { // std::cerr << "Degree - valuation: " << (deg-val) << std::endl; std::cerr << "MONTE CARLO RANK: " << (deg-val) << std::endl; } std::cerr << chrono4 << std::endl; std::cerr << "Rank |\t Time-genvect\t Time-seq\t Time-SB\t Time-Interp |\t Total-Time" << std::endl; std::cout << (deg-val) << std::scientific << std::setprecision(3) << " |\t" << chrono1.usertime() << '\t' << chrono2.usertime() << '\t' << chrono3.usertime() << '\t' << chrono4.usertime() << " |\t" << (chrono1.usertime()+chrono2.usertime()+chrono3.usertime()+chrono4.usertime()) << std::endl; return 0; } int main (int argc, char **argv) { // argv[1]: matrix file name // argv[2]: [optional] field characteristic (default 65521) // argv[3]: [optional] block size (default omp_max_threads) // argv[4]: [optional] random generator seed int c = (argc>2 ? atoi(argv[2]) : 65521); unsigned long extend = (unsigned long)FF_EXPONENT_MAX(c,(int)LINBOX_EXTENSION_DEGREE_MAX); if (extend > 1) { std::cerr << "*** WARNING *** would be best using an extension field of degree " << extend << std::endl; } #if 0 if (extend > 1) { typedef Givaro::GFqDom Field; Field EF( (unsigned long)c, extend); EF.write(std::cerr << "Using an extension field ") << std::endl; return OMP_BLOCK_RANK_main(EF,argc,argv); } #endif // else { typedef Givaro::Modular Field; Field F(c); return OMP_BLOCK_RANK_main(F,argc,argv); // } } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/poly-smith.C000066400000000000000000000064341347646240000170600ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace LinBox; using namespace std; /// Prints out a matrix in maple format template void printMatrix(MatrixDom MD, Matrix A) { typename MatrixDom::Field::Element tmp; cout << "<"; for (size_t i = 0; i < A.rowdim(); i++) { if (i != 0) cout << ","; MD.field().write(cout << "<", A.getEntry(tmp, i, 0)); for (size_t j = 1; j < A.coldim(); j++) { MD.field().write(cout << "|", A.getEntry(tmp, i, j)); } cout << ">"; } cout << ">" << endl; } /// Prints a vector as a list template void printVector(Field F, Vector S) { F.write(cout << "[", S[0]); for (size_t i = 1; i < S.size(); i++) F.write(cout << ",", S[i]); cout << "]" << endl; } /// Makes vector polynomials monic template void normalize(PolyDom &PD, Vector &S) { typedef typename PolyDom::Type_t Scalar; for (size_t i = 0; i < S.size(); i++) { Scalar lcoef; PD.leadcoef(lcoef, S[i]); PD.divin(S[i], lcoef); } } int main(int argc, char **argv) { typedef Givaro::Modular BaseDom; typedef Givaro::Poly1Dom PolyDom; typedef GivaroPoly Field; typedef MatrixDomain MatrixDom; typedef DenseMatrix Matrix; if (argc < 4) { cout << "Generates a random GF(p)^(n-by-n) with polynomial coefficients with degree=d" << endl; cout << "Use: ./polysmith

" << endl; return 1; } int p = atoi(argv[1]); int n = atoi(argv[2]); int d = atoi(argv[3]); BaseDom BD(p); PolyDom PD(BD, "x"); Field F(PD); MatrixDom MD(F); Matrix M(F, n, n); GivaroPolyRandIter Rand(F); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { Field::Element tmp; Rand.random(tmp, Givaro::Degree(d)); M.setEntry(i, j, tmp); } } printMatrix(MD, M); // Text Book SF Domain // Comment out this block if things are getting too slow SmithFormTextbookDomain SFD(MD); DenseVector S1(F, n, F.zero); Givaro::Timer t1; t1.start(); SFD.solve(S1, M); t1.stop(); normalize(F, S1); printVector(F, S1); // Kannan-Bachem w/ Chou-Collins Improvement Domain SmithFormKannanBachemDomain SFKB(MD); DenseVector S2(F, n, F.zero); Givaro::Timer t2; t2.start(); SFKB.solve(S2, M); t2.stop(); normalize(F, S2); printVector(F, S2); cout << "SFD: " << n << " " << p << " " << d << " " << t1.usertime() << endl; cout << "SFK: " << n << " " << p << " " << d << " " << t2.usertime() << endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/power_rank.C000066400000000000000000000113761347646240000171230ustar00rootroot00000000000000/* * examples/power_rank.C * * Copyright (C) 2005, 2010 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/power_rank.C * @example examples/power_rank.C \brief Rank of sparse matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include using namespace LinBox; using namespace std; template int tmain (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file: " << argv[1] << endl; return -1; } Base p; Givaro::Caster(p,Givaro::Integer(argv[2])); Base q; Givaro::Caster(q,Givaro::Integer(argv[3])); typedef Givaro::Modular Field; typedef SparseMatrix SparseMat; Field F(q); MatrixStream ms( F, input ); SparseMat B (ms); cout << "B is " << B.rowdim() << " by " << B.coldim() << endl; if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout,Tag::FileFormat::Maple) << endl; // using Sparse Elimination PowerGaussDomain< Field > PGD( F ); std::vector > local; Permutation Q(F,B.coldim()); // 1: StPr |= PRESERVE_UPPER_MATRIX // 2: StPr |= PRIVILEGIATE_REDUCING_FILLIN // 4: StPr |= PRIVILEGIATE_NO_COLUMN_PIVOTING size_t StPr( argc>5? atoi(argv[5]): 0); Givaro::Timer tq; tq.clear(); tq.start(); if (StPr) PGD(local, B, Q, q, p, StPr); else PGD(local, B, Q, q, p); tq.stop(); F.write(std::cout << "Local Smith Form ") << " : " << std::endl << '('; int num = B.rowdim(); for (auto ip = local.begin(); ip != local.end(); ++ip) { std::cout << '[' << ip->first << ',' << ip->second << "] "; num -= ip->second; } if (num > 0) std::cout << '[' << F.zero << ',' << num << "] "; std::cout << ")" << std::endl; // Reposition Output with empty rows at the end auto newend = std::remove_if( B.rowBegin(), B.rowEnd(), [](typename SparseMat::ConstRow V)->bool { return V.size()==0; }); B.refRep().erase(newend, B.rowEnd()); B.refRep().resize(B.rowdim()); if (B.rowdim() <= 20 && B.coldim() <= 20) { B.write(cerr,Tag::FileFormat::Maple) << endl; Q.write(cerr,Tag::FileFormat::Maple) << endl; } std::cerr << tq << std::endl; return 0; } int main(int argc, char ** argv) { if (argc < 4 || argc > 6) { cerr << "Usage: power_rank [] []" << endl; cerr << " methods: \ 0=automatic, \ 1=int_64_t, \ 2=Integer, \ 6-11=ruint" << endl; return -1; } size_t method( argc>4? atoi(argv[4]) : 0); Givaro::Integer q(argv[3]); const size_t logq( (size_t)ceil(logtwo(q)) ); if ( (method == 1) || ( (method==0) && (logq<63) ) ) { return tmain(argc,argv); } else { if ( (method == 2) ) { return tmain(argc,argv); } else { if (! method) method = (size_t)std::max(6., ceil(log(logq)/log(2.)) ); switch (method) { case 6: return tmain>(argc,argv); case 7: return tmain>(argc,argv); case 8: return tmain>(argc,argv); case 9: return tmain>(argc,argv); case 10: return tmain>(argc,argv); case 11: return tmain>(argc,argv); default: return tmain(argc,argv); } } } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/poweroftwo_ranks.C000066400000000000000000000120761347646240000203630ustar00rootroot00000000000000/* examples/poweroftwo_ranks.C * * Copyright (C) 2012 LinBox * Written by J-G Dumas * Time-stamp: <21 Dec 18 10:08:04 Jean-Guillaume.Dumas@imag.fr> * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/poweroftwo_ranks.C * @example examples/poweroftwo_ranks.C \brief Ranks of sparse matrix modulo 2^k \ingroup examples */ #include #include #include #include #include #include using namespace LinBox; using namespace std; template > void runpoweroftworank(ifstream& input, const size_t exponent, size_t StPr) { // typedef std::vector > Smith_t; typedef Ring_type Ring; // signed ? typedef LinBox::SparseMatrix SparseMat; SmithList local; Ring R; LinBox::MatrixStream ms( R, input ); SparseMat A (ms); input.close(); LinBox::PowerGaussDomainPowerOfTwo< Int_type > PGD; LinBox::GF2 F2; Permutation Q(F2,A.coldim()); cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(cout,Tag::FileFormat::Maple) << endl; Givaro::Timer tim; tim.clear(); tim.start(); if (StPr) PGD(local, A, Q, exponent, StPr); else PGD(local, A, Q, exponent); tim.stop(); R.write(std::cout << "Local Smith Form ") << " : " << std::endl << '('; int num = A.rowdim(); for (auto p = local.begin(); p != local.end(); ++p) { std::cout << '[' << p->first << ',' << p->second << "] "; num -= p->second; } if (num > 0) std::cout << '[' << F2.zero << ',' << num << "] "; std::cout << ')' << std::endl; // // Reposition Output with empty rows at the end // auto newend = std::remove_if( // A.rowBegin(), A.rowEnd(), // [](typename SparseMat::ConstRow V)->bool { return V.size()==0; }); // A.refRep().erase(newend, A.rowEnd()); // A.refRep().resize(A.rowdim()); if (A.rowdim() <= 20 && A.coldim() <= 20) { A.write(cerr,Tag::FileFormat::Maple) << endl; Q.write(cerr,Tag::FileFormat::Maple) << endl; } std::cerr << tim << std::endl; } int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 3 || argc > 5) { cerr << "Usage: rank [] []" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file: " << argv[1] << endl; return -1; } int method( argc>3? atoi(argv[3]): 0 ); Givaro::Timer tim; int exponent = atoi(argv[2]); // 1: StPr |= PRESERVE_UPPER_MATRIX // 2: StPr |= PRIVILEGIATE_REDUCING_FILLIN // 4: StPr |= PRIVILEGIATE_NO_COLUMN_PIVOTING size_t StPr( argc>4? atoi(argv[4]): 0); if ((method == 2) || ((method == 0) && (exponent >= (1<<11))) ) { runpoweroftworank(input, exponent, StPr); } else { if ((method == 1) || ((method == 0) && (exponent < 64)) ) { runpoweroftworank(input, exponent, StPr); } else { switch (method) { case 6: runpoweroftworank>(input, exponent, StPr); break; case 7: runpoweroftworank>(input, exponent, StPr); break; case 8: runpoweroftworank>(input, exponent, StPr); break; case 9: runpoweroftworank>(input, exponent, StPr); break; case 10: runpoweroftworank>(input, exponent, StPr); break; case 11: runpoweroftworank>(input, exponent, StPr); break; default: std::cerr << "Choose between ruint<6> ... ruint<11>" << std::endl; break; } } } std::cerr << tim << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/qchar.C000066400000000000000000000314571347646240000160540ustar00rootroot00000000000000/* * examples/qchar.C * * Copyright (C) 2007, 2010 A. Urbanska * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/qchar.C * @example examples/qchar.C * @ingroup examples * @brief Undocumented. */ #include #include #include #include #include #include #include using namespace LinBox; using namespace std; typedef Givaro::ZRing Integers; typedef Integers::Element Integer; typedef Givaro::Modular Field; typedef Field::Element Element; typedef Vector::Dense DVector; typedef GMPRationalField Rationals; typedef Rationals::Element Quotient; typedef DenseMatrix Blackbox; typedef SparseMatrix RBlackbox; //#define _LB_CONT_FR typedef UserTimer myTimer; myTimer tRationalModular; template std::ostream& printPolynomial (std::ostream& out, const Field &F, const Polynomial &v) { for (int i = v.size () - 1; i >= 0; i--) { F.write (out, v[i]); if (i > 0) out << " X^" << i << " + "; out << "\n"; } return out; } template struct PrecRationalModularCharpoly { const Blackbox &A; const MyMethod &M; const Integer ≺ PrecRationalModularCharpoly(const Integer& detPrec, const Blackbox& b, const MyMethod& n) : prec(detPrec), A(b), M(n) {} template Polynomial& operator()(Polynomial& P, const Field& F) const { typedef typename Blackbox::template rebind::other FBlackbox; FBlackbox * Ap; tRationalModular.clear(); tRationalModular.start(); MatrixHom::map(Ap, A, F); tRationalModular.stop(); //minpoly(P, *Ap, typename FieldTraits::categoryTag(), M); charpoly( P, *Ap, typename FieldTraits::categoryTag(), M); //minpolySymmetric(P, *Ap, typename FieldTraits::categoryTag(), M); integer p; F.characteristic(p); cout<<"Valence "< struct PrecRationalModularMinpoly { const Blackbox &A; const MyMethod &M; const DVector ≺ PrecRationalModularMinpoly(const DVector& detPrec, const Blackbox& b, const MyMethod& n) : prec(detPrec), A(b), M(n) {} template IterationResult operator()(Polynomial& P, const Field& F) const { typedef typename Blackbox::template rebind::other FBlackbox; FBlackbox * Ap; tRationalModular.clear(); tRationalModular.start(); MatrixHom::map(Ap, A, F); tRationalModular.stop(); //minpoly(P, *Ap, typename FieldTraits::categoryTag(), M); //charpoly( P, *Ap, typename FieldTraits::categoryTag(), M); minpolySymmetric(P, *Ap, typename FieldTraits::categoryTag(), M); integer p; F.characteristic(p); //cout<<"Det(A) mod "< void generate_precRatMat(string& filename, RMatrix& M, DVector& den, Integer& denPrec); void i_vti_v(RBlackbox& Res, DenseMatrix& M, DVector& den, Integer& detPrec); int main (int argc, char** argv) { if ((argc < 3) || (argc > 4) ) { cout << "Usage: qchar n matrix" << endl; return -1; } size_t n = atoi(argv[1]); cout << "Matrix size " << n<< endl; string filename; filename=argv[2]; Integers Z; Rationals Q; Integer detPrec = 1; Integer detNum; Integer detDen; Blackbox DM(Z,n,n); DenseMatrix In(Q,n,n); RBlackbox M(Q,n,n); DVector V(n,1); // generate_precRatMat(filename, In, V, detPrec); //i_vti_v(M,In, V, detPrec); generate_precRatMat(filename, M, V, detPrec); cout << "detPrec is " << detPrec << "\n"; typedef PolynomialRing IntPolRing; IntPolRing::Element c_A; Integer max = 1,min=0; for (size_t i=0; i < n; ++i) { for (size_t j=0; j < n; ++j) { Integer a; Q.convert(a,M.getEntry(i,j)); // cerr<<"it="<<(*it)< a) min = a; } } if (max<-min) max=-min; else max = max+1; double hadamarcp = (double)n/2.0*(log(double(n))+2*log(double(max))+0.21163275)/log(2.0); cout << "had" << hadamarcp << "\n"; cout << "had2" << (Integer)hadamarcp*detPrec << "\n"; PrimeIterator genprime(FieldTraits::bestBitSize(M.coldim())); ChineseRemainder< CRABuilderEarlyMultip > cra(LINBOX_DEFAULT_EARLY_TERMINATION_THRESHOLD); typedef Method::Auto MyMethod; MyMethod Met; //PrecRationalModularCharpoly iteration (detPrec, M, Met); PrecRationalModularMinpoly< RBlackbox ,MyMethod> iteration(V, M, Met); cra (c_A, iteration, genprime); printPolynomial(cout, Z, c_A); return 0 ; } /* for a rational number num/den construct a continued fraction approximation: - with den bounded by den_bound AND - number of steps bounded by s NEW fraction replaces num/den */ void continuedFractionIn(Integer& num, Integer& den, double epsi,const size_t s, Integer den_bound) { //den_bound = 100; Integer a=num; Integer b=den; Integer t; //double y; Integer f[s]; f[0] = a/b;// y = f[0]; int i=1; while (1) //abs(y-x)>=epsi) { //cout << "a :" << a << " b: " << b << "\n"; t = a%b; a = b; b = t; f[i] = a/b; //y = (double)f[i]; num = 1; den = f[i]; for (int j=i-1; j > 0; --j) { Integer tmp = num; num = den; den = f[j]*den+tmp; //y = (double)f[j]+1/y; } //y = (double)f[0]+1/y; num = den*f[0]+num; if (den >= den_bound) break; ++i; if (i >= s) { break; } } } void i_vti_v(RBlackbox& Res, DenseMatrix& M, DVector& den, Integer& detPrec) { detPrec=1; Rationals Q; int n = M.coldim(); //DVector denV(n,1); for (int i=0; i < den.size();++i) den[i]=1; for (int i=0; i < n; ++i) { for (int j=0; j <=i ; ++j) { Integer q_num =0; Integer q_den =1; for (int k=0; k < n; ++k) { Integer deno_ik, nume_ik, deno_jk, nume_jk, deno, nume; Q.get_den (deno_ik, M.getEntry(k,i)); Q.get_num (nume_ik, M.getEntry(k,i)); Q.get_den (deno_jk, M.getEntry(k,j)); Q.get_num (nume_jk, M.getEntry(k,j)); if (i==k) { nume_ik = deno_ik-nume_ik; } else { nume_ik = -nume_ik; } if (j==k) { nume_jk = deno_jk-nume_jk; } else { nume_jk = -nume_jk; } //cout << nume_ik << nume_jk; deno = deno_ik*deno_jk; nume = nume_ik*nume_jk; //cout << q_num << "/" << q_den << " " ; //cout << nume << "/" << deno << " " ; if (deno==q_den) q_num+=nume; else { if (nume != 0) { Integer g = gcd(q_den, deno); q_num = q_num*deno/g+nume*q_den/g; q_den = q_den*deno/g; } } //cout << q_num << "/" << q_den << " " ; } if (q_num != 0) { Quotient q(q_num,q_den); if (i!=j) { den[i]=lcm(den[i], q_den); den[j]=lcm(den[j], q_den); Res.setEntry(i,j,q); Res.setEntry(j,i,q); cout << i << " " << j << " " << q_num << "/" << q_den << "\n"; cout << j << " " << i << " " << q_num << "/" << q_den << "\n"; } else { den[i]=lcm(den[i], q_den); Res.setEntry(i,j,q); cout << i << " " << j << " " << q_num << "/" << q_den << "\n"; } } } } Integer d = 1; for (int i=0; i < den.size(); ++i) { detPrec *=den[i]; d = lcm(d, den[i]); } den[den.size()-1]=d; for (int i=den.size()-2; i >=0; --i) { den[i]=d*den[i+1]; } } template void generate_precRatMat(string& filename, RMatrix& M, DVector& den, Integer& denPrec) { int prec=10; denPrec = 1; ifstream is(filename.c_str(), std::ios::in); int m,n; char c; is >> m >> n; do is >> c; while (isspace (c)); if ((m > M.rowdim()) || (n > M.coldim())) { cout << m << " " << n << " " ; cout << "Wrong matrix size\n"; return; } cout << "Reading matrix\n"; den.resize(m,1); while (1) {//! @todo temp fix #if 0 while (is >> m) //temp fix if (m==0) break;//temp fix #endif is >> m;//temp fix is >> n; #if 0 cout << m << n << "\n"; long double x; is >> x; #endif char xstr[500]; char numstr[500]; #if 0 cout << x << " "; sprintf(xstr, "%100f", x); cout << xstr << " " ; is >> c; int i=0; while (c!= '\n') { xstr[i]=c; ++i; is >> c; if (i>=199) { xstr[i]=0; break; } } is >> c; #endif is.getline(xstr,500); Integer ten=1; if (strchr(xstr, '/') != NULL) { //cout << "xstr " << xstr << "\n"; //! @bug non reentrant strtok strcpy(numstr, strtok(xstr, "/")); char tenstr[500]; strcpy(tenstr, strtok(NULL, "/")); if (prec < strlen(tenstr)) { int cut = strlen(tenstr)-prec; tenstr[prec]=0; //c = numstr[strlen(numstr)-2]; numstr[strlen(numstr)-cut]=0;//temp round down } Integer tmp(tenstr); ten = tmp; //cout << numstr << "/" << ten << "\n"; } else { // cout << "xstr" << xstr << " " ; int i=0; int j=0; c=xstr[i]; ++i; while (isspace (c)) { if (i >=strlen(xstr)) break; c=xstr[i]; ++i; } if (c=='-') { numstr[j]=c;++j; if (i < strlen(xstr)) { c = xstr[i]; ++i; } } if (c=='0') { //cout << "zero"; if (i < strlen(xstr)) { c = xstr[i]; ++i; } } //else cout << " not 0" << c; while (strchr("0123456789",c) != NULL) { //cout << "number"; numstr[j]=c; ++j; if (i >=strlen(xstr)) break; c=xstr[i]; ++i; } if (c=='.') { if (i < strlen(xstr)) { c = xstr[i]; //cout << "c" << c ; ++i; while (strchr("0123456789",c) != NULL) { numstr[j]=c;++j; if (i >=strlen(xstr)) break; c=xstr[i]; ++i; } } else { cout << "wrong number format at ."; break; } } numstr[j]=0; //cout << "num" << numstr << " " ; size_t dplaces=0; int exp=0; j=0; c = xstr[j]; ++j; while (c != '.') { if (j >= strlen(xstr)) break; c = xstr[j]; ++j; } if (j < strlen(xstr)) { c = xstr[j]; ++j; while (c != 'e') { ++dplaces; ten *= 10; if (j >= strlen(xstr)) break; c = xstr[j]; ++j; } } if (j < strlen(xstr)) { sscanf(xstr+j, "%d", &exp); j=j-2;c = xstr[j]; while (c=='0') { ten/=10; --j; c = xstr[j]; } } dplaces -=exp; if (exp > 0) { for (int i=0; i < exp; ++i) ten /=10; } else if (exp < 0) { for (int i=0; i < exp; ++i) ten *=10; } //double nume = x * (double)ten; } Integer num (numstr); Integer g; #ifdef _LB_CONT_FR double epsi = 1/(double)ten*10; size_t s=10; continuedFractionIn(num, ten, epsi, s, ten); #endif //cout << m << " " << n << " " << num << "/" << ten << "\n"; g = gcd(num,ten); //g =1; Quotient q(num/g,ten/g); if ((m==0)&&(n==0)&&(num==0)) break;//temp fix //M.setEntry(m-1,n-1,q);//temp fix M.setEntry(m,n,q); den[m-1] = lcm(den[m-1],ten/g); } Integer d = 1; for (int i=0; i < den.size(); ++i) { denPrec *=den[i]; d = lcm(d, den[i]); } den[den.size()-1]=d; cout << d << "\n"; for (int i=den.size()-2; i >=0; --i) { den[i]=d*den[i+1]; cout << den[i] << "\n"; } } #undef _LB_CONT_FR // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/rank.C000066400000000000000000000071501347646240000157020ustar00rootroot00000000000000/* * examples/rank.C * * Copyright (C) 2005, 2010 D. Saunders, J-G Dumas * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/rank.C * @example examples/rank.C \brief Rank of sparse matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include #include #include #include #include #include #define SP_STOR SparseMatrixFormat::SparseSeq using namespace LinBox; /// rank or rank mod p int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 3) { std::cerr << "Usage: rank [

]" << std::endl; return -1; } std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file: " << argv[1] << std::endl; return -1; } size_t r; Givaro::QField QQ; LinBox::Timer tim ; tim.clear() ; tim.start(); MatrixStream> ms (QQ, input); SparseMatrix, SP_STOR> A ( ms ); tim.stop(); std::cout << "matrix is " << A.rowdim() << " by " << A.coldim() << " (" << tim << ")" << std::endl; tim.clear() ; tim.start(); if (argc == 2) { // rank over the rational numbers. /* We could pick a random prime and work mod that prime, But * the point here is that the rank function in solutions/ * handles that issue. Our matrix here is an integer or * rational matrix and our concept is that we are getting the * rank of that matrix by some blackbox magic inside linbox. */ LinBox::rank (r, A); } if (argc == 3) { // rank mod a prime uint32_t q = atoi(argv[2]); if (q == 0) { std::cerr << "second argument should be a non-zero integer or missing\n"; return -1; } typedef Givaro::Modular Field; Field F(q); if (q > F.maxCardinality()) { std::cerr << "your number is too big for this field" << std::endl; return -1 ; } SparseMatrix B (F, A.rowdim(), A.coldim());// modular image of A MatrixHom::map(B, A); tim.stop(); std::cout << "matrix is " << B.rowdim() << " by " << B.coldim() <<" (time for map: "<< tim << ")" << std::endl; tim.clear();tim.start(); //if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(std::cout) << std::endl; // Using the adaptive LinBox Solution LinBox::rank(r,B); } tim.stop(); std::cout << "Rank is " << r << " (" << tim << " )" << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/rr.C000066400000000000000000000052741347646240000153770ustar00rootroot00000000000000/* * examples/rr.C * * Copyright (C) 2008, 2010 A. Urbanska * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file examples/rr.C * @example examples/rr.C * @ingroup examples * @brief Rational Reconstruction. */ #include #include #include #include #include #include using namespace LinBox; using namespace std; typedef Givaro::ZRing Ints; //typedef Ints::Element Integer; int main (int argc, char **argv) { srand48( time(NULL) ); integer a,b; integer x(1); integer m(1); x = x*rand()*rand()*rand()*rand()*rand()*rand(); m = m*rand()*rand()*rand()*rand()*rand()*rand()*rand()*rand(); if (x > m) {integer t=x; x=m; m=t;} cout << "Searching a,b: a =" << x << "b mod " << m << endl << flush; cout << "size of m" << m.bitsize() << endl << flush; Ints Z; WangClassicRationalReconstruction RRB(Z,true,false); //RationalReconstruction > RR(RRB); //RationalReconstruction > RR(Z); //RationalReconstruction > RR(Z); RationalReconstruction > RR(Z); LinBox::UserTimer t; t.clear(); t.start(); for (int i=0; i < 1 ; ++i) { if (RR.reconstructRational(a,b,x,m,5)) { cout << "Found a,b: "<< a <<"=" << x << "x" << b << " mod " << m << endl << flush; cout << "Does agree with bounds\n"; } else { cout << "Found a,b: "<< a <<"=" << x << "x" << b << " mod " << m << endl << flush; cout << "Does not agree with bounds\n"; } } t.stop(); cout << "Time:"; t.print(cout); cout << endl; return 0 ; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/samplebb.C000066400000000000000000000154601347646240000165370ustar00rootroot00000000000000/* * examples/samplebb.C * * Copyright (C) 2005, 2010 D Saunders * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/samplebb.C * @example examples/samplebb.C * \ingroup examples * \brief generate an example matrix with specified frobenius form. * * samplebb takes options and any number of argument triples denoting companion * matrix blocks. * For example, the call "samplebb -r 7 2 3 a3 1 1" generates a sparsely * randomized matrix (because of the '-r' option) matrix which is similar * (because of the two triples '7 2 3' and 'a2 1 1') to a direct sum of 3 * companion matrices for (x-7)^2 plus one companion matrix for x^3 + x + 2, the * polynomial denoted by 'a3'. * * In general, in the first position of each triple 'aK' denotes the polynomial * x^k + x + K-1 and a number n denotes the polynomial x-n. The second number * in the triple specifies a power of the polynomial and the third specifies how * many companion matrix blocks for that power of that polynomial. * * Possible options are * -r lightly randomized similarity transform, matrix remains sparse. * -R fully randomized similarity transform, matrix becomes dense. * * The matrix is written to standard out in SMS format (triples). * * For some other examples: * "samplebb 1 1 2 2 1 2 4 1 2 12 1 1 0 1 1" is a 8 by 8 diagonal matrix in smith form, * diag(1,1,2,2,4,4,12,0) * */ #include #include #include #include #include #include #include #include #include #include using std::string; using std::list; using LinBox::Companion; using LinBox::DirectSum; using LinBox::DenseMatrix; using LinBox::NTL_ZZ; using NTL::ZZX; void stripOptions(int& acp, char* avp[], string& opts, const int ac, char** av) { acp = 0; for (int i = 1; i < ac; ++i) { //std::cout << av[i] << " "; if (av[i][0] == '-') { for (const char* j = av[i]+1; *j != 0; ++j) opts.push_back(*j); } else { avp[acp] = av[i]; ++acp; } } } template void augmentBB(List& L, char* code, int e, int k, const Ring& R) { typedef typename Ring::Element Int; Int a; ZZX p; // build poly p if ( *code != 'a') // build linear poly { R.init(a, -atoi(code)); p += ZZX(0, a); p += ZZX(1, R.one); } else // build long poly { int n = atoi(code+1); R.init(a, n-1); p += ZZX(n, R.one); p += ZZX(1, R.one); p += ZZX(0, a); } //std::cout << "(code, e, k) =(" << code << ", " << e << ", " << k << ")" << std::endl; //std::cout << "Correspoding poly: " << p << std::endl; // compute q = p^e ZZX q(0, R.one); for(int i = 0; i < e; ++i) q *= p; //std::cout <<"Polynomial: " << q << std::endl; LinBox::DenseVector v(R,deg(q)+1); for (int i = 0; i < v.size(); ++i) v[i] = coeff(q, i); // companion matrix of q Companion* C = new Companion(R, v); for(int i = 0; i < k; ++i) L.push_back(C); } template < class Ring > void scramble(DenseMatrix& M) { Ring R = M.field(); int N,n = M.rowdim(); // number of random basic row and col ops. N = 2*n; for (int k = 0; k < N; ++k) { int i = rand()%M.rowdim(); int j = rand()%M.coldim(); if (i == j) continue; // M*i += alpha M*j and Mj* -= alpha Mi* typename Ring::Element alpha, beta, x; R.init(alpha, rand()%5 - 2); R.neg(beta, alpha); for (size_t l = 0; l < M.rowdim(); ++l) if (!R.isZero(alpha)) { R.mul(x, alpha, M[l][j]); R.addin(M[l][i], x); } for (size_t l = 0; l < M.rowdim(); ++l) if (!R.isZero(alpha)) { R.mul(x, beta, M[i][l]); R.addin(M[j][l], x); } } /* std::ofstream out("matrix", std::ios::out); //M. write(std::cout); out << n << " " << n << "\n"; for (int i = 0; i < n; ++ i) { for ( int j = 0; j < n; ++ j) { R. write(out, M[i][j]); out << " "; } out << "\n"; } */ } template void printMatrix (const Matrix& A) { int m = A. rowdim(); int n = A. coldim(); typedef typename Matrix::Field Ring; typedef typename Ring::Element Element; const Ring &r = A.field(); LinBox::DenseVector x(r,m), y(r,n); std::cout << m << " " << n << " M" << std::endl; typename LinBox::DenseVector::iterator y_p; for (int i = 0; i < m; ++ i) { r. assign (x[i], r.one); A. applyTranspose(y, x); for(y_p = y. begin(); y_p != y. end(); ++ y_p) if (! r.isZero(*y_p)) std::cout << i+1 << " " << y_p - y.begin() + 1 << " " << *y_p << std::endl; r. assign (x[i], r.zero); } std::cout << "0 0 0" << std::endl; } int main(int ac, char* av[]) { if (ac < 2) { std::cout << "usage: " << av[0] << " options block-groups." << std::endl; std::cout << av[0] << " -r 1 2 3 a4 1 1" << std::endl; std::cout << "for lightly randomized matrix similar to direct sum of 3 copies of companion " << std::endl << "matrix of (x-1)^2 and one copy of companion matrix of (x^4 + x + 3)^1." << std::endl; } typedef NTL_ZZ Ring; Ring Z; typedef Companion BB; int acp; char* avp[ac]; string opts; stripOptions(acp, avp, opts, ac, av); //std::cout << "number of triples: " << acp << std::endl; //for (int i = 0; i < acp; ++ i) // std::cout << avp[i]; //std::cout << std::endl; //std::cout << "Begin to ....\n"; list L; for (int i = 0; i < acp; i += 3) augmentBB(L, avp[i], atoi(avp[i+1]), atoi(avp[i+2]), Z); DirectSum A(L); //std::cout <<"Option: " << opts.c_str() << std::endl; if (opts.size() >= 1) { if (opts[0] == 'r') { // into sparse matrix, then 3n row ops with corresponding col ops DenseMatrix B(Z,A.rowdim(), A.coldim()); //MatrixDomain MD(Z); LinBox::MatrixHom::map (B, A); scramble(B); printMatrix(B); // delete B; } if (opts[0] == 'R') { throw LinBox::NotImplementedYet(); } // into dense matrix, then many row ops //... } else { printMatrix (A); } return 0 ; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/smith-form-kb.C000066400000000000000000000063461347646240000174340ustar00rootroot00000000000000#include "linbox/linbox-config.h" #include #include // Polynomial Matrix / Order Basis #include "linbox/ring/modular.h" #include "linbox/ring/givaro-poly.h" #include "linbox/matrix/densematrix/blas-matrix.h" #include "linbox/matrix/matrixdomain/matrix-domain.h" #include "linbox/algorithms/smith-form-kannan-bachem.h" //#define LINBOX_USES_OMP 1 #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/random-matrix.h" using namespace LinBox; typedef Givaro::Modular Field; typedef GivaroPoly PolyRing; typedef typename Field::Element Element; typedef typename PolyRing::Element Polynomial; typedef typename PolyRing::RandIter RandIter; typedef MatrixDomain MatDom; typedef BlasMatrix Matrix; typedef SmithFormKannanBachemDomain SmithDom; void solveTextBook(PolyRing PD, SmithDom &SKB, Matrix &A) { typename MatDom::OwnMatrix ACopy(A); std::vector lst; SKB.solveTextBook(lst, ACopy); std::cout << "Text Book Solve:" << std::endl; for (size_t i = 0; i < lst.size(); i++) { PD.write(std::cout << i << ": ", lst[i]) << std::endl; } } void solve(PolyRing PD, SmithDom &SKB, Matrix &A) { typename MatDom::OwnMatrix ACopy(A); std::vector lst; SKB.solve(lst, ACopy); std::cout << "Solve:" << std::endl; for (size_t i = 0; i < lst.size(); i++) { PD.write(std::cout << i << ": ", lst[i]) << std::endl; } } void solveAdaptive(PolyRing PD, SmithDom &SKB, Matrix &A) { typename MatDom::OwnMatrix ACopy(A); std::vector lst; SKB.solveAdaptive(lst, ACopy); std::cout << "Solve Adaptive:" << std::endl; for (size_t i = 0; i < lst.size(); i++) { PD.write(std::cout << i << ": ", lst[i]) << std::endl; } } void halfSolve(PolyRing PD, SmithDom &SKB, Matrix &A) { typename MatDom::OwnMatrix ACopy(A); std::vector lst; SKB.halfSolve(lst, ACopy); std::cout << "Half Solve:" << std::endl; for (size_t i = 0; i < lst.size(); i++) { PD.write(std::cout << i << ": ", lst[i]) << std::endl; } } void makeTriangularMatrix(PolyRing PD, Matrix &M, bool upper, size_t p) { for (size_t i = 0; i < 3; i++) { M.setEntry(i, i, PD.one); for (size_t j = i+1; j < 3; j++) { std::vector pol; for (size_t k = 0; k < 5; k++) { pol.push_back(rand() % p); } Polynomial tmp; PD.init(tmp, pol); if (upper) { M.setEntry(i, j, tmp); } else { M.setEntry(j, i, tmp); } } } } int main(int argc, char** argv) { size_t p = 7; Field F(p); GivaroPoly PD(F, "x"); RandIter RI(PD); MatDom MD(PD); SmithDom SKB(PD); std::vector v; Polynomial f, f2; PD.init(f, v = {1, 1, 0, 1}); PD.mul(f2, f, f); Matrix A(PD, 3, 3); A.setEntry(0, 0, f2); A.setEntry(1, 1, PD.one); A.setEntry(2, 2, f); srand(time(NULL)); Matrix L(PD, 3, 3); makeTriangularMatrix(PD, L, true, p); Matrix R1(PD, 3, 3); makeTriangularMatrix(PD, R1, false, p); Matrix R2(PD, 3, 3); makeTriangularMatrix(PD, R2, false, p); // A = L * R1 * A * R2 MD.leftMulin(R1, A); MD.leftMulin(L, A); MD.mulin(A, R2); solveTextBook(PD, SKB, A); solve(PD, SKB, A); halfSolve(PD, SKB, A); solveAdaptive(PD, SKB, A); return 0; } linbox-1.6.3/examples/smith-form-local.C000066400000000000000000000124531347646240000201260ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace LinBox; using namespace std; typedef Givaro::Modular Field; typedef typename Field::Element Element; typedef Givaro::Poly1Dom PolyDom; typedef GivaroPoly PolyRing; typedef GivaroPolyQuotient QuotRing; typedef GivaroPolyRandIter PolyRandIter; typedef typename PolyRing::Element PolyElement; typedef MatrixDomain MatDom; typedef typename MatDom::OwnMatrix Mat; typedef MatrixDomain QuotMatDom; typedef typename QuotMatDom::OwnMatrix QMat; typedef GivaroPolyLocal LocalRing; typedef MatrixDomain LocalMatDom; typedef LocalMatDom::OwnMatrix LMat; typedef IliopoulosDomain IliopoulosDom; typedef SmithFormLocal LocalDom; typedef DenseVector FactorVector; int VERBOSE = 0; void local(Mat &M, PolyElement &f, QuotRing &R) { size_t n = M.coldim(); QMat A(R, n, n); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < n; j++) { PolyElement tmp; M.getEntry(tmp, i, j); A.setEntry(i, j, tmp); } } LocalDom sfl; list l; Timer timer; timer.start(); sfl(l, A, R); timer.stop(); cout << "Local Time: " << timer << endl; if (VERBOSE) { list::const_iterator iterator; for (iterator = l.begin(); iterator != l.end(); ++iterator) { R.write(cout, *iterator) << endl; } cout << endl; } } void local2(Mat &M, LocalRing &R) { size_t n = M.coldim(); LMat A(R, n, n); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < n; j++) { PolyElement tmp; M.getEntry(tmp, i, j); LocalRing::Element ltmp; R.init(ltmp, tmp); A.setEntry(i, j, ltmp); } } SmithFormLocal sfl; list l; Timer timer; timer.start(); sfl(l, A, R); timer.stop(); cout << "Local2 Time: " << timer << endl; if (VERBOSE) { list::const_iterator iterator; for (iterator = l.begin(); iterator != l.end(); ++iterator) { R.write(cout, *iterator) << endl; } cout << endl; } } void ilio(Mat &M, PolyElement &f, MatDom &MD, PolyRing &R) { IliopoulosDom sfi(R); size_t n = M.coldim(); Mat A(MD.field(), n, n); MD.copy(A, M); FactorVector l; l.resize(n); Timer timer; timer.start(); sfi.smithForm(l, A, f); timer.stop(); cout << "Iliopolous Time: " << timer << endl; if (VERBOSE) { for (size_t i = 0; i < l.size(); i++) { R.write(cout, l[i]) << endl; } cout << endl; } } void generateM( Mat &M, MatDom &MD, PolyRing &R, PolyElement &f, PolyElement &g, size_t n, size_t e ) { integer max; R.convert(max, f); max *= 10; Mat L(R, n, n); for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < i; j++) { PolyElement e; R.init(e, rand() % max); R.modin(e, f); L.setEntry(i, j, e); } } for (size_t i = 0; i < n; i++) { L.setEntry(i, i, R.one); } Mat T(R, n, n); for (size_t i = 0; i < n; i++) { for (size_t j = i+1; j < n; j++) { PolyElement e; R.init(e, rand() % max); R.modin(e, f); T.setEntry(i, j, e); } } for (size_t i = 0; i < n; i++) { T.setEntry(i, i, R.one); } Mat D(R, n, n); for (size_t i = 0; i < n; i++) { size_t ei = rand() % e; PolyElement di; R.assign(di, R.one); for (size_t j = 0; j < ei; j++) { R.mulin(di, g); } D.setEntry(i, i, di); if (VERBOSE > 1) { R.write(cout << i << ", " << i << ": ", di) << endl; } } MD.mul(M, L, D); MD.mulin(M, T); if (VERBOSE > 1) { cout << endl; for (size_t i = 0; i < n; i++) { for (size_t j = 0; j < n; j++) { PolyElement e; M.getEntry(e, i, j); R.write(cout << i << ", " << j << ": ", e) << endl; } } } } int main(int argc, char* argv[]) { size_t p = 3; size_t n = 50; size_t e = 6; int gn = 13; static Argument args[] = { { 'p', "-p P", "Set the field GF(p)", TYPE_INT, &p}, { 'n', "-n N", "Set the matrix dimensions", TYPE_INT, &n}, { 'e', "-e E", "Set the max exponent", TYPE_INT, &e}, { 'g', "-g G", "Set irreducible such that f(p) = G", TYPE_INT, &gn}, { 'v', "-v V", "Set verbosity", TYPE_INT, &VERBOSE}, END_OF_ARGUMENTS }; parseArguments(argc, argv, args); Field F(p); PolyRing R(F, "x"); PolyRandIter PRI(R, 0, 10); MatDom MD(R); PolyElement g, f; R.init(g, gn); R.write(cout << "irred: ", g) << endl; R.pow(f, g, e); R.write(cout << "quotient: ", f) << endl; QuotRing QR(R, f); LocalRing LR(R, g, e); Mat M(R, n, n); generateM(M, MD, R, f, g, n, e); cout << endl; ilio(M, f, MD, R); //local(M, f, QR); local2(M, LR); } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/smith.C000066400000000000000000000162761347646240000161040ustar00rootroot00000000000000/* * examples/smith.C * * Copyright (C) 2005, 2010 D. Saunders, Z. Wang, J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/smith.C * @example examples/smith.C \brief mod m Smith form by elmination \ingroup examples \author bds & zw Various Smith form algorithms may be used for matrices over the integers or over Z_m. Moduli greater than 2^32 are not supported here. Several types of example matrices may be constructed or the matrix be read from a file. Run the program with no arguments for a synopsis of the command line parameters. For the "adaptive" method, the matrix must be over the integers. This is expected to work best for large matrices. For the "2local" method, the computation is done mod 2^32. For the "local" method, the modulus must be a prime power. For the "ilio" method, the modulus may be arbitrary composite. If the modulus is a multiple of the integer determinant, the integer Smith form is obtained. Determinant plus ilio may be best for smaller matrices. This example was used during the design process of the adaptive algorithm. The matrix example generation code that was here is now in mats.C. */ #include #include #include #include #include using namespace std; #include #include #include // place A: Edit here and at place B for ring change //#include #include #include #include #include #include using namespace LinBox; template void distinct (I1 a, I1 b, Lp& c); template void display(I b, I e); template void Mat(DenseMatrix& M, string src); int main(int argc, char* argv[]) { // place B: Edit here and at place A for ring change //typedef PIRModular PIR; typedef PIR_ntl_ZZ_p PIR; if (argc < 3 or argc > 4) { cout << "\nUsage: " << argv[0] << " alg file [m]\n" << endl; cout << " alg = `adaptive', `ilio', `local', or `2local'," << endl << " Modulus m is needed for `local' and `ilio'" << endl << " m must be a prime power for `local', arbitrary composite for `ilio'." << endl << " Integer smith form is obtained by `ilio' if m is a multiple of the " << " largest invariant, eg. det." << endl << " The matrix is read from file (from cin if file is `-').\n" << endl; cout << " Regardless of file format, internal matrix rep is dense." << endl << " For algoritms using sparse matrix rep, see the examples" << " smithvalence.C, power_rank.C, and poweroftwo_ranks.C." << endl; return 0; } string algo = argv[1]; string src = argv[2]; unsigned long m = 1; if (argc == 4) m = atoi(argv[3]); UserTimer T; if (algo == "adaptive") { typedef Givaro::ZRing Ints; Ints Z; DenseMatrix M(Z); Mat(M, src); DenseVector > v(Z,M.coldim()); T.start(); SmithFormAdaptive::smithForm(v, M); T.stop(); list > p; distinct(v.begin(), v.end(), p); //cout << "#"; cout << "Integer Smith Form using adaptive alg :\n"; display(p.begin(), p.end()); //cout << "# adaptive, Ints, n = " << M.coldim() << endl; cout << "T" << M.coldim() << "adaptive(Ints)" << m << " := "; } else if (algo == "ilio") { PIR R( (int32_t)m); DenseMatrix M(R); Mat(M, src); T.start(); SmithFormIliopoulos::smithFormIn (M); //PIR::Element d; //IliopoulosDomain ID(R); //ID.smithFormIn (M,d); T.stop(); typedef list< PIR::Element > List; List L; for (size_t i = 0; i < M.rowdim(); ++i) L.push_back(M[(size_t)i][(size_t)i]); list > p; distinct(L.begin(), L.end(), p); //cout << "#"; cout << "Modular Smith Form using ilio alg :\n"; display(p.begin(), p.end()); //cout << "# ilio, PIR-Modular-int32_t(" << m << "), n = " << M.coldim() << endl; cout << "T" << M.coldim() << "ilio(PIR-Modular-int32_t)" << m << " := "; } else if (algo == "local") { // m must be a prime power PIR R( (int32_t)m); DenseMatrix M(R); Mat(M, src); typedef list< PIR::Element > List; List L; SmithFormLocal SmithForm; T.start(); SmithForm( L, M, R ); T.stop(); list > p; distinct(L.begin(), L.end(), p); //cout << "#"; PIR::Element x = p.back().first, y; R.neg(y,x); R.gcdin(x,y); if (not R.areEqual(p.back().first, x)) R.write(R.write (cerr << "x ", x) << ", back ", p.back().first) << endl;; p.back().first = x; cout << "Local Smith Form :\n"; display(p.begin(), p.end()); //cout << "# local, PIR-Modular-int32_t(" << m << "), n = " << M.coldim() << endl; cout << "T" << M.coldim() << "local(PIR-Modular-int32_t)" << m << " := "; } else if (algo == "2local") { Local2_32 R; DenseMatrix M(R); Mat(M, src); typedef list< Local2_32::Element > List; List L; SmithFormLocal SmithForm; T.start(); SmithForm( L, M, R ); T.stop(); list > p; distinct(L.begin(), L.end(), p); //cout << "#"; cout << "2-Local Smith Form :\n"; display(p.begin(), p.end()); //cout << "# 2local, Local2_32, n = " << M.coldim() << endl; cout << "T" << M.coldim() << "local2_32 := "; } else printf ("Unknown algorithm "); T.print(cout); cout << /*";" << */ endl; return 0 ; } template void Mat(DenseMatrix& M, string src) { if (src[0]=='-') M.read(cin); else { ifstream in(src); M.read(in); } } //! @bug this already exists elsewhere template void distinct (I1 a, I1 b, Lp& c) { typename iterator_traits::value_type e; size_t count = 0; if (a != b) {e = *a; ++a; count = 1;} else return; while (a != b) { if (*a == e) ++count; else { c.push_back(typename Lp::value_type(e, count)); e = *a; count = 1; } ++a; } c.push_back(typename Lp::value_type(e, count)); return; } template void display(I b, I e) { cout << "("; for (I p = b; p != e; ++p) cout << "[" << p->first << "," << p->second << "] "; cout << ")" << endl; } //@} // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/smithsparse.C000066400000000000000000000252371347646240000173170ustar00rootroot00000000000000/* * examples/smithsparse.C * * Copyright (C) 2005, 2010 D. Saunders, Z. Wang, J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/smithsparse.C * @example examples/smithsparse.C \brief Smith form by sparse elmination, Integer Smith by valence method, or local at a prime power. \ingroup examples See smithvalence for valence method with more options and information. For local smith, moduli greater than 2^32 are not supported here (easily changed). matrix is read from file or generated from a small selection of example families. Run the program with no arguments for a synopsis of the command line parameters. */ #include #include #include #include #include using namespace std; #include #include #include #include #include #include #define SILENT #define NOT_USING_OMP #include "smithvalence.h" #undef NOT_USING_OMP #undef SILENT using namespace LinBox; template void distinct (I1 a, I1 b, Lp& c); template void display(I b, I e); template > void runpoweroftworank(ifstream& input, const size_t exponent, size_t StPr); int main(int argc, char* argv[]) { Givaro::Timer chrono; if (argc < 2 or 3 < argc) { cout << "Usage: " << /*argv[0] <<*/ "smithsparse file [m]" << endl << " where file contains the matrix in any supported format and m is the modulus." << endl << " With no m, Smith form over Z by the valence method is done." << endl << " Use smithvalence.C to have more options and get more output info." << endl << " Given m, a prime power, local Smith form over Z_m is done via sparse elim." << endl << " Use power_ranks.C or poweroftwo_rank.C to have more options and get more output info." << endl << " See mats.C for some examples that have been used in smith form algorithm testing" << endl; return 0; } chrono.start(); ifstream input(argv[1]); if (argc > 2) { // so over Z_m unsigned long m = atoi(argv[2]); if (m > 4967296) {// too big cerr << "Modulus too large for this example" << endl; return -1; } if (m%2 == 0) { // local at small power of 2. runpoweroftworank >(input, 32, 0); } else { // local at general Z_p^e typedef Givaro::Modular SPIR; SPIR R(m); SparseMatrix B (R); B.read(input); // cout << "matrix is " << B.rowdim() << " by " << B.coldim() << endl; // if (B.rowdim() <= 10 && B.coldim() <= 10) B.write(cout) << endl; Integer p(m), im(m); // Should better ask user to give the prime !!! Givaro::IntPrimeDom IPD; for(unsigned int k = 2; ( ( ! IPD.isprime(p) ) && (p > 1) ); ++k) Givaro::root( p, im, k ); // using Sparse Elimination LinBox::PowerGaussDomain< SPIR > PGD( R ); vector > vec; LinBox::Permutation Q(R,B.coldim()); PGD(vec, B, Q, (int32_t)m, (int32_t)p); typedef list< SPIR::Element > List; List L; for ( auto p_it = vec.begin(); p_it != vec.end(); ++p_it) { for(size_t i = 0; i < (size_t) p_it->first; ++i) L.push_back((SPIR::Element)p_it->second); } size_t M = (B.rowdim() > B.coldim() ? B.coldim() : B.rowdim()); size_t Min = (B.rowdim() < B.coldim() ? B.coldim() : B.rowdim()); for (size_t i = L.size(); i < M; ++i) L.push_back(0); list > pl; distinct(L.begin(), L.end(), pl); //cout << "#"; //display(local.begin(), local.end()); display(pl.begin(), pl.end()); //cout << "# local, PowerGaussDomain(" << M << "), n = " << Min << endl; chrono.stop(); cout << "T" << M << "local(PowerGaussDomain)" << m << " := " << chrono << endl; } } else {// argc is 2, so use valence method over ZZ Givaro::ZRing ZZ; typedef SparseMatrix > Blackbox; Blackbox A (ZZ); A.read(input); // cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; Givaro::ZRing::Element val_A; chrono.start(); Transpose T(&A); if (A.rowdim() > A.coldim()) {//ata Compose< Transpose, Blackbox > C (&T, &A); // cout << "A^T A is " << C.rowdim() << " by " << C.coldim() << endl; valence(val_A, C); } else if (A.rowdim() < A.coldim()) {//aat Compose< Blackbox, Transpose > C (&A, &T); // cout << "A A^T is " << C.rowdim() << " by " << C.coldim() << endl; valence(val_A, C); } else { // square, just a valence(val_A, A); } //cout << "Valence is " << val_A << endl; vector Moduli; vector exponents; Givaro::IntFactorDom<> FTD; typedef pair PairIntRk; vector< PairIntRk > smith; integer coprimeV=2; while ( gcd(val_A,coprimeV) > 1 ) { FTD.nextprimein(coprimeV); } //cout << "integer rank: " << endl; unsigned long coprimeR; LRank(coprimeR, argv[1], coprimeV); smith.push_back(PairIntRk(coprimeV, coprimeR)); // cerr << "Rank mod " << coprimeV << " is " << coprimeR << endl; //cout << "Some factors (5000 factoring loop bound): "; FTD.set(Moduli, exponents, val_A, 5000); vector::const_iterator eit=exponents.begin(); //for(vector::const_iterator mit=Moduli.begin(); // mit != Moduli.end(); ++mit,++eit) // cout << *mit << '^' << *eit << ' '; //cout << endl; vector SmithDiagonal(coprimeR,integer(1)); for(vector::const_iterator mit=Moduli.begin(); mit != Moduli.end(); ++mit) { size_t r; LRank(r, argv[1], *mit); // cerr << "Rank mod " << *mit << " is " << r << endl; smith.push_back(PairIntRk(*mit, r)); for(size_t i=r; i < coprimeR; ++i) SmithDiagonal[i] *= *mit; } eit=exponents.begin(); vector::const_iterator sit=smith.begin(); for( ++sit; sit != smith.end(); ++sit, ++eit) { if (sit->second != coprimeR) { vector ranks; ranks.push_back(sit->second); size_t effexp; if (*eit > 1) { PRank(ranks, effexp, argv[1], sit->first, *eit, coprimeR); } else { PRank(ranks, effexp, argv[1], sit->first, 2, coprimeR); } if (ranks.size() == 1) ranks.push_back(coprimeR); if (effexp < *eit) { for(size_t expo = effexp<<1; ranks.back() < coprimeR; expo<<=1) { PRankInteger(ranks, argv[1], sit->first, expo, coprimeR); } } else { for(size_t expo = (*eit)<<1; ranks.back() < coprimeR; expo<<=1) { PRank(ranks, effexp, argv[1], sit->first, expo, coprimeR); if (ranks.size() < expo) { // cerr << "It seems we need a larger prime power, it will take longer ..." << endl; // break; PRankInteger(ranks, argv[1], sit->first, expo, coprimeR); } } } vector::const_iterator rit=ranks.begin(); // size_t modrank = *rit; for(++rit; rit!= ranks.end(); ++rit) { if ((*rit)>= coprimeR) break; for(size_t i=(*rit); i < coprimeR; ++i) SmithDiagonal[i] *= sit->first; // modrank = *rit; } } } integer si=1; size_t num=0; cout << '('; for( vector::const_iterator dit=SmithDiagonal.begin(); dit != SmithDiagonal.end(); ++dit) { if (*dit == si) ++num; else { if (num > 0) cout << '[' << si << ',' << num << "] "; num=1; si = *dit; } } cout << '[' << si << ',' << num << "] )" << endl; chrono.stop(); cout << "T" << A.rowdim() << "smithvalence(ZRing):= " << chrono << endl; } return 0; } //! @bug this already exists elsewhere template void distinct (I1 a, I1 b, Lp& c) { typename iterator_traits::value_type e; size_t count = 0; if (a != b) {e = *a; ++a; count = 1;} else return; while (a != b) { if (*a == e) ++count; else { c.push_back(typename Lp::value_type(e, count)); e = *a; count = 1; } ++a; } c.push_back(typename Lp::value_type(e, count)); return; } template void display(I b, I e) { cout << "("; for (I p = b; p != e; ++p) cout << '[' << p->first << "," << p->second << "] "; cout << ")" << endl; } template void runpoweroftworank(ifstream& input, const size_t exponent, size_t StPr) { typedef std::vector > Smith_t; typedef Ring_type Ring; // signed ? typedef LinBox::SparseMatrix SparseMat; Smith_t local; Ring R; LinBox::MatrixStream ms( R, input ); SparseMat A (ms); input.close(); LinBox::PowerGaussDomainPowerOfTwo< Int_type > PGD; LinBox::GF2 F2; Permutation Q(F2,A.coldim()); cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(cout,Tag::FileFormat::Maple) << endl; Givaro::Timer tim; tim.clear(); tim.start(); if (StPr) PGD(local, A, Q, exponent, StPr); else PGD(local, A, Q, exponent); tim.stop(); R.write(std::cout << "Local Smith Form ") << " : " << std::endl << '('; int num = A.rowdim(); for (auto p = local.begin(); p != local.end(); ++p) { std::cout << '[' << p->second << ',' << p->first << "] "; num -= p->first; } if (num > 0) std::cout << '[' << F2.zero << ',' << num << "] "; std::cout << ')' << std::endl; std::cerr << tim << std::endl; } // runpowerof2 // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/smithvalence.C000066400000000000000000000071551347646240000174360ustar00rootroot00000000000000/* * examples/smithvalence.C * Copyright (c) Linbox * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/smithvalence.C * @example examples/smithvalence.C \brief Valence of sparse matrix over Z or Zp. \ingroup examples */ #ifndef DISABLE_COMMENTATOR #define DISABLE_COMMENTATOR #endif #define __VALENCE_REPORTING__ 1 #include #include #include #include #include #include #include using namespace LinBox; int main (int argc, char **argv) { if (argc < 2 || argc > 4) { std::cerr << "Usage: smithvalence [-ata|-aat|valence] [coprime]" << std::endl; std::cerr << " Optional parameters valence and coprime are integers." << std::endl; std::cerr << " Prime factors of valence will be used for local computation." << std::endl; std::cerr << " coprime will be used for overall Z rank computation." << std::endl; return -1; } const std::string filename(argv[1]); std::ifstream input (filename); if (!input) { std::cerr << "Error opening matrix file " << filename << std::endl; return -1; } Givaro::ZRing ZZ; MatrixStream< Givaro::ZRing > ms( ZZ, input ); typedef SparseMatrix> Blackbox; Blackbox A (ms); input.close(); std::clog << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; size_t method=0; Givaro::Integer val_A(0); if (argc >= 3) { if (strcmp(argv[2],"-ata") == 0) { method=2; } else if (strcmp(argv[2],"-aat") == 0) { method=1; } else { std::clog << "Suppose primes are contained in " << argv[2] << std::endl; val_A = LinBox::Integer(argv[2]); } } Givaro::Integer coprimeV=1; if (argc >= 4) { std::clog << "Suppose " << argv[3] << " is coprime with Smith form" << std::endl; coprimeV =Givaro::Integer(argv[3]); } std::vector SmithDiagonal; #ifdef __LINBOX_USE_OPENMP std::clog << "num procs: " << omp_get_num_procs() << std::endl; std::clog << "max threads: " << MAX_THREADS << std::endl; #endif // Returns the Smith form as a diagonal, // the valence val_A, // the coprimeV used to compute the integral rank LinBox::Timer chrono; chrono.start(); PAR_BLOCK { smithValence(SmithDiagonal, val_A, A, filename, coprimeV, method); } chrono.stop(); std::clog << "Integer Smith Form :" << std::endl; writeCompressedSmith(std::cout, SmithDiagonal, ZZ, A.rowdim(), A.coldim()) << std::endl; std::clog << chrono << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/solve.C000066400000000000000000000215431347646240000161010ustar00rootroot00000000000000/* * examples/solve.C * * Copyright (C) 2005, 2010 J-G Dumas, D. Saunders, P. Giorgi * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @file examples/solve.C * @ingroup examples * @brief Blackbox solvers. * @warning some are commented out... * @example examples/solve.C */ #include #include #include #include #include #include #include #include using namespace LinBox; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 4) { std::cerr << "Usage: solve [] [

]" << std::endl; return 0; } srand48( BaseTimer::seed() ); std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } std::ifstream invect; bool createB = false; int ModComp = 0; if (argc == 2) { createB = true; ModComp = 0; } if (argc == 3) { invect.open (argv[2], std::ifstream::in); if (!invect) { createB = true; ModComp = 2; } else { createB = false; ModComp = 0; } } if (argc == 4) { ModComp = 3; invect.open (argv[2], std::ifstream::in); if (!invect) { createB = true; } else createB = false; } if (ModComp) { std::cout<<"Computation is done over Z/("< Field; double q = atof(argv[ModComp]); typedef DenseVector DenseVector ; Field F(q); MatrixStream< Field > ms ( F, input ); SparseMatrix A (ms); // A.write(std::cout); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(std::cerr << "A:=",Tag::FileFormat::Maple) << ';' << std::endl; DenseVector X(F, A.coldim()),B(F, A.rowdim()); if (createB) { std::cerr << "Creating a random {-1,1} vector U, B is AU (to have a consistent system)" << std::endl; DenseVector U(F, A.coldim() ); for(DenseVector::iterator it=U.begin(); it != U.end(); ++it) if (drand48() <0.5) F.assign(*it,F.mOne); else F.assign(*it,F.one); A.apply(B,U); } else { for(DenseVector::iterator it=B.begin(); it != B.end(); ++it) F.read(invect,*it); } // A.write(std::cout << "A: ") << std::endl; std::cout << "B is " << B << std::endl; Timer chrono; // Sparse Elimination std::cout << "Sparse Elimination" << std::endl; chrono.clear(); chrono.start(); Method::SparseElimination M; solve (X, A, B, M); chrono.stop(); std::cout << "(Sparse Gauss) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) F.write(std::cout, *it) << " "; std::cout << "]" << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl< ZZ; typedef DenseVector > DenseVector ; MatrixStream< Givaro::ZRing > ms( ZZ, input ); SparseMatrix > A (ms); Givaro::ZRing::Element d; std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(std::cerr << "A:=",Tag::FileFormat::Maple) << ';' << std::endl; DenseVector X(ZZ, A.coldim()),B(ZZ, A.rowdim()); if (createB) { std::cerr << "Creating a random {-1,1} vector U, B is AU" << std::endl; DenseVector U(ZZ, A.coldim() ); for(DenseVector::iterator it=U.begin(); it != U.end(); ++it) if (drand48() <0.5) *it = -1; else *it = 1; A.apply(B,U); } else { for(DenseVector::iterator it=B.begin(); it != B.end(); ++it) invect >> *it; } std::cout << "B is " << B << std::endl; Timer chrono; // DenseElimination std::cout << "DenseElimination" << std::endl; chrono.start(); solve (X, d, A, B, Method::DenseElimination()); chrono.stop(); std::cout << "(DenseElimination) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) ZZ.write(std::cout, *it) << " "; std::cout << "] / "; ZZ.write(std::cout, d)<< std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; // Sparse Elimination std::cout << "Sparse Elimination" << std::endl; chrono.start(); solve (X, d, A, B, Method::SparseElimination()); chrono.stop(); std::cout << "(SparseElimination) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) ZZ.write(std::cout, *it) << " "; std::cout << "] / "; ZZ.write(std::cout, d)<< std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; // Wiedemann std::cout << "Wiedemann" << std::endl; chrono.start(); solve (X, d, A, B, Method::Wiedemann()); chrono.stop(); std::cout << "(Wiedemann) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) ZZ.write(std::cout, *it) << " "; std::cout << "] / "; ZZ.write(std::cout, d) << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; #if 0 // Lanczos std::cout << "Lanczos" << std::endl; chrono.start(); solve (X, d, A, B, Method::Lanczos()); chrono.stop(); std::cout << "(Lanczos) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) ZZ.write(std::cout, *it) << " "; std::cout << "] / "; ZZ.write(std::cout, d) << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; // Block Lanczos std::cout << "Block Lanczos" << std::endl; chrono.clear(); chrono.start(); solve (X, d, A, B, Method::BlockLanczos()); chrono.stop(); std::cout << "(Block Lanczos) Solution is ["; for(DenseVector::const_iterator it=X.begin();it != X.end(); ++it) ZZ.write(std::cout, *it) << " "; std::cout << "] / "; ZZ.write(std::cout, d) << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; #endif } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/solver/000077500000000000000000000000001347646240000161525ustar00rootroot00000000000000linbox-1.6.3/examples/solver/Makefile.am000066400000000000000000000024601347646240000202100ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # This file is part of LinBox # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ INCLUDES=-I$(top_srcdir) AM_CPPFLAGS=-g $(NTL_CFLAGS) $(ATLAS_CFLAGS) LDADD = $(top_builddir)/linbox/liblinbox.la $(NTL_LIBS) $(ATLAS_LIBS) $(LDFLAGS) EXTRA_PROGRAMS=t-rdisolve t_rdisolve_SOURCES = \ t-rdisolve.C # no /bin if LinBox is uncompiled #LINBOX_BIN=$(LINBOX)/bin LINBOX_BIN=$(bindir) # for compilation of new examples %:%.C $(CXX) $(CPPFLAGS) $*.C -o $* $(shell $(LINBOX_BIN)/linbox-config --cflags --libs) $(LDADD) linbox-1.6.3/examples/solver/t-rdisolve.C000066400000000000000000000375521347646240000203620ustar00rootroot00000000000000/* * examples/solver/t-rdisolve.C * * Copyright (C) 2004, 2005, 2010 D. Pritchard, P. Giorgi * * This file is part of LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 2 of * the License, or (at your option) any later version. * * LinBox 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with LinBox. If not, see * . */ /* linbox/examples/solver/t-rdisolve.C * demo, testing, time-comparison of certified rational/diophantine system solver * * Written by David Pritchard * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #define LIFTING_PROGRESS #define RSTIMING #include "givaro/modular.h" #include "givaro/zring.h" #include "linbox/blackbox/diagonal.h" #include "linbox/algorithms/rational-solver.h" #include "linbox/algorithms/vector-fraction.h" #include "linbox/algorithms/diophantine-solver.h" #include #include #include "linbox/randiter/random-prime.h" #include "linbox/field/unparametric.h" #include "givaro/zring.h" #include "linbox/field/ntl.h" #include "linbox/field/archetype.h" //#include "linbox/field/givaro.h" #include "linbox/vector/vector-domain.h" #include #include "linbox/field/archetype.h" #include "linbox/vector/vector-domain.h" // #include "linbox/../tests/test-common.C" using namespace std; using namespace LinBox; #define random_01() ((double)rand() / ((double)(RAND_MAX)+1)) int n = 5; int c = 5; int defaultPrime = 0; int primeBits = 14; // note: should be <= 15 to use Givaro::Modular int numPrimes = 1; bool useDeterm = true; bool useRandom = false; bool useDiophantine = false; int printStuff = 0; int showTiming = 0; bool useFiles = false; bool sparseMatrix = false; integer eBoundCmd = 1000; double singularProportion = 0; bool inconsistent = false; int useTimer = true; int entrySeed = 12345; int trials = 1; int destroyColumns = 0; bool testPidDouble = false; int levelAsInt = (int)SL_CERTIFIED; static Argument args[] = { { 'n', 0, "Row dimension of test matrix", TYPE_INT, &n }, { 'c', 0, "Column dimension of test matrix (c<=0 => c=n)", TYPE_INT, &c }, { 'm', 0, "Try solving with up to m primes", TYPE_INT, &numPrimes }, { 'q', 0, "Solve first over the field Z/qZ (0: pick randomly)", TYPE_INT, &defaultPrime }, { 'g', 0, "Subsequently generate primes that are g bits long", TYPE_INT, &primeBits }, { 'r', 0, "Set random solving on/off", TYPE_BOOL, &useRandom }, { 'd', 0, "Set deterministic solving on/off", TYPE_BOOL, &useDeterm }, { 'z', 0, "Set diophantine solving on/off", TYPE_BOOL, &useDiophantine }, { 'p', 0, "Print lots of detail, tree levels (0,1,2,3)", TYPE_INT, &printStuff }, { 'f', 0, "Read space-separated data from files td-{A, b}.txt?", TYPE_BOOL, &useFiles}, { 's', 0, "(If f=0N) Say td-A.txt is in sparse format", TYPE_BOOL, &sparseMatrix}, { 'b', 0, "(If f=OFF) Entry bound is (-b, b]", TYPE_INTEGER, &eBoundCmd}, { 'x', 0, "(If f=OFF) Make roughly x*n dependant rows", TYPE_DOUBLE, &singularProportion}, { 'i', 0, "(If f=OFF) Force inconsistent system", TYPE_BOOL, &inconsistent}, { 't', 0, "(If f=OFF) Randomize with timer?", TYPE_BOOL, &useTimer}, { 'w', 0, "(If f=OFF, t=OFF) Randomize with seed w", TYPE_INT, &entrySeed}, { 'e', 0, "Test PID_double", TYPE_BOOL, &testPidDouble}, { 'k', 0, "Repeat trials k times", TYPE_INT, &trials}, { 'l', 0, "Level: 0=Monte Carlo, 1=Las Vegas, 2=Certified", TYPE_INT, &levelAsInt}, { 'o', 0, "Set o columns to zero at random", TYPE_INT, &destroyColumns} }; // 7 more options (yu vs jah) and the whole alphabet is covered int trialCount=0; integer* Aentries; integer* bentries; template int test() { trialCount++; typedef typename Ring::Element RingElement; Ring R; VectorDomain VD (R); typedef typename Vector::Dense Vector; typedef DenseMatrix Matrix; Matrix A(R, n, c); MatrixDomain MD(R); typedef typename Ring::Element Integer; Vector b(n); if (sparseMatrix) { // reading A from td-A.txt file ifstream inA, inb; inA.open("td-A.txt"); A.read(inA); cout << "Matrix is sparse with n="<> b[i]; inb.close(); } else { // reading A from Aentrie vector for (int i=0; i2)) {cout << "b:\n"; VD.write(cout, b);} if (trialCount==1 && (printStuff>2)) {cout << "\nA:\n"; A.write(cout);} Field F(defaultPrime>0 ? defaultPrime : 2); cout << "Testing with Z of type '"; R.write(cout); cout<<"' and Z/pZ of type '"; F.write(cout)<<"'"< QSolver; typedef DiophantineSolver ZSolver; //typedef std::vector > FractionVector; typedef VectorFraction FractionVector; FractionVector x(R,c); int result=0; SolverLevel level = (SolverLevel)levelAsInt; for (int iteration=0; iteration<3; iteration++) { if (iteration==0 && !useDeterm) continue; if (iteration==1 && !useRandom) continue; if (iteration==2 && !useDiophantine) continue; // no more cleaning #if 0 //clear x for (FractionVector::Dense::iterator i=x.begin(); i!=x.end(); i++) { R.assign(i->first, R.zero); R.assign(i->second, R.zero); } #endif QSolver* rsolver; if (defaultPrime == 0) rsolver = new QSolver(R, LinBox::RandomPrime(primeBits)); else rsolver = new QSolver(defaultPrime, R, LinBox::RandomPrime(primeBits)); ZSolver zsolver(*rsolver); SolverReturnStatus s; if (iteration==0) { cout << "Solving deterministically.\n"; s = zsolver.solve(x.numer, x.denom, A, b, numPrimes, level); } else if (iteration==1) { cout << "Solving randomly.\n"; s = zsolver.randomSolve(x.numer, x.denom, A, b, numPrimes, level); } else { cout << "Solving diophantically.\n"; s = zsolver.diophantineSolve(x.numer, x.denom, A, b, numPrimes, level); } cout << "solverReturnStatus: " << solverReturnString[(int)s] << "\n"; #ifdef RSTIMING rsolver->reportTimes(cout); #endif if (s == SS_OK) { VectorFraction red(x); if (printStuff > 0) { if (useDiophantine){ cout<<"Number of system solved : "< tmp.bitsize() ? maxbits: tmp.bitsize()); } R.convert(tmp,x.denom); cout<<"numerators hold over "< 1) { if (useFiles){ ofstream out("td-x.txt"); out<< "Reduced solution: "; red.write(out) << "\n"; out.close(); } else{ cout << "Reduced solution: "; red.write(cout) << "\n"; } } Vector LHS(n), RHS(b); // check that Ax = b, if it thought it was okay MD.vectorMul(LHS, A, red.numer); VD.mulin(RHS, red.denom); if (VD.areEqual(LHS, RHS)) cout << "Ax=b : Yes" << endl; else { cout << "Ax=b : No" << endl; if (level >= SL_LASVEGAS) cout << "ERROR: Las Vegas or Certified solver should never return wrong answer" << endl; } if (iteration==2 && level == SL_CERTIFIED) { // check certificate of minimality z // should satisfy that zA is integral, and den(z.b) == den(y) Integer dp, tmp, denzb; VectorFraction z(zsolver.lastCertificate); R.assign(dp, R.zero); typename Vector::iterator zi = z.numer.begin(); typename Vector::iterator bi = b.begin(); for (; bi != b.end(); bi++, zi++) R.addin(dp, R.mul(tmp, *bi, *zi)); R.gcd(denzb, dp, z.denom); R.div(denzb, z.denom, denzb); VectorFraction tmpvf(x); bool certified = R.areEqual(denzb, tmpvf.denom); if (!certified) cout << "ERROR Failed den(z.b) == den(y)" << endl; bool certified2 = true; Integer* nza = new Integer[c]; //z.numer * A for (int i=0; i cert(zsolver.lastCertificate); if (printStuff > 1) { cout << ": "; cert.write(cout); } cout << endl; std::vector certA(c); if (R.isZero(cert.denom)) cout << "ERROR: Zero denom in inc-certificate. May not have been generated." << endl; Integer certb, tmp; for (int i=0; i int fieldTest() { return 0 //+test() +test, Field>() //+(testPidDouble?test():0) // */ ; }; void testAllFields() { //fieldTest >(); //fieldTest(); //fieldTest >(); //fieldTest >(); fieldTest >(); //fieldTest >(); //broken? //fieldTest >(); //broken? //fieldTest(); //broken? //fieldTest(); // appears to be broken in current build //fieldTest(); // appears to be broken in current build //fieldTest >(); // */ // this takes a long time to compile with all fields // so comment out unused ones when debugging } void genTestData() { bool* auxRow = new bool[n]; int auxRows = 0; for (int i=0; i 0 && auxRows < n) eBound /= (n-auxRows); if (eBound == 0) { cout << "WARNING: 'b' dropped to 0. Changed to 1, try increasing 'b'." << endl; eBound = 1; } Givaro::ZRing Z; Givaro::ZRing::RandIter ri(Z, 2*eBound,entrySeed); //for some reason this iterator tends to give numbers with //large common factors, so we perturb the data a bit bool notRandomEnough = (eBound >> 64) > 0; double bigStuff = ((long long)1)<<25; for (int i=0; i((random_01()-0.5)*bigStuff); } for (int i=0; i((random_01()-0.5)*bigStuff); } int whichInconsistent = (int)(random_01()*auxRows); //make singular rows for (int i=0; i c) { cout << "WARNING, o > c. Lowering o." << endl; columnsToDestroy = c; } for (int i=0; i(time(NULL)); useTimer = false; } writeCommandString (cout, args, argv[0]); if (c <= 0) c += n; if (c <= 0) { cout << "WARNING, c <= -n; resulting column dimension changed from nonpositive value to 1" << endl; c = 1; } if (!sparseMatrix) cout << "Matrix is dense with n="<> bentries[i]; in.close(); in2.open("td-A.txt"); for (int i=0; i> Aentries[i]; in2.close(); } for (int j=0; j < trials; j++) { if (!useFiles) genTestData(); testAllFields(); cout << "finished trial " << (j+1) << " of " << trials << endl; } delete[] Aentries; delete[] bentries; return 0; } //! @todo come up with better test data, so can have a big singular matrix of all 0..9 //! @todo change "probability of dependence" to "set X dependent rows" //! @bug fixme : seems to not work for n >= 10000 // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/solverat.C000066400000000000000000000061751347646240000166140ustar00rootroot00000000000000/* * examples/solverat.C * * Copyright (C) 2012 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** @file examples/solve.C * @ingroup examples * @brief Blackbox solvers. * @warning some are commented out... * @example examples/solve.C */ #include #include "givaro/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/solve.h" #include "linbox/util/matrix-stream.h" #include "linbox/solutions/methods.h" using namespace LinBox; using namespace std; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 4) { cerr << "Usage: solve []" << endl; return 0; } std::ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } std::ifstream invect; bool createB = false; if (argc == 2) { createB = true; } if (argc == 3) { invect.open (argv[2], std::ifstream::in); if (!invect) { createB = true; } else { createB = false; } } { typedef Givaro::QField Rats; Rats QQ; typedef DenseVector RVector; MatrixStream ms( QQ, input ); DenseMatrix A ( ms ); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; RVector X(QQ, A.coldim()),B(QQ, A.rowdim()); if (createB) { cerr << "Creating a random {-1,1} vector " << endl; for(auto it=B.begin(); it != B.end(); ++it) if (drand48() <0.5) *it = -1; else *it = 1; } else { for(auto&& it:B) invect >> it; invect.close(); } std::cout << "B is ["; for(auto it:B) QQ.write(cout, it) << ' '; std::cout << ']' << std::endl; Timer chrono; // DenseElimination dense std::cout << "DenseElimination" << std::endl; chrono.start(); solve (X, A, B, Method::DenseElimination()); chrono.stop(); std::cout << "(DenseElimination) Solution is ["; for(auto it:X) QQ.write(cout, it) << " "; std::cout << ']' << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/sparseelimdet.C000066400000000000000000000061661347646240000176160ustar00rootroot00000000000000/* * examples/sparseelimdet.C * * Copyright (C) 2006, 2010 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/sparseelimdet.C * @example examples/sparseelimdet.C \brief Gaussian elimination determinant of sparse matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include #include #include #include #include #include using namespace LinBox; using namespace std; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 3) { cerr << "Usage: sparseelimdet [

]" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file: " << argv[1] << endl; return -1; } Method::SparseElimination SE; if (argc == 2) { // determinant over the integers. Givaro::ZRing ZZ; SparseMatrix > A ( ZZ ); A.read(input); cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; SE.pivotStrategy = PivotStrategy::Linear; Givaro::ZRing::Element d; det (d, A, SE); ZZ.write(cout << "Determinant is ", d) << endl; } if (argc == 3) { // determinant over a finite field typedef Givaro::Modular Field; double q = atof(argv[2]); Field F(q); SparseMatrix B (F); B.read(input); cout << "B is " << B.rowdim() << " by " << B.coldim() << endl; if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; // using Sparse Elimination SE.pivotStrategy = PivotStrategy::None; Field::Element d; det (d, B, SE); if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; F.write(cout << "Determinant is ", d) << endl; // using Sparse Elimination with reordering SE.pivotStrategy = PivotStrategy::Linear; detInPlace (d, B, SE); if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; F.write(cout << "Determinant is ", d) << endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/sparseelimrank.C000066400000000000000000000074361347646240000177760ustar00rootroot00000000000000/* * examples/sparseelimrank.C * * Copyright (C) 2006, 2010 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \file examples/sparseelimrank.C * @example examples/sparseelimrank.C \brief Gaussian elimination Rank of sparse matrix over Z or Zp. \ingroup examples */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace LinBox; using namespace std; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); commentator().setBriefReportStream (std::cout); if (argc < 2 || argc > 3) { cerr << "Usage: rank [

]" << endl; return -1; } ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file: " << argv[1] << endl; return -1; } size_t r; if (argc == 2) { // rank over the integers. /* We could pick a random prime and work mod that prime, But the point here is that the rank function in solutions/ handles that issue. Our matrix here is an integer matrix and our concept is that we are getting the rank of that matrix by some blackbox magic inside linbox. */ Givaro::QField QQ; MatrixStream> ms( QQ, input ); SparseMatrix, SparseMatrixFormat::SparseSeq > A ( ms ); if (A.rowdim() <= 20 && A.coldim() <= 20) A.write(std::cerr << "A:=",Tag::FileFormat::Maple) << ';' << std::endl; cout << "A is " << A.rowdim() << " by " << A.coldim() << endl; LinBox::rank (r, A, Method::SparseElimination() ); cout << "Z Rank is " << r << endl; } if (argc == 3) { double q = atof(argv[2]); typedef Givaro::Modular Field; Field F(q); MatrixStream ms( F, input ); SparseMatrix B (ms); cout << "B is " << B.rowdim() << " by " << B.coldim() << endl; if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; Method::SparseElimination SE; // SE.pivotStrategy = PivotStrategy::None; // // using Sparse Elimination // LinBox::rank (r, B, SE); // if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; // cout << "Rank is " << r << endl; SE.pivotStrategy = PivotStrategy::Linear; // using Sparse Elimination Givaro::Timer chrono; chrono.start(); LinBox::rankInPlace (r, B, SE); chrono.stop(); if (B.rowdim() <= 20 && B.coldim() <= 20) B.write(cout) << endl; F.write(cout << "Rank is " << r << " over ") << endl; std::cerr << chrono << std::endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/sparsesolverat.C000066400000000000000000000064421347646240000200270ustar00rootroot00000000000000/* * examples/sparsesolverat.C * * Copyright (C) 2012 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #include "givaro/modular.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/solutions/solve.h" #include "linbox/util/matrix-stream.h" #include "linbox/solutions/methods.h" using namespace LinBox; using namespace std; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 4) { cerr << "Usage: solve []" << endl; return 0; } std::ifstream input (argv[1]); if (!input) { cerr << "Error opening matrix file " << argv[1] << endl; return -1; } std::ifstream invect; bool createB = false; if (argc == 2) { createB = true; } if (argc == 3) { invect.open (argv[2], std::ifstream::in); if (!invect) { createB = true; } else { createB = false; } } { typedef Givaro::QField Rats; Rats QQ; typedef DenseVector RVector; MatrixStream ms( QQ, input ); SparseMatrix A ( ms ); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; RVector X(QQ, A.coldim()),B(QQ, A.rowdim()); if (createB) { cerr << "Creating a random {-1,1} vector " << endl; for(auto it=B.begin(); it != B.end(); ++it) if (drand48() <0.5) *it = -1; else *it = 1; } else { for(auto&& it:B) invect >> it; invect.close(); } std::cout << "B is ["; for(auto it:B) QQ.write(cout, it) << ' '; std::cout << ']' << std::endl; // Generator for a random solution if over-determined Timer chrono; // Sparse Elimination std::cout << "Sparse Elimination" << std::endl; chrono.start(); // @fixme Can't pass a Randiter anymore, we need an API through Method to set seed or such // typename Rats::RandIter generator(QQ,0,BaseTimer::seed() ); // solveInPlace (X, A, B, Method::SparseElimination(), generator); solveInPlace (X, A, B, Method::SparseElimination()); chrono.stop(); std::cout << "(SparseElimination) Solution is ["; for(auto it:X) QQ.write(cout, it) << ' '; std::cout << ']' << std::endl; std::cout << "CPU time (seconds): " << chrono.usertime() << std::endl; } return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/examples/test.sh000077500000000000000000000015341347646240000161610ustar00rootroot00000000000000#!/bin/bash # written by Brice Boyer (briceboyer) # part of LinBox, see COPYING # SED="sed" # case "`uname`" in # Darwin*) SED="gsed" ;; # esac set -o nounset # Treat unset variables as an error fail() { echo "fail" } success() { echo "ok" } pass="true" echo -n "check rank ... " rank_cmd="Rank\sis\s" ./rank data/test.matrix 7 > linbox-tmp.data result=`cat linbox-tmp.data | grep ${rank_cmd} | $SED 's/'"$rank_cmd"'\([0-9]*\).*/\1/'` [ "$result" -eq "9" ] && success || { fail ; pass="false" ; } echo -n "check rank ... " ./rank data/test.matrix > linbox-tmp.data result=`cat linbox-tmp.data | grep ${rank_cmd} | $SED 's/'"$rank_cmd"'\([0-9]*\).*/\1/'` [ "$result" -eq "10" ] && success || { fail ; pass="false" ; } [ "$pass" == "true" ] && { success ; exit 0 ;} || { fail ; exit 1 ;}; linbox-1.6.3/examples/valence.C000066400000000000000000000056561347646240000163750ustar00rootroot00000000000000/* * examples/valence.C * * Copyright (C) 2005, 2010 J-G Dumas * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /**\file examples/valence.C * \brief Valence of sparse matrix over Z or Zp. * \ingroup examples * @example examples/valence.C */ #include #include #include #include #include #include #include #include using namespace LinBox; int main (int argc, char **argv) { commentator().setMaxDetailLevel (-1); commentator().setMaxDepth (-1); commentator().setReportStream (std::cerr); if (argc < 2 || argc > 3) { std::cerr << "Usage: valence [-ata|-aat]" << std::endl; return -1; } std::ifstream input (argv[1]); if (!input) { std::cerr << "Error opening matrix file " << argv[1] << std::endl; return -1; } Givaro::ZRing ZZ; MatrixStream< Givaro::ZRing > ms( ZZ, input ); typedef SparseMatrix > Blackbox; Blackbox A (ms); std::cout << "A is " << A.rowdim() << " by " << A.coldim() << std::endl; Givaro::ZRing::Element val_A; if (argc == 3) { Transpose T(&A); if (strcmp(argv[2],"-aat")) { Compose< Transpose, Blackbox > C (&T, &A); std::cout << "A^T A is " << C.rowdim() << " by " << C.coldim() << std::endl; valence(val_A, C); } else { Compose< Blackbox, Transpose > C (&A, &T); std::cout << "A A^T is " << C.rowdim() << " by " << C.coldim() << std::endl; valence(val_A, C); } } else { if (A.rowdim() != A.coldim()) { std::cerr << "Valence works only on square matrices, try either to change the dimension in the matrix file, or to compute the valence of A A^T or A^T A, via the -aat or -ata options." << std::endl; exit(0); } else valence (val_A, A); } std::cout << "Valence is " << val_A << std::endl; return 0; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/incremente-versions000077500000000000000000000105011347646240000167440ustar00rootroot00000000000000#!/bin/csh -f # Copyright(c) 2011 LinBox # Copyright(c)'1994-2009 by The Givaro group # Imported and modified from Givaro's by Brice Boyer (briceboyer) # see the COPYING file for more details. set conf = configure.ac set ver = Makefile.am set autoinst = linbox-auto-install.sh #verbatim second argument of AC_INIT set verb = `grep ^AC_INIT $conf | cut -d',' -f2` #removes spaces and brackets set vern = `echo "$verb" | sed 's/ //g;s/\[//;s/\]//'` echo "Current version is $vern." echo -n "Increment library version ? (y/n)" set answ = $< if ("$answ" == "y") then set line = `fgrep -n ^AC_INIT $conf | cut -d':' -f1` #gets the line set macro = `echo "$vern" | cut -d'.' -f1` #a version number is macro.minor.micro set minor = `echo "$vern" | cut -d'.' -f2` set micro = `echo "$vern" | cut -d'.' -f3` set tmpfile = `mktemp` #tempfile set sedfile = `mktemp` #temp sed file set pmicro = `echo $micro` @ pmicro ++ set pminor = `echo $minor` @ pminor ++ set pmacro = `echo $macro` @ pmacro ++ echo "Increment micro revision number ($vern -> $macro.$minor.$pmicro) ? press '0' " echo "Increment minor revision number ($vern -> $macro.$pminor.0) ? press '1' " echo -n "Increment macro revision number ($vern -> $pmacro.0.0) ? press '2' " set increm = $< switch ($increm) case 0: set newv = "[$macro.$minor.$pmicro]" breaksw case 1: set newv = "[$macro.$pminor.0]" breaksw case 2: set newv = "[$pmacro.0.0]" breaksw default: set newv = "$verb" echo "'$increm' read. Not incrementing anything." breaksw endsw #replacing [ ] and . with escaped version for sed would understand them as 'operators' echo "$line s/$verb/$newv/" | sed 's/\./\\\./g;s/\[/\\\[/g;s/\]/\\\]/g' > $sedfile sed -f $sedfile $conf > $tmpfile #clean up \rm -f $sedfile #diff for changes diff -u0 $conf $tmpfile #if something was changed, confirm incrementation : if ("$newv" != "$verb") then echo -n "Confirmation of incrementation ? (yes/no)" set answ = $< set backupconf = $conf.back$$ if ("$answ" == "yes") then \cp -p $conf $backupconf echo "Back-up of $conf made in $backupconf. Now overwriting $conf." \mv -f $tmpfile $conf else echo "'$answ' read. Not incrementing anything." \rm -f $tmpfile exit 0 ; endif #now change Makefile accordingly echo -n "Incrementing Makefile revision accordingly" set tmpfile = `mktemp` #tempfile set sedfile = `mktemp` #tempfile switch ($increm) case 0: echo -n "s/VERSION.*/VERSION=$macro.$minor.$pmicro/" >> $sedfile breaksw case 1: echo "s/VERSION.*/VERSION=$macro.$pminor.0/" > $sedfile breaksw case 2: echo "s/VERSION.*/VERSION=$pmacro.0.0/" > $sedfile breaksw default: echo "Something abnormal happened" exit 1 breaksw endsw sed -f $sedfile $ver > $tmpfile \rm -f $sedfile diff -u0 $ver $tmpfile echo -n "Confirmation of incrementation ? (yes/no) " set answ = $< set backupmake = $ver.back$$ if ("$answ" == "yes") then \cp -p $ver $backupmake \mv -f $tmpfile $ver else echo "'$answ' read. Not incrementing anything." echo " your old $conf is restored..." \rm -f $tmpfile \mv -f $backupconf $conf exit 0 endif #now change linbox-auto-install accordingly echo -n "Incrementing linbox-auto-install.sh revision accordingly" set tmpfile = `mktemp` #tempfile set sedfile = `mktemp` #tempfile switch ($increm) case 0: echo -n "s/STABLE_LB=.*/STABLE_LB=$macro.$minor.$pmicro/" >> $sedfile breaksw case 1: echo "s/STABLE_LB=.*/STABLE_LB=$macro.$pminor.0/" > $sedfile breaksw case 2: echo "s/STABLE_LB=.*/STABLE_LB=$pmacro.0.0/" > $sedfile breaksw default: echo "Something abnormal happened" exit 1 breaksw endsw sed -f $sedfile $autoinst > $tmpfile \rm -f $sedfile diff -u0 $autoinst $tmpfile echo -n "Confirmation of incrementation ? (yes/no) " set answ = $< if ("$answ" == "yes") then \mv -f $tmpfile $autoinst echo " your old $conf and $ver are destroyed..." \rm -f $backupconf $backupmake else echo "'$answ' read. Not incrementing anything." echo " your old $conf and $ver are restored..." \rm -f $tmpfile \mv -f $backupconf $conf \mv -f $backupmake $ver exit 0 endif endif else echo "'$answ' read. Not doing anything." endif exit 0 linbox-1.6.3/interfaces/000077500000000000000000000000001347646240000151455ustar00rootroot00000000000000linbox-1.6.3/interfaces/Makefile.am000066400000000000000000000015721347646240000172060ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== SUBDIRS=driver kaapi maple linbox-1.6.3/interfaces/driver/000077500000000000000000000000001347646240000164405ustar00rootroot00000000000000linbox-1.6.3/interfaces/driver/Makefile.am000066400000000000000000000050661347646240000205030ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group #========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== if LINBOX_COMPILE_DRIVERS pkgincludesubdir=$(includedir)/interfaces/driver AM_CPPFLAGS=-I$(top_srcdir) -I. -I../../linbox AM_CXXFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR #ifdef HAVE_NTL AM_CXXFLAGS +=$(NTL_CFLAGS) #endif #LDADD= $(GMP_LIBS) $(NTL_LIBS) $(MAPLE_LIBS) "../../linbox/liblinbox.la -z muldefs" lib_LTLIBRARIES=liblbdriver.la liblbdriver_la_SOURCES= lb-element.C \ lb-domain.C \ lb-vector.C \ lb-polynomial.C \ lb-det.C \ lb-rank.C \ lb-garbage.C \ lb-minpoly.C \ lb-blackbox.C \ lb-charpoly.C # \ # lb-solve.C liblbdriver_la_LDFLAGS= $(NTL_LIBS) $(LDFLAGS) $(LINBOX_LDFLAGS) $(top_srcdir)/linbox/liblinbox.la -Wl,-zmuldefs pkginclude_HEADERS=\ lb-driver.h \ lb-blackbox-abstract.h \ lb-blackbox-type.h \ lb-domain-function.h \ lb-element-collection.h \ lb-polynomial.h \ lb-vector-data.h \ lb-blackbox-collection.h \ lb-charpoly.h \ lb-domain-functor.h \ lb-element-data.h \ lb-rank.h \ lb-vector-function.h \ lb-blackbox-data.h \ lb-det.h \ lb-domain.h \ lb-element.h \ lb-solve.h \ lb-vector-functor.h \ lb-blackbox-function.h \ lb-domain-abstract.h \ lb-domain-type.h \ lb-garbage.h \ lb-utilities.h \ lb-vector.h \ lb-blackbox-functor.h \ lb-domain-collection.h \ lb-interface.h \ lb-vector-abstract.h \ lb-vector-type.h \ lb-blackbox.h \ lb-domain-data.h \ lb-element-abstract.h \ lb-minpoly.h \ lb-vector-collection.h endif linbox-1.6.3/interfaces/driver/compile-readme.txt000066400000000000000000000002321347646240000220610ustar00rootroot00000000000000CAREFUL with IA64, all libraries used in the link edition need to be compiled with the option -fPIC -DPIC this is mandatory to provide a dynamic library.linbox-1.6.3/interfaces/driver/lb-blackbox-abstract.h000066400000000000000000000034361347646240000226000ustar00rootroot00000000000000/* lb-blackbox-abstract.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_abstract_H #define __LINBOX_lb_blackbox_abstract_H #include #include /******************************** * Abstract object for Blackbox * ********************************/ class BlackboxAbstract : public LinBoxBaseVisitable{ public: virtual ~BlackboxAbstract(){}; virtual BlackboxAbstract* clone() const =0; virtual void* getPtr() const =0; virtual const DomainKey& getDomainKey() const =0; virtual const char* info() const =0; virtual void rebind(const DomainKey&) =0; LINBOX_VISITABLE(); }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox-collection.h000066400000000000000000000032351347646240000231250ustar00rootroot00000000000000/* lb-blackbox-collection.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_collection_H #define __LINBOX_lb_blackbox_collection_H #include #include /************************** * Collection of Blackbox * **************************/ // definition of a key typedef size_t BlackboxKey; // comparison functor on key struct BlackboxKeyLessThan{ bool operator()(const BlackboxKey& k1, const BlackboxKey &k2) {return (k1 < k2);} }; // definition of a hash table type typedef std::map BlackboxTable; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox-data.h000066400000000000000000000206101347646240000216770ustar00rootroot00000000000000/* lb-blackbox-data.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_data_H #define __LINBOX_lb_blackbox_data_H #include "linbox/matrix/sparse-matrix.h" #include "linbox/util/matrix-stream.h" #include #include #include #include #include #include #include extern BlackboxTable blackbox_hashtable; /****************************************************** * Functor to determine domain in Abstract Blackboxes * ******************************************************/ template class Blackbox, class Functor> class BlackboxSpecFunctor{ const Functor & fct; void *ptr; public: BlackboxSpecFunctor(const Functor &f, void *p) : fct(f), ptr(p) {} template void operator()(Result &res, Domain *d) const { Blackbox * b= static_cast*> (ptr); fct(res, b); } }; /******************************************** * Factory to construct Abstract Blackboxes * ********************************************/ class Blackbox_Factory { public: typedef BlackboxAbstract* (*createBlackbox_1_CallBack)(const DomainKey &, size_t, size_t, const char*); typedef BlackboxAbstract* (*createBlackbox_2_CallBack)(const DomainKey &, std::istream&, const char*); typedef std::map , ltstr> CallBackMap; bool add(const char *name, std::pair createD){ return _callback.insert(CallBackMap::value_type(name, createD)).second; } bool remove(const char *name){return _callback.erase(name) == 1;} BlackboxAbstract* create(const char *name, const DomainKey &k, size_t m, size_t n){ CallBackMap::iterator it = _callback.find(name); if (it != _callback.end()){ return it->second.first(k, m, m,name); } else { std::string mes("LinBox ERROR: you are trying to construct a non defined blackbox << "); mes+= std::string(name); mes+= std::string(" >>\n"); throw lb_runtime_error(mes.c_str());// throw an exception } } BlackboxAbstract* create(const char *name, const DomainKey &k, std::istream &is){ CallBackMap::iterator it = _callback.find(name); if (it != _callback.end()){ return it->second.second(k, is, name); } else { std::string mes("LinBox ERROR: you are trying to construct a non defined blackbox << "); mes+= std::string(name); mes+= std::string(" >>\n"); throw lb_runtime_error(mes.c_str());// throw an exception } } size_t size() { return _callback.size(); } private: CallBackMap _callback; }; /****************************** * Functor to copy Blackboxes * ******************************/ class CopyBlackboxFunctor { public: template void operator()(void *&res, Blackbox *B) const { res= new Blackbox(static_cast(*B)); } }; /********************************* * Functors to rebind Blackboxes * *********************************/ template class Blackbox> class RebindBlackboxFunctor{ void *&ptr; public: RebindBlackboxFunctor(void *&p) : ptr(p) {} template void operator()(const DomainKey &key, Domain *D) const { RebindBlackboxFunctor fct(ptr); DomainFunction::call(*D, key, fct); } template void operator()(DomainSource &res, DomainTarget *D) const { Blackbox *B_source= static_cast * > (ptr); Blackbox *B_target = NULL; /* was not init't */ // typename Blackbox::template rebind()(*B_target, *B_source, *D); typename Blackbox::template rebind()(*B_target, *B_source); delete B_source; ptr = B_target; } }; /************************************************************ * Blackbox Envelope to be compliant with Blackbox Abstract * ************************************************************/ template class Blackbox> class BlackboxEnvelope : public BlackboxAbstract{ protected: void *ptr; DomainKey key; const char* _info; public: BlackboxEnvelope(void *p, const DomainKey &k, const char *Info) : ptr(p), key(k, true), _info(Info) {} ~BlackboxEnvelope(){} BlackboxAbstract* clone() const { CopyBlackboxFunctor Fct; void *b; launch(b, Fct); return new BlackboxEnvelope(b, key, _info); } void * getPtr() const { return ptr;} virtual const DomainKey& getDomainKey() const { return key; } LINBOX_VISITABLE(); template void launch (Result &res, const Functor &fct) const { BlackboxSpecFunctor bbs(fct, ptr); DomainFunction::call(res, key, bbs); } const char* info() const { std::string msg= "[ LinBox Blackbox (storage = "; msg+= std::string(_info); msg+= std::string(", domain = [LinBox Domain (type = "); msg+= std::string(key.Type()); msg+= std::string(", charact = "); msg+= std::string(key.Characteristic()); msg+= std::string(")] )]\n"); return msg.c_str(); } void rebind(const DomainKey &k) { RebindBlackboxFunctor Fct(ptr); DomainFunction::call(k, key, Fct); key = k; key.set_autogc(); } }; /********************************** * Functors to construct Blackbox * **********************************/ template class Blackbox> class CreateBlackboxFunctor{ size_t &_row; size_t &_col; public: CreateBlackboxFunctor(size_t &m, size_t &n) : _row(m), _col(n) {} template void operator()(void *&res, Domain *D) const { res = new Blackbox(*D, _row, _col); } }; template class Blackbox> class CreateBlackboxFromStreamFunctor{ std::istream ∈ public: CreateBlackboxFromStreamFunctor(std::istream &i) : in(i) {} template void operator()(void *&res, Domain *D) const { LinBox::MatrixStream ms(*D, in); res = new Blackbox(ms); } }; /****************************************************** * Blackbox construction function used in the Factory * ******************************************************/ template class Blackbox> BlackboxAbstract* constructBlackbox_from_size(const DomainKey &k, size_t m, size_t n, const char* info){ CreateBlackboxFunctor fct(m,n); void *bb; DomainFunction::call(bb, k, fct); BlackboxEnvelope *bbe = new BlackboxEnvelope (bb, k, info); return bbe; } template class Blackbox> BlackboxAbstract* constructBlackbox_from_stream (const DomainKey &k, std::istream &in, const char *info){ CreateBlackboxFromStreamFunctor fct(in); void *bb; DomainFunction::call(bb, k, fct); BlackboxEnvelope *bbe = new BlackboxEnvelope (bb, k, info); return bbe; } /************************************************************ * Function to add an abstract blackbox in linbox hashtable * ************************************************************/ const BlackboxKey& addBlackbox(BlackboxAbstract * v){ std::pair status; status = blackbox_hashtable.insert(std::pair (BlackboxKey(v), v)); if (status.second) return status.first->first; else throw lb_runtime_error("LinBox ERROR: blackbox creation failed \n");// throw an exception } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox-function.h000066400000000000000000000052741347646240000226240ustar00rootroot00000000000000/* lb-blackbox-function.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_function_H #define __LINBOX_lb_blackbox_function_H #include #include /*********************************************************** * API to launch a generic function over a linbox blackbox * **********************************************************/ class BlackboxFunction { public: // call a functor over a blackbox from the hashtable, result is given through 1st parameter template static void call(Result &res, const std::pair &blackbox, const Functor &functor){ ApplyBlackboxFunctor Ap(res, functor); (blackbox.second)->Accept(Ap); } // call a functor over a blackbox from the hashtable, no result template static void call(const std::pair &v, const Functor &f){ void *dumbresult; call(dumbresult,v,f); } // call a functor over a blackbox from its key, result is given through 1st parameter template static void call(Result &res, const BlackboxKey &key, const Functor &functor){ BlackboxTable::const_iterator it = blackbox_hashtable.find(key); if (it != blackbox_hashtable.end()) BlackboxFunction::call(res, *it, functor); else throw lb_runtime_error("LinBox ERROR: use of a non allocated blackbox \n");// throw an exception } // call a functor over a blackbox from its key, no result template static void call(const BlackboxKey &k, const Functor &f) { void *dumbresult; call(dumbresult,k,f); } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox-functor.h000066400000000000000000000064071347646240000224560ustar00rootroot00000000000000/* lb-blackbox-functor.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_functor_H #define __LINBOX_lb_blackbox_functor_H #include #include #include /************************************************************************* * Base class for apply functor over a blackbox (used for code generation) * *************************************************************************/ template class ApplyBlackboxFunctorBase { protected: Result *res; const Functor *fct; public: ApplyBlackboxFunctorBase(){} template void apply(const Blackbox &b){ b.launch(*res, *fct); } }; /*************************************** * Macro for automatic code generation * ***************************************/ #define LB_BLACKBOX_VISIT(B) \ void visit(const B &d){this->apply(d);} /********************************************************************************** * Generate automatically the visitors for all Blackbox in the blackbox type list * **********************************************************************************/ template class LinBoxBlackboxVisitor; template class LinBoxBlackboxVisitor{}; template class LinBoxBlackboxVisitor, Functor, Result> : public LinBoxVisitor , public ApplyBlackboxFunctorBase { public: LB_BLACKBOX_VISIT(T); }; template class LinBoxBlackboxVisitor, Functor, Result > : public LinBoxVisitor , public LinBoxBlackboxVisitor { public: LB_BLACKBOX_VISIT(Head); }; /**************************************************** * functionalities to apply functor over a blackbox * ****************************************************/ template class ApplyBlackboxFunctor : public LinBoxBlackboxVisitor { public: ApplyBlackboxFunctor(Result &r, const Functor &f) { this->res = &r; this->fct = &f; } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox-type.h000066400000000000000000000046551347646240000217620ustar00rootroot00000000000000/* lb-blackbox-type.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_type_H #define __LINBOX_lb_blackbox_type_H #include /**************************************** * Define the list of all Blackbox Type * ****************************************/ // (NEED TO USE ENVELOPE TO DEFINE A CONCRETE TYPE) typedef LinBoxTypelist < BlackboxEnvelope< LinBox::BlasMatrix > , LinBoxDumbType> BL1; //typedef LinBoxTypelist < BlackboxEnvelope< LinBox::SparseMatrix > , BL1> BL2; // define the blackbox typelist typedef BL1 BlackboxList; /********************************************* * Update the Factory with all blackbox type * *********************************************/ extern Blackbox_Factory linbox_blackbox; void UpdateBlackbox() { // linbox_blackbox.add("linbox_sparse", // Blackbox_Factory::CallBackMap::value_type::second_type( // constructBlackbox_from_size, constructBlackbox_from_stream )); linbox_blackbox.add("linbox_dense", Blackbox_Factory::CallBackMap::value_type::second_type( constructBlackbox_from_size, constructBlackbox_from_stream )); } /***************************** * Default type for blackbox * *****************************/ // definition of the default type blackbox #define default_blackbox "linbox_dense" #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox.C000066400000000000000000000157571347646240000207430ustar00rootroot00000000000000/* lb-blackbox.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_C #define __LINBOX_lb_blackbox_C #include "linbox/linbox-config.h" #include #include #include //#include "linbox/matrix/matrix-category.h" /******************************** * Allocate the global variable * ********************************/ // global hashtable for the allocated blackbox BlackboxTable blackbox_hashtable; // global variable for the blackbox factory Blackbox_Factory linbox_blackbox; // global variable for current blackbox type const char* current_blackbox = default_blackbox; /******************************************************* * API to contruct a m x n zero blackbox over a domain * *******************************************************/ const BlackboxKey& createBlackbox(const DomainKey &k, size_t m, size_t n, const char* name){ const char* type = name; if (type == NULL) type = current_blackbox; BlackboxAbstract* bb = linbox_blackbox.create(type, k, m , n); return addBlackbox(bb); } /********************************************************** * API to contruct a blackbox over a domain from a stream * **********************************************************/ const BlackboxKey& createBlackbox(const DomainKey &k, std::istream &in, const char *name){ const char* type = name; if (type == NULL) type = current_blackbox; BlackboxAbstract* bb = linbox_blackbox.create(type, k, in); return addBlackbox(bb); } /************************************ * API to copy an existing blackbox * ************************************/ const BlackboxKey& copyBlackbox(const BlackboxKey &k){ BlackboxTable::iterator it = blackbox_hashtable.find(k); if (it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: blackbox does not exist (copying impossible)\n"); BlackboxAbstract *v = it->second->clone(); return addBlackbox(v); } /******************************************** * API to get the dimensions of a blackbox * ********************************************/ class BlackboxDimensionFunctor{ public: template void operator()(BlackboxDimension &dim, Blackbox *B) const{ dim.first = B->rowdim(); dim.second = B->coldim(); } }; BlackboxDimension getBlackboxDimension(const BlackboxKey &key){ std::pair dim; BlackboxDimensionFunctor Fct; BlackboxFunction::call(dim, key, Fct); return dim; } /******************************************* * API to set a blackbox with random value * *******************************************/ template class RandomBlackbox{ public: template void operator()(Blackbox *V, Domain *D) { throw lb_runtime_error("LinBox ERROR: incompatible blackbox type and domain type (set random value impossible)\n"); } }; template class RandomBlackbox{ public: template void operator()(Blackbox *V, Domain *D) { throw lb_runtime_error("LinBox ERROR: impossible to set random value (storage is a real blackbox)\n"); } }; template class RandomBlackbox{ public: template void operator()(Blackbox *B, Domain *D) { typename Domain::RandIter G(*D); for (size_t i=0; i< B->coldim();++i) for (size_t j=0;j< B->coldim();++j) G.random(B->refEntry(i,j)); } }; template class BlackboxAtRandomFunctorSpec{ protected: Blackbox *vect; public: BlackboxAtRandomFunctorSpec(Blackbox *V) : vect(V) {} template void operator()(void *, Domain *D) const { RandomBlackbox::Type>()(vect, D); } }; class BlackboxAtRandomFunctor{ protected: const BlackboxKey key; public: BlackboxAtRandomFunctor(const BlackboxKey &k) : key(k) {} template void operator()(void*, Blackbox *V) const { BlackboxTable::iterator it = blackbox_hashtable.find(key); if ( it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid blackbox (set random value impossible)"); BlackboxAtRandomFunctorSpec Fct(V); DomainFunction::call(it->second->getDomainKey(), Fct); } }; void setBlackboxAtRandom(const BlackboxKey &k){ BlackboxAtRandomFunctor Fct(k); BlackboxFunction::call(k, Fct); } /********************************************** * API to rebind a blackbox over a new domain * **********************************************/ void rebindBlackbox(const BlackboxKey &Vkey, const DomainKey &Dkey){ BlackboxTable::iterator it = blackbox_hashtable.find(Vkey); if ( it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid blackbox (rebinding to another domain impossible)"); it->second->rebind(Dkey); } /************************************************* * API to write a blackbox over an output stream * *************************************************/ class WriteBlackboxFunctor{ std::ostream &os; public: WriteBlackboxFunctor(std::ostream &o) : os(o) {} template void operator() (void*, Blackbox *B) const { B->write(os); } }; void writeBlackbox (const BlackboxKey &key, std::ostream &os){ WriteBlackboxFunctor Fct(os); BlackboxFunction::call(key, Fct); } /******************************************* * API to modify the current blackbox type * *******************************************/ void setBlackbox(const char* t){ current_blackbox= t; } /************************************ * API to write info on a blackbox * ************************************/ void writeBlackboxInfo(const BlackboxKey &k, std::ostream& os){ BlackboxTable::const_iterator it= blackbox_hashtable.find(k); if ( it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid blackbox (writing blackbox information impossible)"); os<second->info(); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-blackbox.h000066400000000000000000000063551347646240000210020ustar00rootroot00000000000000/* lb-blackbox.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_blackbox_H #define __LINBOX_lb_blackbox_H #include #include /*************************** * Initializer of Blackbox * ***************************/ void UpdateBlackbox(); /******************************************************* * API to contruct a m x n zero blackbox over a domain * *******************************************************/ const BlackboxKey& createBlackbox(const DomainKey &k, size_t m, size_t n, const char* name=NULL); /********************************************************** * API to contruct a blackbox over a domain from a stream * **********************************************************/ const BlackboxKey& createBlackbox(const DomainKey &k, std::istream &is, const char *name=NULL); /************************************ * API to copy an existing blackbox * ************************************/ const BlackboxKey& copyBlackbox(const BlackboxKey &k); /******************************************** * API to get the dimensions of a blackbox * ********************************************/ typedef std::pair BlackboxDimension; BlackboxDimension getBlackboxDimension(const BlackboxKey &key); /******************************************* * API to write a blackbox over an ostream * *******************************************/ void writeBlackbox (const BlackboxKey &key, std::ostream &os); /******************************************* * API to set a blackbox with random value * *******************************************/ void setBlackboxAtRandom(const BlackboxKey &k); /********************************************** * API to rebind a blackbox over a new domain * **********************************************/ void rebindBlackbox(const BlackboxKey &Vkey, const DomainKey &Dkey); /******************************************* * API to modify the current blackbox type * *******************************************/ void setBlackbox(const char* t); /************************************ * API to write info on a blackbox * ************************************/ void writeBlackboxInfo(const BlackboxKey &k, std::ostream& os); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-charpoly.C000066400000000000000000000070161347646240000207640ustar00rootroot00000000000000/* lb-charpoly.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_charpoly_C #define __LINBOX_lb_charpoly_C #include "linbox/solutions/charpoly.h" #include "linbox/ring/givaro-polynomial.h" #include #include #include extern BlackboxTable blackbox_hashtable; extern VectorTable vector_hashtable; /************************************* * Characteristic Polynomial Functor * *************************************/ template class CharpolyFunctor{ protected: Method meth; public: CharpolyFunctor(Method m= Method()) : meth(m) {} template void operator() (Result &res, Blackbox *B) const { typedef typename Blackbox::Field Field; typedef typename Field::Element Element; // use givpolynomial du to non genericity of charpoly over integer typename LinBox::GivPolynomialRing::Element pol; LinBox::charpoly(pol, *B, meth); // convert back the result to std::vector std::vector *phi = static_cast*> (res); phi->resize(pol.size()); for (size_t i=0; i< pol.size(); ++i) B->field().assign((*phi)[i], pol[i]); } }; /******************************************************************** * API for characteristic polynomial computation * * characteristic polynomial is returned through a given vector key * ********************************************************************/ void lb_charpoly(const VectorKey &res, const BlackboxKey& key) { VectorTable::iterator it = vector_hashtable.find(res); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: result polynomial does not exist (charpoly computation impossible)\n"); CharpolyFunctor<> fct; void *ret = it->second->getPtr(); BlackboxFunction::call(ret, key, fct); } /************************************************************** * API for characteristic polynomial computation * * characteristic polynomial is returned through a vector key * **************************************************************/ const VectorKey& lb_charpoly(const BlackboxKey& key) { BlackboxTable::iterator it = blackbox_hashtable.find(key); if ( it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: blackbox is not defined (charpoly computation impossible)"); const VectorKey *res = & createVector(it->second->getDomainKey(), 0, "linbox_dense"); lb_charpoly(*res, key); return *res; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-charpoly.h000066400000000000000000000036011347646240000210250ustar00rootroot00000000000000/* lb-charpoly.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_charpoly_H #define __LINBOX_lb_charpoly_H #include #include /******************************************************************** * API for characteristic polynomial computation * * characteristic polynomial is returned through a given vector key * ********************************************************************/ void lb_charpoly(const VectorKey &res, const BlackboxKey& key); /************************************************************** * API for characteristic polynomial computation * * characteristic polynomial is returned through a vector key * **************************************************************/ const VectorKey& lb_charpoly(const BlackboxKey& key); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-det.C000066400000000000000000000066321347646240000177220ustar00rootroot00000000000000/* lb-det.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_det_C #define __LINBOX_lb_det_C #include "linbox/linbox-config.h" #include "linbox/solutions/det.h" #include #include #include #include extern BlackboxTable blackbox_hashtable; extern DomainTable domain_hashtable; /******************************************************** * list of available method for determinant computation * ********************************************************/ const char* lb_determinant_methods(); /*********************** * Determinant Functor * ***********************/ template class DeterminantFunctor{ private: Method meth; public: DeterminantFunctor(Method m = Method()) : meth(m) {} template void operator() (EltAbstract *&res, Blackbox *B) const { typedef typename Blackbox::Field::Element Element; if (Element *d = (dynamic_cast*>(res))->getElement()) LinBox::det(*d, *B, meth); else throw lb_runtime_error("LinBox ERROR: incompatible blackbox and element type (determinant computation impossible)"); } }; /******************************************************* * API for determinant computation * * determinant is returned through a given element key * *******************************************************/ void lb_determinant(const EltKey& Ekey, const BlackboxKey& Bkey, const char* method) { EltTable::iterator it = element_hashtable.find(Ekey); if ( it == element_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid element (determinant computation impossible)"); DeterminantFunctor<> fct; BlackboxFunction::call(it->second, Bkey, fct); } /************************************************** * API for determinant computation * * determinant is returned through an element key * **************************************************/ const EltKey& lb_determinant(const BlackboxKey& key, const char *method) { BlackboxTable::iterator it = blackbox_hashtable.find(key); if (it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: blackbox does not exist (determinant computation impossible)\n"); const DomainKey *d = &(it->second->getDomainKey()); const EltKey *e = &createElement(*d); lb_determinant(*e, key, method); return *e; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-det.h000066400000000000000000000040611347646240000177610ustar00rootroot00000000000000/* lb-det.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_det_H #define __LINBOX_lb_det_H #include #include /******************************************************* * API for determinant computation * * determinant is returned through a given element key * *******************************************************/ void lb_determinant(const EltKey &Ekey, const BlackboxKey &Bkey, const char *method="hybrid"); /************************************************** * API for determinant computation * * determinant is returned through an element key * **************************************************/ const EltKey& lb_determinant(const BlackboxKey &key, const char *method="hybrid"); /************************************************************* * API to print available method for determinant computation * *************************************************************/ const char* lb_determinant_methods(); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-abstract.h000066400000000000000000000030141347646240000222520ustar00rootroot00000000000000/* lb-domain-abstract.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_abstract_H #define __LINBOX_lb_domain_abstract_H #include /****************************** * Abstract object for Domains * *******************************/ class DomainAbstract : public LinBoxBaseVisitable { public: virtual ~DomainAbstract() {} //virtual const char* info() const =0; virtual DomainAbstract* clone() const =0; LINBOX_VISITABLE(); }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-collection.h000066400000000000000000000064711347646240000226140ustar00rootroot00000000000000/* lb-domain-collection.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_collection_H #define __LINBOX_lb_domain_collection_H #include "linbox/integer.h" #include #include /************************* * Collection of Domains * *************************/ // definition of a unique key (using embedded reference counting to manage domain) class DomainKey { private: LinBox::integer *pfirst; const char **psecond; size_t *counter; mutable bool autogc; public: DomainKey(const LinBox::integer &p, const char* name) : pfirst(new LinBox::integer(p)), psecond(new const char*(name)), counter(new size_t(0)), autogc(false) {} DomainKey(const DomainKey &k, bool gc = false) : pfirst(k.pfirst), psecond(k.psecond), counter(k.counter), autogc(gc) {(*counter)++;} ~DomainKey() { if (autogc){ extern void deleteDomain(const DomainKey &key); if ((*counter) == 0) deleteDomain(*this); else (*counter)--; } else{ if ((*counter) == 0) { delete counter; delete pfirst; delete psecond;} else (*counter)--; } } const DomainKey& operator= (const DomainKey &k) { if (autogc){ extern void deleteDomain(const DomainKey &key); if ((*counter) == 0) deleteDomain(*this); else (*counter)--; } else{ if ((*counter) == 0) { delete counter; delete pfirst; delete psecond;} else (*counter)--; } pfirst = k.pfirst; psecond = k.psecond; counter = k.counter; autogc = k.autogc; (*counter)++; return *this; } bool free() const {return ((*counter) == 0);} void dispose() const { (*counter)--; } void copy() const { (*counter)++; } void set_autogc() const {autogc=true;} bool lessThan(const DomainKey &k) const { return (strcmp(*psecond, *(k.psecond))<0) || ((strcmp(*psecond, *(k.psecond))==0) && ( *pfirst < *(k.pfirst ))); } LinBox::integer Characteristic() const {return *pfirst;} const char* Type() const {return *psecond;} size_t getcounter() const {return *counter;} }; // comparison functor on key struct DomainKeyLessThan{ bool operator()(const DomainKey& k1, const DomainKey &k2) { return k1.lessThan(k2);} }; // definition of a hash table type typedef std::map DomainTable; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-data.h000066400000000000000000000114011347646240000213570ustar00rootroot00000000000000/* lb-domain-data.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_data_H #define __LINBOX_lb_domain_data_H #include "linbox/linbox-config.h" #include "linbox/integer.h" #include "linbox/field/field-traits.h" #include #include #include #include #include #include extern DomainTable domain_hashtable; /***************************************** * Factory to construct Abstract Domains * *****************************************/ class Domain_Factory { public: typedef DomainAbstract* (*createDomainCallBack)(const LinBox::integer &); private: typedef std::map CallBackMap; CallBackMap _callback; public: bool add(const char *name, createDomainCallBack createD){ return _callback.insert(CallBackMap::value_type(name, createD)).second; } bool remove(const char *name){ return _callback.erase(name) == 1; } DomainAbstract* create(const char *name, const LinBox::integer &p){ CallBackMap::iterator it = _callback.find(name); if (it != _callback.end()){ return it->second(p); } else{ std::string mes("LinBox ERROR: you are trying to construct a non defined domain << "); mes+= std::string(name); mes+= std::string(" >>\n"); mes+= std::string(LinBox::integer(_callback.size())); throw lb_runtime_error(mes.c_str());// throw an exception } } size_t size() { return _callback.size(); } }; /********************************************************* * Specific Domain constructor according to the category * *********************************************************/ template class constructDomainFunctor { public: Domain* operator()(const LinBox::integer &p, Category){ throw lb_runtime_error("LinBox ERROR: try to construct a Domain of unknown category\n"); } }; template class constructDomainFunctor { public: Domain* operator()(const LinBox::integer &p, LinBox::RingCategories::ModularTag t) { return new Domain(p); } }; template class constructDomainFunctor { public: Domain* operator()(const LinBox::integer &p, LinBox::RingCategories::IntegerTag t) { return new Domain(); } }; template class constructDomainFunctor { public: Domain* operator()(const LinBox::integer &p, LinBox::RingCategories::RationalTag t) { return new Domain(); } }; /******************************************************** * Domain Envelope to be compliant with Domain Abstract * ********************************************************/ template class DomainEnvelope : public DomainAbstract { Domain *ptr; DomainEnvelope (Domain *D) : ptr(D) {} public: typedef Domain Self_t; typedef typename LinBox::FieldTraits::categoryTag categoryTag; DomainEnvelope() {} DomainEnvelope(const LinBox::integer &p) { ptr = constructDomainFunctor ()(p, categoryTag()); } ~DomainEnvelope() {delete ptr;} DomainAbstract* clone() const { return new DomainEnvelope (new Domain(*ptr)); } LINBOX_VISITABLE(); Domain *getDomain() const {return ptr;} }; /**************************************************** * Domain construction function used in the Factory * ****************************************************/ template DomainAbstract* constructDomain(const LinBox::integer &p) { //return constructDomainFunctor::categoryTag>()(p, typename LinBox::FieldTraits::categoryTag()); return static_cast(new DomainEnvelope(p)); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-function.h000066400000000000000000000052621347646240000223030ustar00rootroot00000000000000/* lb-domain-function.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_function_H #define __LINBOX_lb_domain_function_H #include #include /********************************************************* * API to launch a generic function over a linbox domain * *********************************************************/ extern DomainTable domain_hashtable; class DomainFunction { public: // call a functor over a domain from the hashtable, result is given through 1st parameter template static void call (Result &res, const std::pair &domain, const Functor &functor){ ApplyDomainFunctor Ap(res, functor); (domain.second)->Accept(Ap); } // call a functor over a domain from the hashtable, no result template static void call (const std::pair& k, const Functor& f){ void *dumbresult; call(dumbresult, k, f); } // call a functor over a domain from its key, result is given through 1st parameter template static void call (Result &res, const DomainKey &key, const Functor &functor){ DomainTable::iterator it = domain_hashtable.find(key); if (it != domain_hashtable.end()) DomainFunction::call(res, *it, functor); else throw lb_runtime_error("LinBox ERROR: use of a non allocated domain\n");// throw an exception } // call a functor over a domain from its key, no result template static void call (const DomainKey &k, const Functor &f){ void *dumbresult; call(dumbresult, k, f); } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-functor.h000066400000000000000000000064001347646240000221310ustar00rootroot00000000000000/* lb-domain-functor.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_functor_H #define __LINBOX_lb_domain_functor_H #include #include #include /************************************************************************* * Base class for apply functor over a domain (used for code generation) * *************************************************************************/ template class ApplyDomainFunctorBase { protected: Result *res; const Functor *fct; public: ApplyDomainFunctorBase(){} template void apply(const Domain &d){ (*fct)(*res, d.getDomain()); } }; /*************************************** * Macro for automatic code generation * ***************************************/ #define LB_DOMAIN_VISIT(D) \ void visit(const DomainEnvelope &d){this->apply(d);} /******************************************************************************* * Generate automatically the visitors for all domains in the domain type list * *******************************************************************************/ template class LinBoxDomainVisitor; template class LinBoxDomainVisitor{}; template class LinBoxDomainVisitor, Functor, Result> : public LinBoxVisitor >, public ApplyDomainFunctorBase { public: LB_DOMAIN_VISIT(T); }; template class LinBoxDomainVisitor, Functor, Result > : public LinBoxVisitor > , public LinBoxDomainVisitor { public: LB_DOMAIN_VISIT(Head); }; /************************************************** * functionalities to apply functor over a domain * **************************************************/ template class ApplyDomainFunctor : public LinBoxDomainVisitor { public: ApplyDomainFunctor(Result &r, const Functor &f) { this->res=&r; this->fct=&f; } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain-type.h000066400000000000000000000111611347646240000214320ustar00rootroot00000000000000/* lb-domain-type.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_type_H #define __LINBOX_lb_domain_type_H #include "linbox/ring/modular.h" #include "givaro/zring.h" #include "linbox/field/gmp-rational.h" #include "linbox/field/givaro.h" #ifdef __LINBOX_HAVE_NTL #include "linbox/ring/ntl.h" #endif /************************************** * Define the list of all Domain Type * **************************************/ #define __LINBOX_MINIMIZE_DOMAIN #define __LINBOX_DOMAIN_ONLY typedef LinBoxTypelist < Givaro::Modular , LinBoxDumbType> DL1; typedef LinBoxTypelist < LinBox::Givaro::ZRing , DL1> DL2; typedef LinBoxTypelist < LinBox::GMPRationalField , DL2> DL3; typedef LinBoxTypelist < Givaro::Modular , DL3> DL4; typedef LinBoxTypelist < LinBox::Givaro::Modular , DL4> DL5; typedef LinBoxTypelist < Givaro::Modular , DL5> DL6; #ifdef __LINBOX_MINIMIZE_DOMAIN typedef DL3 linbox_domain_list; #else typedef DL6 linbox_domain_list; #endif #ifdef __LINBOX_HAVE_NTL typedef LinBoxTypelist < LinBox::NTL_ZZ_p, LinBoxDumbType> DN1; typedef LinBoxTypelist < LinBox::NTL_zz_p, DN1> DN2; typedef LinBoxTypelist < LinBox::NTL_ZZ , DN2> DN3; #ifdef __LINBOX_MINIMIZE_DOMAIN typedef DN1 ntl_domain_list; #else typedef DN3 ntl_domain_list; #endif #else typedef LinBoxDumbType ntl_domain_list; #endif typedef LinBoxTypelist < LinBox::Givaro::GFq, LinBoxDumbType> DG1; typedef LinBoxTypelist < Givaro::Modular< int32_t>, DG1> DG2; #ifdef __LINBOX_MINIMIZE_DOMAIN typedef DG1 givaro_domain_list; #else typedef DG2 givaro_domain_list; #endif // define DomainList to be the list of all domains #ifdef __LINBOX_DOMAIN_ONLY typedef linbox_domain_list DomainList; #else typedef LinBoxTL::Append< linbox_domain_list, LinBoxTL::Append< ntl_domain_list, givaro_domain_list>::Result>::Result DomainList; #endif /******************************************* * Update the Factory with all domain type * *******************************************/ extern Domain_Factory linbox_domain; void UpdateDomain(){ linbox_domain.add("linbox_field_dbl" , constructDomain >); linbox_domain.add("linbox_field_rational" , constructDomain); linbox_domain.add("linbox_ring_integer" , constructDomain >); #ifndef __LINBOX_MINIMIZE_DOMAIN linbox_domain.add("linbox_field_32" , constructDomain >); linbox_domain.add("linbox_field_64" , constructDomain >); linbox_domain.add("linbox_field_mp" , constructDomain >); #endif #ifdef __LINBOX_HAVE_NTL linbox_domain.add("ntl_field_ZZ_p" , constructDomain); #ifndef __LINBOX_MINIMIZE_DOMAIN linbox_domain.add("ntl_field_zz_p" , constructDomain); linbox_domain.add("ntl_ring_integer" , constructDomain); #endif #endif linbox_domain.add("givaro_field_gfq" , constructDomain); #ifndef __LINBOX_MINIMIZE_DOMAIN linbox_domain.add("givaro_field_32" , constructDomain >); #endif } /**************************** * Default type for Domains * ****************************/ // definition of the default type for prime field #define default_prime_field "linbox_field_dbl" // definition of the default type for rational field #define default_rational_field "linbox_field_rational" // definition of the default type for integer ring #define default_integer_ring "linbox_ring_integer" #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain.C000066400000000000000000000074371347646240000204210ustar00rootroot00000000000000/* lb-domain.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_C #define __LINBOX_lb_domain_C #include #include /**************************** * Allocate global variable * ****************************/ // global hash table for allocated domains DomainTable domain_hashtable; // global variable for the factory Domain_Factory linbox_domain; // global variable for current prime field type const char* current_prime_field = default_prime_field; // global variable for current rational field type const char* current_rational_field = default_rational_field; // global variable for current integer ring type const char* current_integer_ring = default_integer_ring; /**************************** * API to contruct domains * ****************************/ const DomainKey& createDomain( const LinBox::integer characteristic, const char *name){ const char* type=name; if (name == NULL){ if (characteristic == 0) type = current_integer_ring; else type = current_prime_field; } DomainKey key(characteristic, type); // check if the domain is already constructed in domain hashtable // if so return the pointer to the domain DomainTable::const_iterator it= domain_hashtable.find(key) ; if (it != domain_hashtable.end()){ it->first.copy(); return it->first; } // need to create a new field DomainAbstract *domain = linbox_domain.create(type, characteristic); std::pair status= domain_hashtable.insert(std::pair (key, domain)); if (status.second) return status.first->first; else throw lb_runtime_error("LinBox ERROR: domain creation failed \n");// throw an exception } /************************ * API to copy domains * ************************/ const DomainKey copyDomain( const DomainKey &k){ return k; } /********************************************** * API to modify the current prime field type * **********************************************/ void setPrimeField(const char* t){ current_prime_field= t; } /************************************************* * API to modify the current rational field type * *************************************************/ void setRationalField(const char* t){ current_rational_field= t; } /*********************************************** * API to modify the current integer ring type * ***********************************************/ void setIntegerRing(const char* t){ current_integer_ring= t; } /********************************* * API to write info on a domain * *********************************/ void writeDomainInfo(const DomainKey &key, std::ostream& os){ os<<"[LinBox Domain (type = "<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-domain.h000066400000000000000000000045471347646240000204650ustar00rootroot00000000000000/* lb-domain.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_domain_H #define __LINBOX_lb_domain_H #include #include "linbox/integer.h" /************************* * Initializer of Domain * *************************/ void UpdateDomain(); /**************************** * API to contruct domains * ****************************/ const DomainKey& createDomain( const LinBox::integer characteristic, const char *name=NULL); /************************ * API to copy domains * ************************/ const DomainKey copyDomain( const DomainKey &k); /********************************************** * API to modify the current prime field type * **********************************************/ void setPrimeField(const char* t); /************************************************* * API to modify the current rational field type * *************************************************/ void setRationalField(const char* t); /*********************************************** * API to modify the current integer ring type * ***********************************************/ void setIntegerRing(const char* t); /********************************* * API to write info on a domain * *********************************/ void writeDomainInfo(const DomainKey &k, std::ostream& os); #endif // end of file // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-driver.h000066400000000000000000000052541347646240000205050ustar00rootroot00000000000000/* lb-driver.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_driver_H #define __LINBOX_lb_driver_H #include #include #include #include #include #include #include #include #include //problem with givaro-extension (UTT type is not always consistent) disabled in the code #include #include #include // overload PreconditionFailed to be a real exception std::ostringstream PrecondStream; void initException(){ LinBox::PreconditionFailed::setErrorStream(PrecondStream); } /*********************************** * Initialization of LinBox driver * ***********************************/ int LinBoxInit(){ initException(); UpdateDomain(); UpdateBlackbox(); UpdateVector(); return 0; } /*************************** * Close the LinBox Driver * ***************************/ int LinBoxEnd(){ LinBoxCollect(); return 0; } /****************************************** * Give info on LinBox driver active data * ******************************************/ void LinBoxDataInfo(std::ostringstream &out){ extern DomainTable domain_hashtable; extern BlackboxTable blackbox_hashtable; extern VectorTable vector_hashtable; extern EltTable element_hashtable; out<<"LinBox Driver active Data:\n" <<" - Domain : "<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-element-abstract.h000066400000000000000000000031031347646240000224330ustar00rootroot00000000000000/* lb-element-abstract.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_element_abstract_H #define __LINBOX_lb_element_abstract_H #include #include /******************************** * Abstract object for Elements * ********************************/ class EltAbstract { public: virtual ~EltAbstract(){} virtual EltAbstract* clone() const =0; virtual const DomainKey& getDomainKey() const =0; //virtual const char* info() const =0; }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-element-collection.h000066400000000000000000000033261347646240000227720ustar00rootroot00000000000000/* lb-element-collection.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_collection_H #define __LINBOX_lb_collection_H #include #include /************************** * Collection of Elements * **************************/ // definition of a unique key typedef size_t EltKey; // comparison functor on key struct EltKeyLessThan{ bool operator()(const EltKey& k1, const EltKey &k2) { return (k1 < k2);} }; // definition of a hash table type typedef std::map EltTable; // definition of a serial element struct SerialElement { const char* type; std::list list; }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-element-data.h000066400000000000000000000047201347646240000215470ustar00rootroot00000000000000/* lb-element.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_element_data_H #define __LINBOX_lb_element_data_H #include #include #include #include extern EltTable element_hashtable; /********************************************************** * Element Envelope to be compliant with Element Abstract * **********************************************************/ template class EltEnvelope : public EltAbstract { DomainKey key; Element *ptr; public: EltEnvelope(const DomainKey &k, Element* e) : key(k, true), ptr(e) {} ~EltEnvelope() {delete ptr;} Element *getElement() const {return ptr;} const DomainKey& getDomainKey() const { return key;} EltAbstract* clone() const { return new EltEnvelope(key, new Element(*ptr));} }; /***************************************** * construction of Element from a Domain * *****************************************/ class CreateEltFunctor{ protected: const DomainKey &key; public: CreateEltFunctor(const DomainKey &k) : key(k) {} template void operator()(EltAbstract *& e, Domain *D) const{ e = new EltEnvelope (key, new typename Domain::Element()); } }; EltAbstract* constructElt(const DomainKey &key){ EltAbstract *e; CreateEltFunctor Fct(key); DomainFunction::call(e, key, Fct); return e; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-element.C000066400000000000000000000105041347646240000205700ustar00rootroot00000000000000/* lb-element.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_element_C #define __LINBOX_lb_element_C #include #include /******************************** * Allocate all global variable * ********************************/ // global hash table for allocated elements EltTable element_hashtable; /******************************************* * API to contruct a element over a domain * *******************************************/ const EltKey& createElement(const DomainKey &key) { EltAbstract *e = constructElt(key); std::pair status; status = element_hashtable.insert(std::pair (EltKey(e), e)); if (status.second) return status.first->first; else throw lb_runtime_error("LinBox ERROR: element creation failed \n");// throw an exception } /********************************************* * API to write an a element over its domain * *********************************************/ class WriteElementFunctor{ protected: std::ostream &os; EltAbstract *elt; public: WriteElementFunctor(std::ostream &o, EltAbstract* e) : os(o), elt(e) {} template void operator() (void*, Domain *D) const { if (EltEnvelope *ptr = dynamic_cast*>(elt)) D->write(os, *(ptr->getElement()))<<"\n"; else throw lb_runtime_error("LinBox ERROR: incompatible domain and element type (element writing impossible)"); } }; void writeElement (const EltKey &key, std::ostream &os){ EltTable::iterator it = element_hashtable.find(key); if ( it == element_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid element (writing impossible)"); WriteElementFunctor Fct(os, it->second); DomainFunction::call(it->second->getDomainKey(), Fct); } /******************************* * API to serialize an element * *******************************/ template void ToSerialElement (SerialElement& s, typename Domain::Element &e, const Domain &D, Category cat){ s.type ="integer"; LinBox::integer elt; D.convert(elt, e); s.list.push_back(elt); } template void ToSerialElement (SerialElement& s, typename Domain::Element &e, const Domain &D, LinBox::RingCategories::RationalTag cat){ s.type ="rational"; LinBox::integer num, den; D.get_num(num, e); D.get_den(den, e); s.list.push_back(num); s.list.push_back(den); } class SerializeElementFunctor{ protected: EltAbstract *elt; public: SerializeElementFunctor(EltAbstract *e) : elt(e) {} template void operator() (SerialElement &s, Domain *D) const { if (EltEnvelope *ptr = dynamic_cast*>(elt)){ ToSerialElement(s, *(ptr->getElement()), *D, typename LinBox::FieldTraits::categoryTag()); } else throw lb_runtime_error("LinBox ERROR: incompatible domain and element type (element writing impossible)"); } }; void SerializeElement (SerialElement &s, const EltKey &key) { EltTable::iterator it = element_hashtable.find(key); if ( it == element_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid element (serializing impossible)"); SerializeElementFunctor Fct(it->second); DomainFunction::call(s, it->second->getDomainKey(), Fct); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-element.h000066400000000000000000000034231347646240000206370ustar00rootroot00000000000000/* lb-element.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_element_H #define __LINBOX_lb_element_H #include #include /******************************************* * API to contruct a element over a domain * *******************************************/ const EltKey& createElement(const DomainKey &key); /********************************************* * API to write an a element over its domain * *********************************************/ void writeElement (const EltKey &key, std::ostream &os); /******************************* * API to serialize an element * *******************************/ void SerializeElement (SerialElement &s, const EltKey &key); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-garbage.C000066400000000000000000000143461347646240000205370ustar00rootroot00000000000000/* lb-garbage.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_garbage_C #define __LINBOX_lb_garbage_C #include #include #include #include #include #define __LINBOX_NO_GC_EXCEPTION /*************************************** * API to delete a domain from ist key * ***************************************/ class DeleteElementFunctor{ protected: EltAbstract *elt; public: DeleteElementFunctor(EltAbstract *e) : elt(e) {} template void operator() (void *, Domain *D) const { if (EltEnvelope *ptr = dynamic_cast*>(elt)) delete ptr; else throw lb_runtime_error("LinBox ERROR: incompatible domain and element type (freeing element impossible)"); } }; void deleteElement(const EltKey &key){ EltTable::iterator it = element_hashtable.find(key); if ( it == element_hashtable.end()){ #ifndef __LINBOX_NO_GC_EXCEPTION throw lb_runtime_error("LinBox ERROR: invalid element (freeing impossible)"); #endif } else { DeleteElementFunctor Fct(it->second); #ifdef __LINBOX_NO_GC_EXCEPTION try { #endif DomainFunction::call(it->second->getDomainKey(), Fct); #ifdef __LINBOX_NO_GC_EXCEPTION } catch(lb_runtime_error &t){std::cout<<"LinBox exception catched\n"; exit(0);} #endif element_hashtable.erase(it); } } /***************************** * API to collect all domain * *****************************/ void collectElement(){ EltTable::iterator it = element_hashtable.begin(); for (;it != element_hashtable.end(); ++it){ delete it->second; element_hashtable.erase(it); } } /*************************************** * API to delete a domain from its key * ***************************************/ void deleteDomain(const DomainKey &key) { if (key.free()){ DomainTable::iterator it= domain_hashtable.find(key); delete it->second; domain_hashtable.erase(it); } else{ key.dispose(); } } /***************************** * API to collect all domain * *****************************/ void collectDomain(){ DomainTable::iterator it= domain_hashtable.begin(); for (; it != domain_hashtable.end(); ++it){ delete it->second; domain_hashtable.erase(it); } } /***************************************** * API to delete a blackbox from its key * *****************************************/ class DeleteBlackboxFunctor{ public: template void operator() (void *, Blackbox *B) const { delete B; } }; void deleteBlackbox (const BlackboxKey &key){ BlackboxTable::iterator it = blackbox_hashtable.find(key); if ( it == blackbox_hashtable.end()){ #ifndef __LINBOX_NO_GC_EXCEPTION throw lb_runtime_error("LinBox ERROR: invalid blackbox (freeing impossible)\n"); #else std::cout<<"LinBox ERROR: invalid blackbox (freeing impossible)\n"; #endif } else { DeleteBlackboxFunctor Fct; #ifdef __LINBOX_NO_GC_EXCEPTION try { #endif BlackboxFunction::call(key, Fct); #ifdef __LINBOX_NO_GC_EXCEPTION } catch (lb_runtime_error &t) {std::cout<<"LinBox exception catched: "<second; blackbox_hashtable.erase(it); } } /******************************* * API to collect all blackbox * *******************************/ void collectBlackbox(){ DeleteBlackboxFunctor Fct; BlackboxTable::iterator it= blackbox_hashtable.begin(); for (; it != blackbox_hashtable.end(); ++it){std::cout<<"bb to delete: "<second->info()<<"\n"; #ifdef __LINBOX_NO_GC_EXCEPTION try{ #endif BlackboxFunction::call(*it, Fct); #ifdef __LINBOX_NO_GC_EXCEPTION } catch (lb_runtime_error &t) {std::cout<<"LinBox exception catched\n"; exit(0);} #endif delete it->second; blackbox_hashtable.erase(it); } } /*************************************** * API to delete a vector from its key * ***************************************/ class DeleteVectorFunctor{ public: template void operator() (void*, Vector *V) const { delete V; } }; void deleteVector (const VectorKey &key){ VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()){ #ifndef __LINBOX_NO_GC_EXCEPTION throw lb_runtime_error("LinBox ERROR: invalid vector (freeing impossible)"); #endif } else { DeleteVectorFunctor Fct; #ifdef __LINBOX_NO_GC_EXCEPTION try{ #endif VectorFunction::call(key, Fct); #ifdef __LINBOX_NO_GC_EXCEPTION } catch(lb_runtime_error &t) {exit(0);} #endif delete it->second; vector_hashtable.erase(it); } } /***************************** * API to collect all vector * *****************************/ void collectVector(){ DeleteVectorFunctor Fct; VectorTable::iterator it= vector_hashtable.begin(); for (; it != vector_hashtable.end(); ++it){ #ifdef __LINBOX_NO_GC_EXCEPTION try{ #endif VectorFunction::call(*it, Fct); #ifdef __LINBOX_NO_GC_EXCEPTION } catch (lb_runtime_error &t) {std::cout<<"LinBox exception catched\n"; exit(0);} #endif delete it->second; vector_hashtable.erase(it); } } /*********************************************** * API to collect all data allocated by LinBox * **********************************************/ void LinBoxCollect(){ collectVector(); collectBlackbox(); collectElement(); collectDomain(); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-garbage.h000066400000000000000000000051311347646240000205740ustar00rootroot00000000000000/* lb-garbage.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_garbage_H #define __LINBOX_lb_garbage_H #include #include #include #include /*************************************** * API to delete a domain from ist key * ***************************************/ void deleteElement(const EltKey &key); /***************************** * API to collect all domain * *****************************/ void collectElement(); /*************************************** * API to delete a domain from ist key * ***************************************/ void deleteDomain(const DomainKey &key); /***************************** * API to collect all domain * *****************************/ void collectDomain(); /***************************************** * API to delete a blackbox from its key * *****************************************/ void deleteBlackbox (const BlackboxKey &key); /******************************* * API to collect all blackbox * *******************************/ void collectBlackbox(); /*************************************** * API to delete a vector from its key * ***************************************/ void deleteVector (const VectorKey &key); /***************************** * API to collect all vector * *****************************/ void collectVector(); /*********************************************** * API to collect all data allocated by LinBox * **********************************************/ void LinBoxCollect(); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-interface.h000066400000000000000000000037221347646240000211500ustar00rootroot00000000000000/* lb-interface.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include #include #include #include #include #include #include #include #include //problem with givaro-extension (UTT type is not always consistent) disabled in the code #include #include #include // overload PreconditionFailed to be a real exception std::ostringstream PrecondStream; void initException(){ LinBox::PreconditionFailed::setErrorStream(PrecondStream); } /*********************************** * Initialization of LinBox driver * ***********************************/ void LinBoxInit(){ initException(); UpdateDomain(); UpdateBlackbox(); UpdateVector(); } /*************************** * Close the LinBox Driver * ***************************/ void LinBoxEnd(){ LinBoxCollect(); } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-minpoly.C000066400000000000000000000061161347646240000206320ustar00rootroot00000000000000/* lb-minpoly.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_minpoly_C #define __LINBOX_lb_minpoly_C #include "linbox/solutions/minpoly.h" #include #include #include extern BlackboxTable blackbox_hashtable; extern VectorTable vector_hashtable; /****************************** * Mininal Polynomial Functor * ******************************/ template class MinpolyFunctor{ protected: Method meth; public: MinpolyFunctor(Method m= Method()) : meth(m) {} template void operator() (Result &res, Blackbox *B) const { typedef typename Blackbox::Field::Element Element; std::vector * phi = static_cast*>(res); LinBox::minpoly(*phi, *B, meth); res = phi; } }; /************************************************************* * API for minimal polynomial computation * * minimal polynomial is returned through a given vector key * *************************************************************/ void lb_minpoly(const VectorKey &res, const BlackboxKey& key) { MinpolyFunctor<> fct; VectorTable::iterator it = vector_hashtable.find(res); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: result polynomial does not exist (minpoly computation impossible)\n"); void *ret = it->second->getPtr(); BlackboxFunction::call(ret, key, fct); } /******************************************************* * API for minimal polynomial computation * * minimal polynomial is returned through a vector key * *******************************************************/ const VectorKey& lb_minpoly(const BlackboxKey& key) { BlackboxTable::iterator it = blackbox_hashtable.find(key); if ( it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: blackbox is not defined (minpoly computation impossible)"); const VectorKey *res = & createVector(it->second->getDomainKey(), 0, "linbox_dense"); lb_minpoly(*res, key); return *res; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-minpoly.h000066400000000000000000000035031347646240000206740ustar00rootroot00000000000000/* lb-minpoly.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_minpoly_H #define __LINBOX_lb_minpoly_H #include #include /************************************************************* * API for minimal polynomial computation * * minimal polynomial is returned through a given vector key * *************************************************************/ void lb_minpoly(const VectorKey &res, const BlackboxKey& key); /******************************************************* * API for minimal polynomial computation * * minimal polynomial is returned through a vector key * *******************************************************/ const VectorKey& lb_minpoly(const BlackboxKey& key); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-polynomial.C000066400000000000000000000126651347646240000213340ustar00rootroot00000000000000/* lb-polynomial.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_polynomial_C #define __LINBOX_lb_polynomial_C #include #include #include #include #include /*********************************************** * Polynomial are handled through dense vector * ***********************************************/ // nothing to do at this stage /************************************************************* * API to write a polynomial over the standard output stream * *************************************************************/ template class PrintPoly{ public: template< class Domain, class Poly> void operator()(Domain *D, Poly *poly, std::ostream &os){ throw lb_runtime_error("LinBox ERROR: incompatible type (polynomial writing impossible)\n"); } }; template class PrintPoly { public: template< class Domain, class Poly, class Out> void operator()(Domain *D, Poly *poly, Out &os){ size_t deg=poly->size()-1; while (D->isZero((*poly)[deg])) --deg; D->write(os,(*poly)[deg])<<".x^"< 1 ; --i) { if (!D->isZero((*poly)[i])){os<<" + ";D->write(os, (*poly)[i])<<".x^"< 1) if (!D->isZero((*poly)[1])){os<<" + ";D->write(os,(*poly)[1])<<".x";} if (deg > 0) if (!D->isZero((*poly)[0])){os<<" + ";D->write(os,(*poly)[0]);} os<<"\n"; } }; template class WritePolynomialSpecFunctor{ protected: std::ostream &os; Polynomial *poly; public: WritePolynomialSpecFunctor(std::ostream &o, Polynomial *P) : os(o), poly(P){} template void operator()(void *&, Domain *D) const { PrintPoly ()(D, poly, os); } }; class WritePolynomialFunctor{ protected: std::ostream &os; const PolynomialKey &key; public: WritePolynomialFunctor(std::ostream &o, const PolynomialKey &k) : os(o), key(k) {} template void operator() (void*, Polynomial *P) const { VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid polynomial (writing impossible)"); WritePolynomialSpecFunctor Fct(os,P); DomainFunction::call(it->second->getDomainKey(), Fct); } }; void writePolynomial (const PolynomialKey &key, std::ostream &os){ WritePolynomialFunctor Fct(os, key); VectorFunction::call(key, Fct); } /********************************** * API to serialize a polynomial * **********************************/ template class ToSerialPolynomial { public: template inline void operator()(SerialPolynomial &s, Domain *D, Polynomial *poly){ throw lb_runtime_error("LinBox ERROR: incompatible type (polynomial writing impossible)\n"); } }; template class ToSerialPolynomial{ public: template inline void operator()(SerialPolynomial &s, Domain *D, Polynomial *poly){ s.type = "integer"; s.list.resize(poly->size()); typename Polynomial::const_iterator it_P= poly->begin(); std::vector::iterator it_s= s.list.begin(); for (; it_P != poly->end(); ++it_P, ++it_s) D->convert(*it_s, *it_P); } }; template class SerializePolynomialSpecFunctor{ protected: Polynomial *poly; public: SerializePolynomialSpecFunctor(Polynomial *P) : poly(P){} template void operator()(SerialPolynomial &s, Domain *D) const { ToSerialPolynomial()(s, D, poly); } }; class SerializePolynomialFunctor{ protected: const PolynomialKey &key; public: SerializePolynomialFunctor(const PolynomialKey &k) : key(k) {} template void operator() (SerialPolynomial& s, Polynomial *P) const { VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid polynomial (serializing impossible)"); SerializePolynomialSpecFunctor Fct(P); DomainFunction::call(s, it->second->getDomainKey(), Fct); } }; void SerializePolynomial (SerialPolynomial &s, const PolynomialKey &key) { SerializePolynomialFunctor Fct(key); VectorFunction::call(s, key, Fct); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-polynomial.h000066400000000000000000000037171347646240000213770ustar00rootroot00000000000000/* lb-polynomial.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_polynomial_H #define __LINBOX_lb_polynomial_H #include /*********************************************** * Polynomial are handled through dense vector * ***********************************************/ typedef VectorKey PolynomialKey; // nothing to do at this stage (no creation available) /************************************************************* * API to write a polynomial over the standard output stream * *************************************************************/ void writePolynomial (const PolynomialKey &key, std::ostream &os); /********************************** * API to serialize a polynomial * **********************************/ struct SerialPolynomial{ const char *type; std::vector list; }; void SerializePolynomial (SerialPolynomial &s, const PolynomialKey &key); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-rank.C000066400000000000000000000044201347646240000200720ustar00rootroot00000000000000/* lb-rank.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_rank_C #define __LINBOX_lb_rank_C #include "linbox/solutions/rank.h" #include #include extern BlackboxTable blackbox_hashtable; /**************** * Rank Functor * ****************/ template class RankFunctor{ private: Method meth; public: RankFunctor(Method m = Method()) : meth(m) {} template void operator() (unsigned long &res, Blackbox *B) const { LinBox::rank(res, *B, meth); } }; /********************************************************** * API for rank computation * * rank is returned through a given unsigned long integer * **********************************************************/ void lb_rank(unsigned long &res, const BlackboxKey& key){ RankFunctor<> fct; BlackboxFunction::call(res, key, fct); } /***************************************************** * API for rank computation * * rank is returned through an unsigned long integer * *****************************************************/ unsigned long lb_rank(const BlackboxKey& key){ unsigned long r; lb_rank(r, key); return r; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-rank.h000066400000000000000000000037051347646240000201440ustar00rootroot00000000000000/* lb-rank.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_rank_H #define __LINBOX_lb_rank_H #include /********************************************************** * API for rank computation * * rank is returned through a given unsigned long integer * **********************************************************/ void lb_rank(unsigned long &res, const BlackboxKey& key); /***************************************************** * API for rank computation * * rank is returned through an unsigned long integer * *****************************************************/ unsigned long lb_rank(const BlackboxKey& key); /****************************************************** * API to print available method for rank computation * ******************************************************/ const char* lb_rank_methods(); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-solve.C000066400000000000000000000170721347646240000202760ustar00rootroot00000000000000/* lb-solve.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_solve_C #define __LINBOX_lb_solve_C #include "linbox/solutions/solve.h" #include #include #include #include #include #include #include extern BlackboxTable blackbox_hashtable; extern VectorTable vector_hashtable; extern const char* current_rational_field; /**************************************************************** * Functor interface to launch LinBox solving * * deal with different API and avoid different type compilation * ****************************************************************/ // generic version to handle different type compilation template class LaunchSolveFunctor { public: template inline void operator()(Result &s, Blackbox *B, Vector *v, const Method &m) const { throw lb_runtime_error("LinBox ERROR: incompatible domain in solving");// throw an exception for incompatible data type } }; // specialization to launch LinBox solving using standard API template class LaunchSolveFunctor{ public: template inline void operator()(Result &s, Blackbox *B, Vector *v, const Method &m) const { LinBox::solve(s, *B, *v, m); } }; // specialization to launch LinBox solving using integer solving API (output is a GMPRational) template class LaunchSolveFunctor{ public: template inline void operator()(Result &s, Blackbox *B, Vector *v, const Method &m) const { //LinBox::solve(s, *B, *v, m); //not yet handled throw lb_runtime_error("LinBox ERROR: integer system solving with same vector type is not yet handled"); } }; // specialization to launch LinBox solving using integer solving API (output is a GMPRational) template class LaunchSolveFunctor{ public: template inline void operator()(Result &s, Blackbox *B, Vector *v, const Method &m) const { LinBox::solve(s, *B, *v, m); } }; /********************************************************************** * Partial Solving linear system Functor according to a blackbox type * **********************************************************************/ template class SolvePartialFunctor{ protected: Blackbox *_BB; const Method &meth; public: SolvePartialFunctor (Blackbox *B, const Method &m) : _BB(B), meth(m) {} template void operator()(const VectorKey& Vkey, Vector *res) const { VectorTable::iterator it = vector_hashtable.find(Vkey); if (it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: right hand side vector does not exist (solving impossible)\n"); SolvePartialFunctor fct(_BB, meth); VectorFunction::call(*res, Vkey, fct); } template void operator() (Result &res, Vector *v) const { typedef typename Blackbox::Field::Element BElement; typedef typename Vector::value_type VElement; typedef typename Result::value_type RElement; typedef typename LinBox::FieldTraits::categoryTag categoryTag; LaunchSolveFunctor()(res, _BB, v, meth); } }; /********************************************************** * Modify the vector Result if it is integer computation * * and vector result is not define over a rational domain * **********************************************************/ template class MutateVector{ public: void operator()(VectorAbstract *v){} }; template<> class MutateVector{ public: void operator()(VectorAbstract *v){ const DomainKey *k= &createDomain(0, current_rational_field); v->rebind(*k); deleteDomain(*k); } }; class MutateVectorFunctor{ public: template void operator()(VectorAbstract *&v, Domain *D) const { MutateVector::categoryTag>()(v); } }; void modifyResultVector(const VectorKey &key){ VectorTable::iterator it = vector_hashtable.find(key); if (it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: result vector does not exist (solving impossible)\n"); const DomainKey *Dkey = &(it->second->getDomainKey()); MutateVectorFunctor Fct; DomainFunction::call(it->second, *Dkey, Fct); } /***************************************** * Generic Solving linear system Functor * *****************************************/ template class SolveFunctor{ protected: const VectorKey &_Vkey; Method meth; public: SolveFunctor(const VectorKey &Vkey, Method m =Method()) : _Vkey(Vkey), meth(m) {} template inline void operator()(Result &res, Blackbox *B) const { SolvePartialFunctor fct(B, meth); VectorFunction::call(res, _Vkey, fct); } }; /*********************************************************** * API for solving linear systems * * vector solution is returned through a given vector key * ***********************************************************/ void lb_solve(const VectorKey &res, const BlackboxKey &Bkey, const VectorKey &Vkey) { SolveFunctor<> fct(res); modifyResultVector(res); BlackboxFunction::call(Vkey, Bkey, fct); } /***************************************************** * API for solving linear systems * * vector solution is returned through a vector key * *****************************************************/ const VectorKey& lb_solve(const BlackboxKey &Bkey, const VectorKey &Vkey) { BlackboxTable::iterator it = blackbox_hashtable.find(Bkey); if (it == blackbox_hashtable.end()) throw lb_runtime_error("LinBox ERROR: blackbox does not exist (solving impossible)\n"); const DomainKey *Dkey = &it->second->getDomainKey(); std::pair dim; dim = getBlackboxDimension(Bkey); size_t coldim = dim.second; //const VectorKey *res = ©Vector(Vkey); const VectorKey *res = &createVector(*Dkey, coldim); lb_solve(*res, Bkey, Vkey); return *res; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-solve.h000066400000000000000000000035341347646240000203410ustar00rootroot00000000000000/* lb-solve.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_solve_H #define __LINBOX_lb_solve_H #include #include /*********************************************************** * API for solving linear systems * * vector solution is returned through a given vector key * ***********************************************************/ void lb_solve(const VectorKey &res, const BlackboxKey &Bkey, const VectorKey &Vkey); /***************************************************** * API for solving linear systems * * vector solution is returned through a vector key * *****************************************************/ const VectorKey& lb_solve(const BlackboxKey &Bkey, const VectorKey &Vkey); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-utilities.h000066400000000000000000000071221347646240000212210ustar00rootroot00000000000000/* lb-utilities.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_utilities_H #define __LINBOX_lb_utilities_H #include "linbox/util/error.h" #include "linbox/util/debug.h" #include #include /************************************** * definition of LinBox's exceptions * **************************************/ typedef LinBox::LinboxError lb_runtime_error; /************************************************ * definition of a functor to compare two char* * ************************************************/ struct ltstr { bool operator()(const char* s1, const char* s2) const {return strcmp(s1, s2) < 0;} }; /***************************************** * definition of LinBox's object visitor * *****************************************/ class LinBoxBaseVisitor { public: virtual ~LinBoxBaseVisitor() {} }; template class LinBoxVisitor : public virtual LinBoxBaseVisitor { public: virtual void visit(const T&) = 0; }; class LinBoxBaseVisitable { public: virtual ~LinBoxBaseVisitable(){} virtual void Accept(LinBoxBaseVisitor&) = 0; protected: template static void AcceptImpl(const T& visited, LinBoxBaseVisitor &guest){ if (LinBoxVisitor* ptr = dynamic_cast*> (&guest)) ptr->visit(visited); else throw lb_runtime_error("LinBox ERROR: no visitor found (check that all the type are defined in their corresponding type list)\n "); } }; #define LINBOX_VISITABLE() \ virtual void Accept(LinBoxBaseVisitor &guest) \ { AcceptImpl(*this, guest);} /******************************************* * definition of LinBox's object type list * *******************************************/ template struct LinBoxTypelist { typedef T Head; typedef U Tail; }; // Dumb type for ending a type list struct LinBoxDumbType{}; /************************************************* * function to append LinBox's object type list * *************************************************/ namespace LinBoxTL{ template struct Append; template <> struct Append { typedef LinBoxDumbType Result; }; template struct Append { typedef LinBoxTypelist Result; }; template struct Append > { typedef LinBoxTypelist Result; }; template struct Append , T > { typedef LinBoxTypelist::Result> Result; }; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-abstract.h000066400000000000000000000034241347646240000223120ustar00rootroot00000000000000/* lb-vector-abstract.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_abstract_H #define __LINBOX_lb_vector_abstract_H #include #include /******************************* * Abstract object for Vectors * *******************************/ class VectorAbstract : public LinBoxBaseVisitable { public: virtual ~VectorAbstract(){} virtual VectorAbstract* clone() const =0; virtual void* getPtr() const =0; virtual const DomainKey& getDomainKey() const =0; virtual const char* info() const =0; virtual void rebind(const DomainKey&) =0; LINBOX_VISITABLE(); }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-collection.h000066400000000000000000000033601347646240000226410ustar00rootroot00000000000000/* lb-vector-collection.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_collection_H #define __LINBOX_lb_vector_collection_H #include #include /************************* * Collection of Vectors * *************************/ // definition of a key typedef size_t VectorKey; // comparison functor on key struct VectorKeyLessThan{ bool operator()(const VectorKey& k1, const VectorKey &k2) { return (k1 < k2);}}; // definition of a hash table type typedef std::map VectorTable; // definition of a serial vector struct SerialVector { const char* type; std::vector list; }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-data.h000066400000000000000000000205211347646240000214150ustar00rootroot00000000000000/* lb-vector-data.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_data_H #define __LINBOX_lb_vector_data_H #include #include "linbox/field/hom.h" #include #include #include #include #include #include extern VectorTable vector_hashtable; /*************************************************** * Functor to determine domain in Abstract Vectors * ***************************************************/ template class Vector, class Functor, template class Alloc=std::allocator> class VectorSpecFunctor{ const Functor &fct; void *ptr; public: VectorSpecFunctor(const Functor &f, void *p) : fct(f), ptr(p) {} template void operator() (Result& res, Domain *d) const { fct(res, static_cast >*> (ptr)); } }; /***************************************** * Factory to construct Abstract Vectors * *****************************************/ class Vector_Factory { public: typedef VectorAbstract* (*createVector_1_CallBack)(const DomainKey &, size_t, const char*); typedef VectorAbstract* (*createVector_2_CallBack)(const DomainKey &, std::istream&, const char*); typedef std::map , ltstr> CallBackMap; bool add(const char *name, std::pair createD){ return _callback.insert(CallBackMap::value_type(name, createD)).second; } bool remove(const char *name){ return _callback.erase(name) == 1; } VectorAbstract* create(const char *name, const DomainKey &k, size_t n){ CallBackMap::iterator it = _callback.find(name); if (it != _callback.end()){ return it->second.first(k, n, name); } else { std::string mes("LinBox ERROR: you are trying to construct a non defined vector << "); mes+= std::string(name); mes+= std::string(" >>\n"); throw lb_runtime_error(mes.c_str());// throw an exception } } VectorAbstract* create(const char *name, const DomainKey &k, std::istream &is){ CallBackMap::iterator it = _callback.find(name); if (it != _callback.end()){ return it->second.second(k, is, name); } else { std::string mes("LinBox ERROR: you are trying to construct a non defined vector << "); mes+= std::string(name); mes+= std::string(" >>\n"); throw lb_runtime_error(mes.c_str());// throw an exception } } size_t size() { return _callback.size(); } private: CallBackMap _callback; }; /*************************** * Functor to copy Vectors * ***************************/ class CopyVectorFunctor { public: template void operator()(void *&res, Vector *V) const { res= new Vector(*V); } }; /****************************** * Functors to rebind Vectors * ******************************/ template class Vector, template class Alloc=std::allocator> class RebindVectorFunctor{ void *&ptr; public: RebindVectorFunctor(void *&p) : ptr(p) {} template void operator()(const DomainKey &key, Domain *D) const { RebindVectorFunctor fct(ptr); DomainFunction::call(*D, key, fct); } template void operator()(DomainSource &res, DomainTarget *D) const { Vector > *v_source= static_cast > * > (ptr); Vector > *v_target= new Vector >(v_source->size()); LinBox::Hom hom(res, *D); for (size_t i=0;isize();++i) hom.image((*v_target)[i], (*v_source)[i]); delete v_source; ptr = v_target; } }; /******************************************************** * Vector Envelope to be compliant with Vector Abstract * ********************************************************/ template > class Vector> class VectorEnvelope : public VectorAbstract { protected: void *ptr; DomainKey key; const char* _info; public: VectorEnvelope(void* p, const DomainKey &k, const char* Info) : ptr(p), key(k, true), _info(Info) {} ~VectorEnvelope() {} LINBOX_VISITABLE(); template void launch (Result &res, const Functor &fct) const { VectorSpecFunctor vs(fct, ptr); DomainFunction::call(res, key, vs); } VectorAbstract* clone() const { CopyVectorFunctor Fct; void *v; launch(v, Fct); return new VectorEnvelope(v, key, _info); } void * getPtr() const { return ptr;} const DomainKey& getDomainKey() const {return key;} const char* info() const { std::string msg= "[ LinBox Vector (storage = "; msg+= std::string(_info); msg+= std::string(", domain = [LinBox Domain (type = "); msg+= std::string(key.Type()); msg+= std::string(", charact = "); msg+= std::string(key.Characteristic()); msg+= std::string(")] )]\n"); return msg.c_str(); } void rebind(const DomainKey &k) { RebindVectorFunctor Fct(ptr); DomainFunction::call(k, key, Fct); key = k; key.set_autogc(); } }; /********************************* * Functors to construct Vectors * *********************************/ template class Vector, template class Alloc=std::allocator> class CreateVectorFunctor{ size_t &_dim; public: CreateVectorFunctor( size_t &n) : _dim(n) {} template void operator()(void *&res, Domain *D) const { res = new Vector >(_dim, D->zero); } }; template class Vector, template class Alloc=std::allocator> class CreateVectorFromStreamFunctor{ std::istream ∈ public: CreateVectorFromStreamFunctor(std::istream &i) : in(i) {} template void operator()(void *&res, Domain *D) const { size_t n; LinBox::integer tmp; in>>n; Vector > * v = new Vector >(n); typename Vector >::iterator it = v->begin(); for (; it != v->end(); ++it){ in>>tmp; D->init(*it, tmp); } res =v; } }; /****************************************************** * Vector construction function used in the Factory * ******************************************************/ template > class Vector> VectorAbstract* constructVector_from_size(const DomainKey &k, size_t n, const char* info){ CreateVectorFunctor fct(n); void *bb; DomainFunction::call(bb, k, fct); VectorEnvelope *bbe = new VectorEnvelope (bb, k, info); return bbe; } template > class Vector> VectorAbstract* constructVector_from_stream (const DomainKey &k, std::istream &in, const char *info){ CreateVectorFromStreamFunctor fct(in); void *v; DomainFunction::call(v, k, fct); VectorEnvelope *ve = new VectorEnvelope (v, k, info); return ve; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-function.h000066400000000000000000000052051347646240000223330ustar00rootroot00000000000000/* lb-vector-function.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_function_H #define __LINBOX_lb_vector_function_H #include #include /********************************************************* * API to launch a generic function over a linbox vector * *********************************************************/ class VectorFunction { public: // call a functor over a vector from the hashtable, result is given through 1st parameter template static void call(Result &res, const std::pair &vector, const Functor &functor){ ApplyVectorFunctor Ap(res, functor); (vector.second)->Accept(Ap); } // call a functor over a vector from the hashtable, no result template static void call(const std::pair &v, const Functor &f){ void *dumbresult; call(dumbresult,v,f); } // call a functor over a vector from its key, result is given through 1st parameter template static void call(Result &res, const VectorKey &key, const Functor &functor){ VectorTable::const_iterator it = vector_hashtable.find(key); if (it != vector_hashtable.end()) VectorFunction::call(res, *it, functor); else throw lb_runtime_error("LinBox ERROR: use of a non allocated vector\n");// throw an exception } // call a functor over a vector from its key, no result template static void call(const VectorKey &k, const Functor &f) { void *dumbresult; call(dumbresult,k,f); } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-functor.h000066400000000000000000000063371347646240000221750ustar00rootroot00000000000000/* lb-vector-functor.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. du -h tes * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_functor_H #define __LINBOX_lb_vector_functor_H #include #include #include /************************************************************************* * Base class for apply functor over a vector (used for code generation) * *************************************************************************/ template class ApplyVectorFunctorBase { protected: Result *res; const Functor *fct; public: ApplyVectorFunctorBase(){} template void apply(const Vector &b){ b.launch(*res, *fct); } }; /*************************************** * Macro for automatic code generation * ***************************************/ #define LB_VECTOR_VISIT(B) \ void visit(const B &d){this->apply(d);} /********************************************************************************** * Generate automatically the visitors for all Vector in the vector type list * **********************************************************************************/ template class LinBoxVectorVisitor; template class LinBoxVectorVisitor{}; template class LinBoxVectorVisitor, Functor, Result> : public LinBoxVisitor , public ApplyVectorFunctorBase { public: LB_VECTOR_VISIT(T); }; template class LinBoxVectorVisitor, Functor, Result > : public LinBoxVisitor , public LinBoxVectorVisitor { public: LB_VECTOR_VISIT(Head); }; /**************************************************** * functionalities to apply functor over a vector * ****************************************************/ template class ApplyVectorFunctor : public LinBoxVectorVisitor { public: ApplyVectorFunctor(Result &r, const Functor &f) { this->res = &r; this->fct = &f; } }; #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector-type.h000066400000000000000000000040241347646240000214650ustar00rootroot00000000000000/* lb-vector-type.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_type_H #define __LINBOX_lb_vector_type_H /************************************** * Define the list of all Vector Type * **************************************/ // (NEED TO USE ENVELOPE TO DEFINE A CONCRETE TYPE) typedef LinBoxTypelist < VectorEnvelope< std::vector > , LinBoxDumbType> VL1; // define the vector typelist typedef VL1 VectorList; /******************************************* * Update the Factory with all vector type * *******************************************/ extern Vector_Factory linbox_vector; void UpdateVector() { linbox_vector.add("linbox_dense", Vector_Factory::CallBackMap::value_type::second_type( constructVector_from_size, constructVector_from_stream )); } /*************************** * Default type for vector * ***************************/ // definition of the default type vector #define default_vector "linbox_dense" #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector.C000066400000000000000000000242261347646240000204470ustar00rootroot00000000000000/* lb-vector.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_C #define __LINBOX_lb_vector_C #include "linbox/linbox-config.h" #include #include #include /*\************************** * Allocate global variable * ****************************/ // global hash table for allocated vector VectorTable vector_hashtable; // global variable for the factory Vector_Factory linbox_vector; // global variable for current vector type const char* current_vector = default_vector; /********************************************************** * function to add an abstract vector in linbox hashtable * **********************************************************/ const VectorKey& addVector(VectorAbstract * v){ std::pair status; status = vector_hashtable.insert(std::pair (VectorKey(v), v)); if (status.second) return status.first->first; else throw lb_runtime_error("LinBox ERROR: vector creation failed \n");// throw an exception } /********************************************************* * API to contruct a n dimensional vector over a domain * *********************************************************/ const VectorKey& createVector(const DomainKey &k, size_t n, const char *name){ const char *type=name; if (type == NULL) type= current_vector; VectorAbstract *v = linbox_vector.create(type, k, n); return addVector(v); } /****************************************** * API to contruct a vector from a stream * ******************************************/ const VectorKey& createVector(const DomainKey &k, std::istream &in, const char *name){ const char *type=name; if (type == NULL) type= current_vector; VectorAbstract *v = linbox_vector.create(type, k, in); return addVector(v); } /********************************** * API to copy an existing vector * **********************************/ const VectorKey& copyVector(const VectorKey &k){ VectorTable::iterator it = vector_hashtable.find(k); if (it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: vector does not exist (copying impossible)\n"); VectorAbstract *v = it->second->clone(); return addVector(v); } /****************************************** * API to get the dimensions of a vector * ******************************************/ class VectorDimensionFunctor{ public: template void operator()(size_t &dim, Vector *V) const{ dim = V->size(); } }; size_t getVectorDimension(const VectorKey &key){ size_t dim; VectorDimensionFunctor Fct; VectorFunction::call(dim, key, Fct); return dim; } /***************************************** * API to set a vector with random value * *****************************************/ template class RandomVector{ public: template void operator()(Vector *V, Domain *D) { throw lb_runtime_error("LinBox ERROR: incompatible type (vector writing impossible)\n"); } }; template class RandomVector{ public: template void operator()(Vector *V, Domain *D) { typename Domain::RandIter G(*D); for (size_t i=0; i< V->size();++i) G.random((*V)[i]); } }; template class VectorAtRandomFunctorSpec{ protected: Vector *vect; public: VectorAtRandomFunctorSpec(Vector *V) : vect(V) {} template void operator()(void *, Domain *D) const { RandomVector()(vect, D); } }; class VectorAtRandomFunctor{ protected: const VectorKey key; public: VectorAtRandomFunctor(const VectorKey &k) : key(k) {} template void operator()(void*, Vector *V) const { VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid vector (set random value impossible)"); VectorAtRandomFunctorSpec Fct(V); DomainFunction::call(it->second->getDomainKey(), Fct); } }; void setVectorAtRandom(const VectorKey &k){ VectorAtRandomFunctor Fct(k); VectorFunction::call(k, Fct); } /******************************************** * API to rebind a vector over a new domain * ********************************************/ void rebindVector(const VectorKey &Vkey, const DomainKey &Dkey){ VectorTable::iterator it = vector_hashtable.find(Vkey); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid vector (rebinding to another domain impossible)"); it->second->rebind(Dkey); } /***************************************** * API to write a vector over an ostream * *****************************************/ template class PrintVector{ public: template< class Domain, class Poly, class Out> void operator()(Domain *D, Poly *poly, Out &os){ throw lb_runtime_error("LinBox ERROR: incompatible type (vector writing impossible)\n"); } }; template class PrintVector { public: template< class Domain, class Vector, class Out> void operator()(Domain *D, Vector *vect, Out &os){ os<<" [ "; for (size_t i=0; isize()-1; ++i){ D->write(os, (*vect)[i])<<" , "; } D->write(os, (*vect)[vect->size()-1]); os<<" ]\n"; } }; template class WriteVectorSpecFunctor{ protected: std::ostream &os; Vector *vect; public: WriteVectorSpecFunctor(std::ostream &o, Vector *V) : os(o), vect(V){} template void operator()(void *&, Domain *D) const { PrintVector ()(D, vect, os); } }; class WriteVectorFunctor{ protected: std::ostream &os; const VectorKey &key; public: WriteVectorFunctor(std::ostream &o, const VectorKey &k) : os(o), key(k) {} template void operator() (void*, Vector *V) const { VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid vector (writing impossible)"); WriteVectorSpecFunctor Fct(os,V); DomainFunction::call(it->second->getDomainKey(), Fct); } }; void writeVector (const VectorKey &key, std::ostream &os){ WriteVectorFunctor Fct(os, key); VectorFunction::call(key, Fct); } /******************************************* * API to modify the current vector type * *******************************************/ void setVector(const char* t){ current_vector= t; } /********************************* * API to write info on a vector * *********************************/ void writeVectorInfo(const VectorKey &key, std::ostream& os){ VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid vector (writing vector info impossible)"); os<second->info(); } /********************************** * API to serialize a vector * **********************************/ template class ToSerialVector { public: template inline void operator()(SerialVector &s, Domain *D, Vector *poly){ throw lb_runtime_error("LinBox ERROR: incompatible type (vector writing impossible)\n"); } }; template class ToSerialVector{ public: template inline void operator()(SerialVector &s, Domain *D, Vector *poly){ s.type = "integer"; s.list.resize(poly->size()); typename Vector::const_iterator it_P= poly->begin(); std::vector::iterator it_s= s.list.begin(); for (; it_P != poly->end(); ++it_P, ++it_s) D->convert(*it_s, *it_P); } }; template class ToSerialVector{ public: template inline void operator()(SerialVector &s, Domain *D, Vector *poly){ s.type = "rational"; s.list.resize(2*poly->size()); typename Vector::const_iterator it_P= poly->begin(); std::vector::iterator it_s= s.list.begin(); for (; it_P != poly->end(); ++it_P, ++it_s){ D->get_num(*it_s, *it_P); ++it_s; D->get_den(*it_s, *it_P); } } }; template class SerializeVectorSpecFunctor{ protected: Vector *poly; public: SerializeVectorSpecFunctor(Vector *P) : poly(P){} template void operator()(SerialVector &s, Domain *D) const { ToSerialVector::categoryTag>()(s, D, poly); } }; class SerializeVectorFunctor{ protected: const VectorKey &key; public: SerializeVectorFunctor(const VectorKey &k) : key(k) {} template void operator() (SerialVector& s, Vector *P) const { VectorTable::iterator it = vector_hashtable.find(key); if ( it == vector_hashtable.end()) throw lb_runtime_error("LinBox ERROR: invalid vector (serializing impossible)"); SerializeVectorSpecFunctor Fct(P); DomainFunction::call(s, it->second->getDomainKey(), Fct); } }; void SerializeVector (SerialVector &s, const VectorKey &key) { SerializeVectorFunctor Fct(key); VectorFunction::call(s, key, Fct); } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/driver/lb-vector.h000066400000000000000000000062711347646240000205140ustar00rootroot00000000000000/* lb-vector.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_vector_H #define __LINBOX_lb_vector_H #include #include /************************* * Initializer of Vector * *************************/ void UpdateVector(); /********************************************************* * API to contruct a n dimensional vector over a domain * *********************************************************/ const VectorKey& createVector(const DomainKey &k, size_t n, const char *name=NULL); /****************************************** * API to contruct a vector from a stream * ******************************************/ const VectorKey& createVector(const DomainKey &k, std::istream &in, const char *name=NULL); /********************************** * API to copy an existing vector * **********************************/ const VectorKey& copyVector(const VectorKey &k); /****************************************** * API to get the dimensions of a vector * ******************************************/ size_t getVectorDimension(const VectorKey &key); /***************************************** * API to set a vector with random value * *****************************************/ void setVectorAtRandom(const VectorKey &k); /******************************************** * API to rebind a vector over a new domain * ********************************************/ void rebindVector(const VectorKey &Vkey, const DomainKey &Dkey); /**************************************** * API to write a vector over an stream * ****************************************/ void writeVector (const VectorKey &key, std::ostream &os); /******************************************* * API to modify the current vector type * *******************************************/ void setVector(const char* t); /********************************* * API to write info on a vector * *********************************/ void writeVectorInfo(const VectorKey &k, std::ostream& os); /****************************** * API to serialize a vector * ******************************/ void SerializeVector (SerialVector &s, const VectorKey &key); #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/kaapi/000077500000000000000000000000001347646240000162325ustar00rootroot00000000000000linbox-1.6.3/interfaces/kaapi/Makefile.am000066400000000000000000000016561347646240000202760ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== pkgincludesubdir=$(pkgincludedir)/kaapi pkgincludesub_HEADERS = \ communicate.h linbox-1.6.3/interfaces/kaapi/communicate.h000066400000000000000000000050051347646240000207070ustar00rootroot00000000000000/* Copyright (C) LinBox * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_kaapi_communicate_H #define __LINBOX_kaapi_communicate_H #include #include "linbox/integer.h" #include "linbox/ring/modular-double.h" #include "linbox/matrix/sparse-matrix.h" /* * gmp integers */ a1::OStream& operator<<( a1::OStream& out, const Integer& x ) { std::ostringstream oss; oss << x; return out << oss.str(); } a1::IStream& operator>>( a1::IStream& in, Integer& x ) { std::string is; in >> is; std::istringstream iss(is); iss >> x; return in; } /* * modular double * we first inherit from them to access protected memebers */ /// limited doc so far. namespace kaapi { template struct Modular; /* * double specialization */ template <> struct Givaro::Modular : Givaro::Modular { const double& get_modulus() const { return this->modulus; } const unsigned long& get_lmodulus() const { return this->lmodulus; } double& get_modulus() { return this->modulus; } unsigned long& get_lmodulus() { return this->lmodulus; } }; } //namespace a1::OStream& operator<<( a1::OStream& out, const Givaro::Modular& m) { const kaapi::Modular* m_tmp = static_cast*>(&m); return out << m_tmp->get_modulus() << m_tmp->get_lmodulus() ; } a1::IStream& operator>>( a1::IStream& in, Givaro::Modular& m) { kaapi::Modular* m_tmp = static_cast*>(&m); return in >> m_tmp->get_modulus() >> m_tmp->get_lmodulus() ; } #endif //__LINBOX_kaapi_communicate_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple-old/000077500000000000000000000000001347646240000170175ustar00rootroot00000000000000linbox-1.6.3/interfaces/maple-old/Makefile.am000066400000000000000000000026441347646240000210610ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== INCLUDES=-I$(top_srcdir) AM_CPPFLAGS= $(NTL_CFLAGS) $(ATLAS_CFLAGS) $(MAPLE_CFLAGS) EXTRA_DIST = lbmaple.C lbmaple.mpl.head lbmaple.mpl.tail Makefile.in.1 Makefile.in.2 demonstration.mws lib_LTLIBRARIES=liblbmaple.la liblbmapleffpack.la liblbmaple_la_SOURCES=lbmaple.C liblbmaple_la_LDFLAGS=$(top_builddir)/linbox/liblinbox.la $(NTL_LIBS) $(MAPLE_LIBS) liblbmapleffpack_la_SOURCES=lbmaple-ffpack.C liblbmapleffpack_la_LDFLAGS=$(top_builddir)/linbox/liblinbox.la $(ATLAS_LIBS) $(NTL_LIBS) $(MAPLE_LIBS) install-data-local: $(INSTALL_DATA) lbmaple.mpl $(libdir)/lbmaple.mpl linbox-1.6.3/interfaces/maple-old/Makefile.in.1000066400000000000000000000134371347646240000212330ustar00rootroot00000000000000# Makefile.in generated automatically by automake 1.5 from Makefile.am. # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ AMTAR = @AMTAR@ AS = @AS@ AWK = @AWK@ CC = @CC@ CXX = @CXX@ CXXFLAGS = @CXXFLAGS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCPLUSPLUS_SUBDIRS = @DOCPLUSPLUS_SUBDIRS@ ECHO = @ECHO@ EXEEXT = @EXEEXT@ GIVARO_CFLAGS = @GIVARO_CFLAGS@ GIVARO_LIBS = @GIVARO_LIBS@ GMP_CFLAGS = @GMP_CFLAGS@ GMP_LIBS = @GMP_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LIBTOOL = @LIBTOOL@ LIDIA_CFLAGS = @LIDIA_CFLAGS@ LIDIA_LIBS = @LIDIA_LIBS@ LN_S = @LN_S@ MAINT = @MAINT@ MAPLE_BUILD_LOC = @MAPLE_BUILD_LOC@ MAPLE_INCLUDES = @MAPLE_INCLUDES@ MAPLE_LIBS = @MAPLE_LIBS@ NTL_CFLAGS = @NTL_CFLAGS@ NTL_LIBS = @NTL_LIBS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ SACLIB_CFLAGS = @SACLIB_CFLAGS@ SACLIB_LIBS = @SACLIB_LIBS@ STRIP = @STRIP@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ INCLUDES = -I$(top_srcdir) AM_CPPFLAGS = $(GMP_CFLAGS) $(NTL_CFLAGS) @MAPLE_INCLUDES@ LDADD = $(top_builddir)/linbox/liblinbox.la $(GMP_LIBS) $(NTL_LIBS) EXTRA_DIST = lbmaple.C lbmaple.mpl.head lbmaple.mpl.tail Makefile.in.1 Makefile.in.2 \ demonstration.mws subdir = interfaces/maple mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/linbox-config.h CONFIG_CLEAN_FILES = DIST_SOURCES = DIST_COMMON = Makefile.am Makefile.in all: all-am .SUFFIXES: mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu interfaces/maple/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && \ CONFIG_HEADERS= CONFIG_LINKS= \ CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status uninstall-info-am: tags: TAGS TAGS: DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @for file in $(DISTFILES); do \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ $(mkinstalldirs) "$(distdir)/$$dir"; \ fi; \ if test -d $$d/$$file; then \ cp -pR $$d/$$file $(distdir) \ || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool uninstall-am: uninstall-info-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: linbox-1.6.3/interfaces/maple-old/Makefile.in.2000066400000000000000000000255461347646240000212400ustar00rootroot00000000000000# Makefile.in generated by automake 1.6.3 from Makefile.am. # @configure_input@ # Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : host_alias = @host_alias@ host_triplet = @host@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ PATH_SEPARATOR = @PATH_SEPARATOR@ AMTAR = @AMTAR@ AS = @AS@ AWK = @AWK@ CC = @CC@ CXX = @CXX@ CXXFLAGS = @CXXFLAGS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOCPLUSPLUS_SUBDIRS = @DOCPLUSPLUS_SUBDIRS@ ECHO = @ECHO@ GIVARO_CFLAGS = @GIVARO_CFLAGS@ GIVARO_LIBS = @GIVARO_LIBS@ GMP_CFLAGS = @GMP_CFLAGS@ GMP_LIBS = @GMP_LIBS@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LB_LOC = @LB_LOC@ LIBTOOL = @LIBTOOL@ LIDIA_CFLAGS = @LIDIA_CFLAGS@ LIDIA_LIBS = @LIDIA_LIBS@ LN_S = @LN_S@ MAINT = @MAINT@ MAPLE_INCLUDES = @MAPLE_INCLUDES@ MAPLE_LIBS = @MAPLE_LIBS@ NTL_CFLAGS = @NTL_CFLAGS@ NTL_LIBS = @NTL_LIBS@ OBJDUMP = @OBJDUMP@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ SACLIB_CFLAGS = @SACLIB_CFLAGS@ SACLIB_LIBS = @SACLIB_LIBS@ STRIP = @STRIP@ TEX_SUBDIRS = @TEX_SUBDIRS@ VERSION = @VERSION@ am__include = @am__include@ am__quote = @am__quote@ install_sh = @install_sh@ INCLUDES = -I$(top_srcdir) AM_CPPFLAGS = $(GMP_CFLAGS) $(NTL_CFLAGS) @MAPLE_INCLUDES@ LDADD = $(top_builddir)/linbox/liblinbox.la $(GMP_LIBS) $(NTL_LIBS) EXTRA_DIST = lbmaple.C lbmaple.mpl.head lbmaple.mpl.tail Makefile.in.1 Makefile.in.2 \ demonstration.mws mapledir = $(libdir) maple_LTLIBRARIES = liblbmaple.la liblbmaple_la_SOURCES = lbmaple.C liblbmaple_la_INCLUDES = @LB_LOC@/linbox/blackbox/triplesbb.h liblbmaple_la_LDFLAGS = @MAPLE_LIBS@ -module subdir = interfaces/maple mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/linbox-config.h CONFIG_CLEAN_FILES = LTLIBRARIES = $(maple_LTLIBRARIES) liblbmaple_la_LIBADD = am_liblbmaple_la_OBJECTS = lbmaple.lo liblbmaple_la_OBJECTS = $(am_liblbmaple_la_OBJECTS) DEFS = @DEFS@ DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/lbmaple.Plo CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(LIBTOOL) --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ DIST_SOURCES = $(liblbmaple_la_SOURCES) DIST_COMMON = Makefile.am Makefile.in SOURCES = $(liblbmaple_la_SOURCES) all: all-am .SUFFIXES: .SUFFIXES: .C .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && \ $(AUTOMAKE) --gnu interfaces/maple/Makefile Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe) mapleLTLIBRARIES_INSTALL = $(INSTALL) install-mapleLTLIBRARIES: $(maple_LTLIBRARIES) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(mapledir) @list='$(maple_LTLIBRARIES)'; for p in $$list; do \ if test -f $$p; then \ f="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=install $(mapleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(mapledir)/$$f"; \ $(LIBTOOL) --mode=install $(mapleLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(mapledir)/$$f; \ else :; fi; \ done uninstall-mapleLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(maple_LTLIBRARIES)'; for p in $$list; do \ p="`echo $$p | sed -e 's|^.*/||'`"; \ echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(mapledir)/$$p"; \ $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(mapledir)/$$p; \ done clean-mapleLTLIBRARIES: -test -z "$(maple_LTLIBRARIES)" || rm -f $(maple_LTLIBRARIES) @list='$(maple_LTLIBRARIES)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test -z "$dir" && dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liblbmaple.la: $(liblbmaple_la_OBJECTS) $(liblbmaple_la_DEPENDENCIES) $(CXXLINK) -rpath $(mapledir) $(liblbmaple_la_LDFLAGS) $(liblbmaple_la_OBJECTS) $(liblbmaple_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbmaple.Plo@am__quote@ distclean-depend: -rm -rf ./$(DEPDIR) .C.o: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< .C.obj: @AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(CXXCOMPILE) -c -o $@ `cygpath -w $<` .C.lo: @AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@ @AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ $(LTCXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$< CXXDEPMODE = @CXXDEPMODE@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ETAGS = etags ETAGSFLAGS = tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$tags$$unique" \ || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) top_distdir = ../.. distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @list='$(DISTFILES)'; for file in $$list; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkinstalldirs) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: $(mkinstalldirs) $(DESTDIR)$(mapledir) install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-mapleLTLIBRARIES \ mostlyclean-am distclean: distclean-am distclean-am: clean-am distclean-compile distclean-depend \ distclean-generic distclean-libtool distclean-tags dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-mapleLTLIBRARIES install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool uninstall-am: uninstall-info-am uninstall-mapleLTLIBRARIES .PHONY: GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-mapleLTLIBRARIES distclean \ distclean-compile distclean-depend distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am info \ info-am install install-am install-data install-data-am \ install-exec install-exec-am install-info install-info-am \ install-man install-mapleLTLIBRARIES install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool tags uninstall \ uninstall-am uninstall-info-am uninstall-mapleLTLIBRARIES # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: linbox-1.6.3/interfaces/maple-old/README000066400000000000000000000060271347646240000177040ustar00rootroot00000000000000LinBox/Maple Interface - version 1.0 2-3-2003 1. What is it: This is an interface between the LinBox library of functions and utilities for the Maple computer algebra system. It allows you to call LinBox functions from a Maple session. It is currently under development by Rich Seagraves at the University of Delaware. Any ideas or suggestions are more than welcome. The package is made up of a small library that wraps LinBox functions, and a Maple module called LinBox that contains all procedures and external calling definitions. 2. Requirements: The interface requires the following packges: I. Maple v6.0 or greater II. LinBox III. GMP v3.2 or greater (for LinBox) IV. unix make utility V. A UNIX other than Solaris (see "But I have Solaris you insensitive CLOD!!!!" below). It is recommended you have the following I. Maple v7.0 or later II. g++ 3.0 or later (compiler on which this library was tested). III. GNU make utility (gmake). 3. Availability: The interface is currently distributed as part of the LinBox package, available through CVS. Please goto http://www.linalg.org/developer.html for information about getting the latest version of LinBox. (Note - at present, the Maple interface is not available through the latest LinBox beta release, v0.3b. It should be available when the next beta release of LinBox comes out. Stay on the look-out and keep your fingers crossed!) The interface is available in the interfaces/maple directory of the LinBox distribution. 4. But I have Solaris you insensitive CLOD!!!! At the moment, the package has been tested under Linux and theoretically will work on other Unix variant systems. Both LinBox and this interface has had some trouble building on Solaris, and at present Solaris doesnot support a build feature that this interface needs. If someone has had extensive experience with Solaris and would like to help out with this, I'd be more than happy toi recieve that help. 5. Installation: The interface consists of a shared object file and a plain text script defining a module called LinBox. To create the Maple interface to LinBox, re-run LinBox's configure script with the following additional arguements: --with-maple-prefix=MPFX --enable-shared where MPFX is the directory of a working maple installation. Then rebuild LinBox with make; make install and the interface will be built in LinBox's lib/ directory. 6. Usage: The build system will compile a shared object generate is called lbmaple.mpl. In Maple, type 'read("/directory/you/install/to/lib/lbmaple.mpl");' (where /directory/you/install/to is LinBox's installation path) to get the module. Also, in the interfaces/maple directory in LinBox is a file called demonstration.mws which contains a demonstrational maple worksheet. 7. Wow, this interface is horrible. What's wrong with you? :-) If you really think it's that bad, why not email me and show me how it's done right? I always love help. 8. Contact You can contact the author, Rich Seagraves, at linbox-1.6.3/interfaces/maple-old/demonstration.mws000066400000000000000000000477421347646240000224530ustar00rootroot00000000000000{VERSION 5 0 "IBM INTEL LINUX" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "itc avant garde" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 257 "lucida bright" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 258 "interface user" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 259 "screen" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE " " -1 260 "terminal" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 265 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 268 "" 1 14 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 270 "" 1 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 0 24 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 272 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "" 1 18 0 0 0 0 0 2 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 275 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 276 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 1 18 0 0 0 0 0 1 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 280 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }{PSTYLE "Normal " -1 0 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" 0 18 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 1 1 0 0 0 0 0 0 0 }3 0 0 -1 12 12 0 0 0 0 0 0 19 0 }{PSTYLE "Author" 0 19 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 0 0 -1 8 8 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 256 1 {CSTYLE "" -1 -1 "" 1 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 257 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 0 "" }{TEXT 256 28 "Maple Lin Box Interface, v0.5" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 19 "" 0 " " {TEXT -1 17 "by Rich Seagraves" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 271 "This interface is the fruits of a summer research project. It is meant to demonstrate a practical application of the LinBox suite of u tilities and functions. It is currently distributed as an extra compo nent of the LinBox development package. Please see http://www.lin" } {TEXT 264 0 "" }{TEXT -1 65 "alg.org to find out how to get a copy of \+ this package using CVS " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 259 "LinB ox is a set of libraries meant to provide fast symbolic solutions to p roblems in Linear Algebra. Currently it provides solutions to 3 class es of problems: Rank calculations, Determinant calculations, and the \+ computation of a Matrix's Minimal Polynomial." }{TEXT 257 0 "" }{TEXT 258 0 "" }{TEXT 259 0 "" }{TEXT 260 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 261 31 "Installing the LinBox interface" }}{PARA 0 "" 0 "" {TEXT -1 335 "The interface is composed of a comiled library of code that wraps linbox code, and a maple script that provides Mapl e access to this code. To compile the library and create the script, \+ the linbox package must be compiled with the maple option activated. \+ For information on this, see the README file in the interfaces/maple \+ directory" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 262 0 "" } {TEXT -1 0 "" }{TEXT 263 24 "Activating the interface" }}{PARA 0 "" 0 "" {TEXT -1 353 "Once installation is complete, the shared object \"li blbmaple.so\" and the maple script \"lbmaple.mpl\" will be in the $pre fix/lib directory, where $prefix is the prefix you specified when you \+ installed LinBox . If you want to move the interface to a different d irectory, the lbmaple.mpl file will need to be edited. Instructions f or this are in the file." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 145 "To activate the interface, read in the script usi ng the following command (change $dir to the directory the interface i s currently installed in):" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "read(\"$dir/lbmaple.mpl\");" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7)% (LBapplyG%1LBapplyTransposeG%&LBdetG%*LBminpolyG%'LBrankG%)LinBoxBBG%( LinBoxVG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 40 "The module LinBox sho uld be activated. " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 265 0 "" }{TEXT 266 0 "" }{TEXT 267 19 "Using the interface" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 48 "The LinBox interface defines tw o new data types:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 11 "LinBox BB();" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "LinBoxV();" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 228 "LinBoxBB is a Matrix BlackBox typ e, while LinBoxV is a vector type. They can be initialized with: \n \+ 1) A ready made Matrix or Vector\n \+ 2) Dimensions and an initalization procedure" }}{PARA 0 " " 0 "" {TEXT -1 54 " 3) A list (LinBoxV type o nly)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 238 " For these data types, matrix or vector data is stored in the external code so that multiple data conversions between Maple data types and e xternal code types are un-necessary. Each object stores a handle to a particular external type. " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 45 "The interface also defines several functions:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "LBrank();" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "LBdet();" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 12 "LBminpoly();" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 10 "LBapply();" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "LBapp lyTranspose();" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 175 "By default, th ese functions expect to take the LinBox BlackBox and Vector types as i nput. They can take native Maple types, but convert these two the Lin Box types on the fly." }}}{EXCHG {PARA 0 "" 0 "" {TEXT 269 0 "" } {TEXT 268 27 "Creating a BlackBox object\n" }{TEXT -1 214 "The easiest way to declare a BlackBox matrix is to give the matrix a procedure an d dimensions. Here is a simple procedure that puts 1's on every \"eve n\" diagonal ( abs( i-j) = 0 mod 2), and i+1 on the main diagonal" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "f := proc(i,j)" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 30 " if abs(i-j) mod 2 = 0 then 1" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 8 " else 0" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 5 " \+ fi;" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "end proc;" }}{PARA 11 "" 1 " " {XPPMATH 20 "6#>%\"fGf*6$%\"iG%\"jG6\"F)F)@%/-%$modG6$-%$absG6#,&9$ \"\"\"9%!\"\"\"\"#\"\"!F4F8F)F)F)" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 171 "Say we want to create a 500x500 BlackBox matrix with this form. \+ For this test, let's say we use the 30th prime. To create the Blackbo x, we would make the following call:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "Diag1s := LinBoxBB(ithprime(30),500,500,f);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'Diag1sG`6$%*getMatrixG%$keyGb6#%+thismodu leG6#%)destructG6#/%'unloadGF-6$%*getMatrixG%$keyG6\"6#QDMaple~Contain er~for~LinBox~blackboxF4F46*%\"kG%\"kG%(ExToMapG%(ExToMapG%-lbXgetMatr ixG%-lbXgetMatrixG%.lbXkillMatrixG%.lbXkillMatrixG%,_m145668688G6#%)de structG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 148 "Diag1s becomes a LinB oxBB. If you wanted to get a copy of the Matrix stored within the ext ernal code, you can call the LinBoxBB method getMatrix()." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "M := Diag1s:-getMatrix();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"MG-%'RTABLEG6*\"*g%R\\8%)anythingG%'Matr ixG%.Fortran_orderG7\"\"\"#;\"\"\"\"$+&F." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 118 "Notice that you can also create a LinBoxBB object from a pre-created Matrix. In this case, let's use the 60th, prime:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "Diag2s := LinBoxBB(ithprime( 60), M);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%'Diag2sG`6$%*getMatrixG% $keyGb6#%+thismoduleG6#%)destructG6#/%'unloadGF-6$%*getMatrixG%$keyG6 \"6#QDMaple~Container~for~LinBox~blackboxF4F46*%\"kG%\"kG%(ExToMapG%(E xToMapG%-lbXgetMatrixG%-lbXgetMatrixG%.lbXkillMatrixG%.lbXkillMatrixG6 \"6#%)destructG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 2 "or" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 69 "Diag3s := LinBoxBB(ithprime(60), Ma trix(500,500, f, storage=sparse));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6# >%'Diag3sG`6$%*getMatrixG%$keyGb6#%+thismoduleG6#%)destructG6#/%'unloa dGF-6$%*getMatrixG%$keyG6\"6#QDMaple~Container~for~LinBox~blackboxF4F4 6*%\"kG%\"kG%(ExToMapG%(ExToMapG%-lbXgetMatrixG%-lbXgetMatrixG%.lbXkil lMatrixG%.lbXkillMatrixG6\"6#%)destructG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 348 "Notice that the Matrix used to initalize Diag3s had the \+ option \"storage=sparse\" set. This is a requirement of all Maple Mat rix's used to create LinBox Blackbox types (and in general a good idea , as LinBox works best with Sparse Matrices. Note that any Maple Matr ix returned by the getMatrix() method is declared to have sparse stora ge by default." }}}{EXCHG {PARA 256 "" 0 "" {TEXT -1 0 "" }{TEXT 270 0 "" }{TEXT 271 56 "LinBox Algorithm functions - LBrank, LBdet and LBm inpoly" }}{PARA 0 "" 0 "" {TEXT -1 410 "Now that we've demonstrated th e basic blackbox type, we can call LinBox functions on them. At the p resent, the LinBox project supports fast, probabilistic computation of three aspects of a Matrix: it's Rank, it's Determinant, and it's Min imal Polynomial.\n\nLet's say I wanted to calculate the rank of the di agonal Matrix I created in the previous section. To do so, I would us e the LBrank command as follows:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "LinBox[LBrank](Diag1s);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 73 "Let's compare that to the rank computed b y Maple's LinearAlgebra package:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "LinearAlgebra[Rank](Matrix(500,500,f, storage=sparse, datatype=integer[4]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 199 "The same result. Notice that bot h functions gave the same result, as the rank of a Matrix is independa nt of the entries the field over which the Matrix's entries are. Noti ce the timing differece - " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 21 "time(LBrank(Diag1s));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"$2\"! \"$" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 61 "M := Matrix(500,500, f, storage=sparse, datatype=integer[4]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"MG-%'RTABLEG6+\"*[XuX\"&%(integerG6#\"\"%%'MatrixG% 'sparseG%.Fortran_orderG7\"\"\"#;\"\"\"\"$+&F2" }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 29 "time(LinearAlgebra[Rank](M));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#$\"'X%R(!\"$" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 105 "Now let's look at computing the Determinant of a Matrix. This is done with the LBdet command as follows:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 14 "LBdet(Diag1s);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\" \"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 74 "Compare that to the Determ inant computed by Maple's LinearAlgebra package:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 30 "LinearAlgebra[Determinant](M);" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 289 "N otice that though they both return the same number, they haven't retur ned the same answer. While the LinearAlgebra package's Determinant fu nction returns the absolute Determinant, LinBox's determinant function returns the Givaro::Modular Determinant. The same is true of the Minimal Pol ynomial:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "LBminpoly(Diag1 s,x);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#,&*&\"#*)\"\"\"%\"xGF&F&*$)F' \"\"#F&F&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 76 "LinearAlgebra[ MinimalPolynomial](M,x); # best leave this running over-night\n" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 142 "You can also call LBminpoly witho ut a symbolic argument, in which case you will recieve a Maple list of the coefficients, lowest degree first:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 19 "LBminpoly(Diag1s);\n" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\"\"!\"#*)\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 137 "Notice \+ that the LinBox functions can be called on Maple Matrix types as well. When doing so, you provide the prime specifying the field:" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 24 "LBrank(ithprime(30), M);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"#" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "LBdet(ithprime(30), M);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#\"\"!" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 27 "LBminpoly(it hprime(30), M);" }{TEXT -1 0 "" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#7%\" \"!\"#*)\"\"\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 103 "In these cases , a blackbox type is created in the background and used without return ing a handle to it." }}}{EXCHG {PARA 257 "" 0 "" {TEXT -1 0 "" }{TEXT 272 20 "Using LinBox Vectors" }{TEXT 273 0 "" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 274 0 "" }{TEXT -1 138 "Just as a type is given to hand le Blackbox matrices, a type has also been given to handle external Ve ctor types. This is the LinBoV type:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "V := LinBoxV(500, i-> if isprime(i) then 1 else 0 fi) ;" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"VG`6$%*getVectorG%$keyGb6#%+t hismoduleG6#%)destructG6#/%'unloadGF-6$%*getVectorG%$keyG6\"6#QBMaple~ container~for~LinBox~VectorF4F46*%\"kG%\"kG%.lbXkillVectorG%.lbXkillVe ctorG%(ExToMapG%(ExToMapG%-lbXgetVectorG%-lbXgetVectorG%,_m135564960G6 #%)destructG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 146 "These vectors ar e stored in external code and accessed via a key stored in the LinBoxV type. The LinBoxV type can be created using the following:" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 44 "A length variable and procedure (s ee above)," }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 18 "A ready-made list: " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 41 "f := i -> if isprime(i) then 1 else 0 fi;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"fGf*6#%\"iG6 \"6$%)operatorG%&arrowGF(@%-%(isprimeG6#9$\"\"\"\"\"!F(F(F(" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 36 "V := LinBoxV([seq(f(i), i=1. .500)]);" }{TEXT -1 0 "" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"VG`6$%* getVectorG%$keyGb6#%+thismoduleG6#%)destructG6#/%'unloadGF-6$%*getVect orG%$keyG6\"6#QBMaple~container~for~LinBox~VectorF4F46*%\"kG%\"kG%.lbX killVectorG%.lbXkillVectorG%(ExToMapG%(ExToMapG%-lbXgetVectorG%-lbXget VectorG6\"6#%)destructG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 35 "and A \+ ready-made Maple Vector type:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 83 "V := LinBoxV(Vector(500, i-> if isprime(i) then 1 else 0 fi, dat atype=integer[4]));" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%\"VG`6$%*getV ectorG%$keyGb6#%+thismoduleG6#%)destructG6#/%'unloadGF-6$%*getVectorG% $keyG6\"6#QBMaple~container~for~LinBox~VectorF4F46*%\"kG%\"kG%.lbXkill VectorG%.lbXkillVectorG%(ExToMapG%(ExToMapG%-lbXgetVectorG%-lbXgetVect orG%,_m135778512G6#%)destructG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 167 "Notice in the last it is required that datatype=integer[4] be spe cified. The LinBoxV type includes a method that returns a ready made \+ Maple Vector called getVector():" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 20 "x := V:-getVector();" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"xG-%'RTABLEG6*\"*Cb5N\"%)anythingG&%'VectorG6#%'columnG%,rectan gularG%.Fortran_orderG7\"\"\"\";F1\"$+&" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 45 "x can now be used to check the contents of V;" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 275 0 "" }{TEXT 276 28 "LBapply a nd LBapplyTranspose" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 277 0 "" } {TEXT -1 227 "The LBapply and LBapplyTranspose functions can be used t o apply a Blackbox Matrix to an external Vector. LBapply and LBapplyT ranpose corresponds to the apply and applyTranspose functions in the B lackboxArchetype. For example:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 25 "V1 := LBapply(Diag1s, V);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#> %#V1G`6$%*getVectorG%$keyGb6#%+thismoduleG6#%)destructG6#/%'unloadGF-6 $%*getVectorG%$keyG6\"6#QBMaple~container~for~LinBox~VectorF4F46*%\"kG %\"kG%.lbXkillVectorG%.lbXkillVectorG%(ExToMapG%(ExToMapG%-lbXgetVecto rG%-lbXgetVectorG%,_m135779332G6#%)destructG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 35 "V1T := LBapplyTranspose(Diag1s, V);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%$V1TG`6$%*getVectorG%$keyGb6#%+thismoduleG6#% )destructG6#/%'unloadGF-6$%*getVectorG%$keyG6\"6#QBMaple~container~for ~LinBox~VectorF4F46*%\"kG%\"kG%.lbXkillVectorG%.lbXkillVectorG%(ExToMa pG%(ExToMapG%-lbXgetVectorG%-lbXgetVectorG%-_m1095974244G6#%)destructG " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 243 "As you can see, these functi ons return another LinBoxV type. As with the other functions in the L inBox interface, LBapply and LBapplyTranspose can take Maple Matrix an d Vector types (or a mix of LinBox and Maple types) as input. For exa mple:" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "V2 := LBapply(ithp rime(30), M, V);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%#V2G`6$%*getVect orG%$keyGb6#%+thismoduleG6#%)destructG6#/%'unloadGF-6$%*getVectorG%$ke yG6\"6#QBMaple~container~for~LinBox~VectorF4F46*%\"kG%\"kG%.lbXkillVec torG%.lbXkillVectorG%(ExToMapG%(ExToMapG%-lbXgetVectorG%-lbXgetVectorG %-_m1095975044G6#%)destructG" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 102 "V3 := LBapplyTranspose(Diag1s, Vector(500, i -> if isprime(i) t hen 1 else 0 fi, datatype=integer[4]));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#V3G-%'RTABLEG6*\"*OECN\"%)anythingG&%'VectorG6#%'columnG%,rec tangularG%.Fortran_orderG7\"\"\"\";F1\"$+&" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 76 "vm := Vector(500, i -> if isprime(i) then 1 else 0 \+ fi, datatype=integer[4]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#vmG-%' RTABLEG6*\"*O5CN\"&%(integerG6#\"\"%&%'VectorG6#%'columnG%,rectangular G%.Fortran_orderG7\"\"\"\";F4\"$+&" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 44 "V4 := LBapplyTranspose(ithprime(30), M, vm);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%#V4G-%'RTABLEG6*\"*#*pLN\"%)anything G&%'VectorG6#%'columnG%,rectangularG%.Fortran_orderG7\"\"\"\";F1\"$+& " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 221 "Notice in the last example, \+ the answer comes back as a Maple Vector rather than a LinBoxV type. F Or the LBApply and LBApplyTranspose functions, if all the inputs are M aple types, all the outputs will also be Maple types." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 226 "As always, when using a Maple Matrix wit h a LinBox function, firsty give a prime that specifies the field of t he Matrix. These functions could be used to create low-level LinBox p rocedures in Maple, were the user so inclined." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 278 0 "" }{TEXT 279 19 "Further Development " }{TEXT 280 0 "" }{TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 186 "As wi th all aspects of the LinBox project, this module is currently under d evelopment. To aide in the development of LinBox algorithms in Maple, under works are the following functions:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 96 "LBdiag(prime, n) - Returns a blackbox object representing a diagonal Matrix with random entries." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 89 "LBcompose(M1, M2) - Returns a blackbox object represeting the composition of two Matrices" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 82 "LBtranspose(M1) - Returns a blackbox object representing the trans pose of a Matrix" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 256 "The develope r is currently accepting ideas, suggestions and angry flames. If you \+ have any constructive criticism, you can reach Rich Seagraves at seagr ave@cis.udel.edu. Otherwise, messages pointed to /dev/null will be ju st fine :-). Thank you very much." }}}}{MARK "5 0 0" 10 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 } linbox-1.6.3/interfaces/maple-old/lbffpack.mpl000066400000000000000000000100421347646240000212760ustar00rootroot00000000000000FFPACK:=module() export LBMultiply,LBAddMultiply,LSPFactor,LQUPFactor,LBRank,LBDeterminant,LBInverse; local fgemm,lsp,lbrank,lbdeterminant,lbinverse,create,libname; option package, load=create, unload=gc; description "Maple interface to FFPACK package"; create := proc() libname :="/home/pgiorgi/Library/src/linbox/interfaces/maple/.libs/liblbmapleffpack.so"; fgemm:=define_external('fgemm',MAPLE,LIB=libname); lsp:=define_external('lsp',MAPLE,LIB=libname); lbrank:=define_external('rank',MAPLE,LIB=libname); lbdeterminant:=define_external('determinant',MAPLE,LIB=libname); lbinverse:=define_external('inverse',MAPLE,LIB=libname); end proc; create(); LBMultiply:=proc() # calls are : # LBMultiply(p,A,B) -> return A*B mod p # LBMultiply(p,alpha,A,B) -> return alpha.A*B mod p # LBMultiply(p,A,B,C) -> return C:= A*B mod p # LBMultiply(p,alpha,A,B,C) -> return C:= alpha.A*B mod p local m,n,k1,k2,alpha,C,a,b; if (type(args[2],Matrix)) then alpha:=1; m,k1 := LinearAlgebra:-Dimension(args[2]); k2,n := LinearAlgebra:-Dimension(args[3]); a:=2;b:=3; elif (type(args[2],numeric)) then alpha:=args[2]; m,k1 := LinearAlgebra:-Dimension(args[3]); k2,n := LinearAlgebra:-Dimension(args[4]); a:=3:b:=4; else error " 2nd argument should be either a Matrix or a numeric value"; end if; if (k1<> k2) then error "Dimensions don't match",k1,k2; end if; if (nargs return C:= beta.C+alpha.A*B mod p local m,n,k1,k2,m1,n1; m,k1:= LinearAlgebra:-Dimension(args[3]); k2,n:= LinearAlgebra:-Dimension(args[4]); m1,n1:= LinearAlgebra:-Dimension(args[6]); if ((k1<>k2) or ( m1<> m) or (n1 <> n)) then error "Dimensions don't match"; end if; fgemm(args[1],m,n,k1,args[2],args[3],args[4],args[5],args[6]); end proc; LSPFactor:=proc() # calls are: # LSPFactor(p,A) -> return A,P ; A:=[LSP] mod p (L is lower part of A , S is upper part of A) # LSPFactor(p,A,perm) -> return A,perm; A:=[LSP],perm:=P local m,n,P; m,n:= LinearAlgebra:-Dimension(args[2]); if (nargs <3) then P:=rtable(1..n,subtype=Vector[column],datatype=integer[4],order=C_order); #P:=Vector[column](1..n); lsp(args[1],m,n,args[2],P,1); return args[2],P; else lsp(args[1],m,n,args[2],args[3],1); return args[2],args[3]; end if; end proc; LQUPFactor:=proc() # calls are: # LQUPFactor(p,A) -> return A,Q,P ; A:=[LQUP] mod p (L is lower part of A in compress form, U is upper part of A) # LQUPFactor(p,A,perm1,perm2) -> return A,perm1,perm2; A:=[LSP],perm:=P local m,n,P,Q; m,n:= LinearAlgebra:-Dimension(args[2]); if (nargs <3) then Q:=rtable(1..m,subtype=Vector[column],datatype=integer[4],order=C_order); P:=rtable(1..n,subtype=Vector[column],datatype=integer[4],order=C_order); lsp(args[1],m,n,args[2],P,2,Q); return args[2],P,Q; else lsp(args[1],m,n,args[2],args[3],2,args[4]); return args[2],args[3],args[4]; end if; end proc; LBRank:=proc() # calls are: # LBRank(p,A) return rank(A mod p) local m,n; m,n:= LinearAlgebra:-Dimension(args[2]); lbrank(args[1],m,n,args[2]); end proc; LBDeterminant:=proc() # calls are: # LBDeterminant(p,A) return determinant(A) mod p local m,n; m,n:= LinearAlgebra:-Dimension(args[2]); lbdeterminant(args[1],m,n,args[2]); end proc; LBInverse:=proc() # calls are: # LBInverse(p,A) return A^(-1) mod p # LBInverse(p,A,X) return X:=A^(-1) mod p local m,n,X; m,n:= LinearAlgebra:-Dimension(args[2]); if (m<>n) then error "matrix should be square"; end if; if (nargs <3) then X:=LinearAlgebra:-Modular:-Create(args[1],m,m,float[8]); lbinverse(args[1],m,args[2],X); else lbinverse(args[1],m,args[2],args[3]); end if; end proc; end module; linbox-1.6.3/interfaces/maple-old/lbmaple-ffpack.C000066400000000000000000000251771347646240000220030ustar00rootroot00000000000000/* Copyright (C) LinBox * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ //#define DEBUG 3 #include "linbox/field/modular.h" #include "linbox/field/givaro-zpz.h" #include "fflas-ffpack/fflas/fflas.h" #include "fflas-ffpack/ffpack/ffpack.h" #include "maplec.h" using namespace LinBox; typedef Givaro::Modular Field; //typedef Givaro::Modular Field; typedef Field::Element Element; extern "C" { ALGEB fgemm(MKernelVector kv, ALGEB* argv ) { /* expect arguments in following order: 1- p (int prime) 2- m (int) 3- n (int) 4- k (int) 5- alpha (int) 6- A (matrix) 7- B (matrix) 8- beta (int) 9- C (matrix) */ //MaplePrintf(kv,"Givaro::Modular Matrix Mutiplication using LinBox library\n"); int p,m,n,k,alpha,beta; p = MapleToInteger32(kv,(ALGEB)argv[1]); m = MapleToInteger32(kv,(ALGEB)argv[2]); n = MapleToInteger32(kv,(ALGEB)argv[3]); k = MapleToInteger32(kv,(ALGEB)argv[4]); alpha = MapleToInteger32(kv,(ALGEB)argv[5]); beta = MapleToInteger32(kv,(ALGEB)argv[8]); Field F(p); Element a,b; F.init(a,alpha); F.init(b,beta); Element *A, *B, *C; ALGEB Matrix; RTableSettings settings; // Check that argument 6,7,9 are float[8] rtable and return a pointer on it Matrix = (ALGEB)argv[6]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } A = (Element*)RTableDataBlock(kv,Matrix); //Ae=new Element[m*k]; //for (int i=0;i LSP : k=2 -> LQUP) 7- Q (vector) only needed when k=2 */ int p=MapleToInteger32(kv,argv[1]); int m,n,k; m=MapleToInteger32(kv,(ALGEB)argv[2]); n=MapleToInteger32(kv,(ALGEB)argv[3]); k=MapleToInteger32(kv,(ALGEB)argv[6]); Field F(p); ALGEB Matrix,OutMatrix,Perm1,Perm2; RTableSettings settings,oldsettings; Matrix = (ALGEB)argv[4]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { RTableGetSettings(kv,&oldsettings,Matrix); MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } Element *TMP1= (Element*) RTableDataBlock(kv,Matrix); Perm1= (ALGEB)argv[5]; RTableGetSettings(kv,&settings,Perm1); size_t *TMP2= (size_t*) RTableDataBlock(kv,Perm1); if (k == 2) { Perm2= (ALGEB) argv[7]; size_t *TMP3= (size_t*) RTableDataBlock(kv,Perm2); FFPACK::LUdivine( F, FFLAS::FflasNonUnit, m, n, TMP1, n, TMP2, FFPACK::FfpackLQUP,TMP3); } else{ FFPACK::LUdivine( F, FFLAS::FflasNonUnit, m, n, TMP1, n, TMP2, FFPACK::FfpackLSP); } OutMatrix = (ALGEB)argv[4]; switch (settings.data_type) { case RTABLE_FLOAT64: OutMatrix=Matrix; break; case RTABLE_INTEGER32: MaplePrintf(kv,"Converting the result to int[4]\n"); OutMatrix = RTableCopy(kv,&oldsettings,Matrix); break; case RTABLE_DAG: MaplePrintf(kv,"Converting the result to maple int\n"); OutMatrix = RTableCopy(kv,&oldsettings,Matrix); break; } return OutMatrix; } } extern "C" { ALGEB rank(MKernelVector kv, ALGEB* argv ) { /* expect arguments in following order: 1- p (int prime) 2- m (int) 3- n (int) 4- A (matrix) */ int p=MapleToInteger32(kv,argv[1]); int m,n; m=MapleToInteger32(kv,(ALGEB)argv[2]); n=MapleToInteger32(kv,(ALGEB)argv[3]); Field F(p); Element *A; RTableSettings settings; ALGEB Matrix = (ALGEB)argv[4]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } A= (Element*) RTableDataBlock(kv,Matrix); int rank=FFPACK::Rank(F,m,n,A,n); return ToMapleInteger(kv,rank); } } extern "C" { ALGEB determinant(MKernelVector kv, ALGEB* argv ) { /* expect arguments in following order: 1- p (int prime) 2- m (int) 3- n (int) 4- A (matrix) */ int p=MapleToInteger32(kv,argv[1]); int m,n; m=MapleToInteger32(kv,(ALGEB)argv[2]); n=MapleToInteger32(kv,(ALGEB)argv[3]); Field F(p); Element *A; RTableSettings settings; ALGEB Matrix = (ALGEB)argv[4]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } A= (Element*) RTableDataBlock(kv,Matrix); Element d=FFPACK::Det(F,m,n,A,n); return ToMapleInteger(kv,long(d)); } } extern "C" { ALGEB inverse(MKernelVector kv, ALGEB* argv ) { /* expect arguments in following order: 1- p (int prime) 2- m (int) 3- A (matrix) 4- X (matrix) */ int p=MapleToInteger32(kv,argv[1]); int m; m=MapleToInteger32(kv,(ALGEB)argv[2]); Field F(p); Element *A,*X; RTableSettings settings; ALGEB Matrix; Matrix= (ALGEB)argv[3]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } A= (Element*) RTableDataBlock(kv,Matrix); Matrix= (ALGEB)argv[4]; RTableGetSettings(kv,&settings,Matrix); if( settings.data_type != RTABLE_FLOAT64 || settings.storage != RTABLE_RECT || !IsMapleNULL(kv,settings.index_functions) ) { MaplePrintf(kv,"Making a copy \n"); /* not the format we wanted -- make a copy */ settings.data_type = RTABLE_FLOAT64; settings.storage = RTABLE_RECT; settings.index_functions = ToMapleNULL(kv); settings.foreign = FALSE; Matrix = RTableCopy(kv,&settings,Matrix); } X= (Element*) RTableDataBlock(kv,Matrix); FFPACK::Invert(F,m,A,m,X,m); Matrix = (ALGEB)argv[4]; RTableGetSettings(kv,&settings,Matrix); switch (settings.data_type) { case RTABLE_FLOAT64: break; case RTABLE_INTEGER32: MaplePrintf(kv,"Converting the result to int[4]\n"); int* Ae; Ae= (int *)RTableDataBlock(kv,Matrix); for (int i=0;is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple-old/lbmaple.C000066400000000000000000001321211347646240000205370ustar00rootroot00000000000000/* Copyright (C) LinBox * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #include "linbox/field/modular.h" #include "linbox/integer.h" // <- Wrapper for gmp BIG int support // #include "linbox/field/integer.h" <- When linbox supports computations // over the whole integers #include "linbox/blackbox/triplesbb.h" // Special blackbox for this interface #include "linbox/solutions/rank.h" #include "linbox/solutions/det.h" #include "linbox/solutions/minpoly.h" // #include "linbox/solutions/ssolve.h" <- When linbox supports System solver #include #include #include #include #include #include "maplec.h" using LinBox::integer; typedef std::vector Vectorl; typedef std::vector VectorI; typedef LinBox::TriplesBB > TriplesBBi; typedef LinBox::TriplesBB > TriplesBBI; /* Type references: Used to identify the type of object pointed to by * elements in the hash table. * Types: BlackBoxi - Black Box matrix, single-word size entries * Class: LinBox::TriplesBB, std::vector > (TriplesBBi) * BlackBoxI - Black Box matrix, multi-word size entries * Class: LinBox::TriplesBB, std::vector > (TriplesBBI) * SmallV - STL vector, single-word size entries * Class: std::vector (Vectorl) * LargeV - STL vector, multi-word size entries * Class: std::vector (VectorI) */ const int BlackBoxi = 1; const int BlackBoxI = 2; const int SmallV = 3; const int LargeV = 4; extern "C" { ALGEB End(MKernelVector kv, ALGEB* args); ALGEB initBB(MKernelVector kv, ALGEB* args); ALGEB getMatrix(MKernelVector kv, ALGEB* args); ALGEB killMatrix(MKernelVector kv, ALGEB* args); ALGEB initV(MKernelVector kv, ALGEB* args); ALGEB getVector(MKernelVector kv, ALGEB* args); ALGEB killVector(MKernelVector kv, ALGEB* args); ALGEB apply(MKernelVector kv, ALGEB* args); ALGEB applyT(MKernelVector kv, ALGEB* args); ALGEB rank(MKernelVector kv, ALGEB* args); ALGEB det(MKernelVector kv, ALGEB* args); ALGEB minpoly(MKernelVector kv, ALGEB* args); // ALGEB ssolve(MKernelVector kv, ALGEB* args); } ALGEB & LiToM(MKernelVector &, const integer &, ALGEB &); integer & MtoLI(MKernelVector &, integer &, const ALGEB &); std::map hashTable; std::map typeTable; /* End -- LBmaple back-end module "destructor". Cleans up all external data * when the LBmaple module goes out of scope and is garbage collected. * Pre-Condition: attached maple module has gone out of scope and is * garbage collected. * Post-Condition: all dynamically allocated data is freed */ extern "C" { ALGEB End(MKernelVector kv, ALGEB* args) { /* Four types of objects stored in memory */ TriplesBBi* BBip; TriplesBBI* BBIp; Vectorl* Vip; VectorI* VIp; std::map::iterator f_i; std::map::iterator h_i; // For each object in the hashTable . . . for( h_i = hashTable.begin(); h_i != hashTable.end(); ++h_i) { // Find the objects type and switch appropriately. . . f_i = typeTable.find(h_i->first); switch( f_i->second ) { // In each case, delete the object pointed to case BlackBoxi: BBip = (TriplesBBi*) h_i->second; delete BBip; break; case BlackBoxI: BBIp = (TriplesBBI*) h_i->second; delete BBIp; break; case SmallV: Vip = (std::vector *) h_i->second; delete Vip; break; case LargeV: VIp = ( std::vector *) h_i->second; delete VIp; break; /* Of course there are more cases to follow */ } } // When all objects are deleted, return return ToMapleNULL(kv); } } /* initBB - Backend "constructor" for Maple BlackBox objects. Takes as input 3 types of objects * from Maple: A Maple NAG sparse Matrix, 3 vectors defining a word-size entry matrix, or * 3 vectors defining a multi-word size entry matrix * Declares the object in dynamic memory and hashes into hashTable and typeTable * using the key supplied by Maple. * Pre-Condition: Called from Maple to create blackbox type * Post-Condition: Blackbox object exists in dynamic memory, can be called upon with key * supplied by Maple */ extern "C" { ALGEB initBB(MKernelVector kv, ALGEB* args) { // First get flag and key // IN this c int flag = MapleToInteger32(kv,args[1]), key = MapleToInteger32(kv,args[2]); size_t m, n, nonzeros, i; // perform an intial search to see if the key is stored in memory. If so, return the key, // the object already exists // Otherwise, switch on the type switch(flag) { // The first type is the Maple NAG sparse matrix. It is passed straight into the routine // the prime is passed first, then the object. All pertinant data can be lifted using // Maple's extensive rtable API case 1: { long p; int *data; NAG_INT *rowP, *colP; TriplesBBi* In; p = MapleToInteger32(kv, args[3]); m = RTableUpperBound(kv, args[4], 1); n = RTableUpperBound(kv, args[4], 2); nonzeros = RTableNumElements(kv, args[4]); // Get pointers to the data rowP = RTableSparseIndexRow(kv,args[4],1); colP = RTableSparseIndexRow(kv, args[4],2); data = (int*) RTableDataBlock(kv,args[4]); // Declare a new object on the heap Givaro::Modular modF(p); In = new TriplesBBi(modF, m, n, nonzeros); // Add each entry for(i = 0; i < nonzeros; ++i) { In->addEntry( data[i], rowP[i], colP[i]); } // hash the pointer into the hasTable, the type into the typeTable using the key hashTable.insert(std::pair(key, In)); typeTable.insert(std::pair( key, BlackBoxi )); } break; // In the second case, the user either A) Created a BlackBox from an existing sparse // matrix in Maple, or created a Matrix by passing in parameters and a procedure // In either case, the data is formatted in Maple, and a number of parameters are passed // to this routine. // First is the prime, then the row list, then the column list, the entry list, followed // by the rows, columns, and number of non-zero entries. case 2: { long p; TriplesBBi* In; p = MapleToInteger32(kv, args[3]); m = (size_t) MapleToInteger32(kv,args[7]); n = (size_t) MapleToInteger32(kv,args[8]); nonzeros = (size_t) MapleToInteger32(kv,args[9]); // Declares field and blackbox Givaro::Modular modF(p); In = new TriplesBBi(modF, m, n, nonzeros); // Populates blackbox w/ entries for(i = 1; i <= nonzeros; i++) { In->addEntry( MapleToInteger32(kv, MapleListSelect(kv, args[4], i)), MapleToInteger32(kv, MapleListSelect(kv, args[5], i)), MapleToInteger32(kv, MapleListSelect(kv, args[6], i))); } hashTable.insert(std::pair(key, (void*) In)); typeTable.insert(std::pair(key, BlackBoxi)); } break; // In this case, a sparse Matrix was input, or a matrix was created w/ a procedure, but // the matrix is defined by a multi-word size prime. Data is passed in the order // mentioned for case #2 above. Notice that the function calls the MtoLI function // to convert into a gmp integer case 3:{ integer blank, iPrime; VectorI Elements; TriplesBBI* In; iPrime = MtoLI(kv, iPrime, args[3]); m = (size_t) MapleToInteger32(kv,args[7]); n = (size_t) MapleToInteger32(kv,args[8]); nonzeros = (size_t) MapleToInteger32(kv,args[9]); // Declare Field and blackbox Givaro::Modular modF(iPrime); In = new TriplesBBI(modF, m, n, nonzeros); for(i = 1; i <= nonzeros; i++) { In->addEntry( MtoLI(kv, blank, MapleListSelect(kv, args[4],i)), MapleToInteger32(kv, MapleListSelect(kv, args[5], i)), MapleToInteger32(kv, MapleListSelect(kv, args[6], i))); } hashTable.insert(std::pair(key, In)); typeTable.insert(std::pair(key,BlackBoxI)); } break; // In case some weird operation is requested, just bail. default: MapleRaiseError(kv, "ERROR! Confused by request. No action performed."); break; } return ToMapleNULL(kv); } } /* initV - Backend "constructor" for LBmaple vector type. * Can create either a wordsize entry * vector, or a multi-precision vector (distinction made by entry size flag passed * from Maple). Declares the object in dynamic memory and hashes into hashTable and typeTable * using the key supplied by Maple. * Pre-Condition: Called from Maple with initialized data in a correct format * Post-Condition: Blackbox object exists in dynamic memory, can be called upon with key * supplied by Maple */ extern "C" { ALGEB initV(MKernelVector kv, ALGEB* args) { // First get the flag and key to use. The flag indicates what type of object was passed in // the key what key it should be hashed against int flag = MapleToInteger32(kv,args[1]), key = MapleToInteger32(kv,args[2]), length, index, i, j, L; std::vector* vP; std::vector* VP; integer blank; // Performs a quick table check to see if the Vector has already been // created. If so, simply return it std::map::iterator h_i = hashTable.find(key); if( h_i != hashTable.end() ) { return ToMapleInteger(kv, (long) key); } // A few good choices switch( flag ) { // For this case, a complete maple list of single-word size entries is passed // in that will be translated (1-1) into an STL vector and hased in. case 1: // First get the vector length length = MapleToInteger32(kv, args[4]); // dynamically allocate the new object, and reserve space in memory for savings vP = new std::vector; vP->reserve(length); // initialize entries and hash into hashTable for(i = 1; i <= length; i++) { vP->push_back( MapleToInteger32(kv, MapleListSelect(kv, args[3], (M_INT) i))); } hashTable.insert(std::pair(key, vP)); break; // For thsi case, a complete maple list of multi-word sized entries is passed // in that will be translate (1-1) into an STL vector and hashed in. case 2: length = MapleToInteger32(kv, args[4]); VP = new std::vector; VP->reserve(length); for(i = 1; i <= length; i++) { VP->push_back( MtoLI(kv, blank, MapleListSelect(kv, args[3], (M_INT) i))); } hashTable.insert(std::pair(key, VP)); break; // In this case, the vector passed in was parsed into a two lists, the first containing // the data entries, the second containing the indice in which this entry goes. Each of // these entries are single word integers case SmallV: // Initialzie variables, get length and first indice i = 1; j = 1; length = MapleToInteger32(kv, args[5]); L = MapleToInteger32(kv, args[6]); // For speed, ensures only 1 memory management adjustment in creation vP = new std::vector; vP->reserve(L); for( ; i <= length; ++i) { index = MapleToInteger32(kv, MapleListSelect(kv, args[3], i)); // All lists are passed back in sparse form, so just add zeros // until you get to the correct index while(j < index) { vP->push_back(0L); ++j; } // Add the nonzero entry vP->push_back( (long) MapleToInteger32(kv,MapleListSelect(kv,args[4], i))); // ++index ++j; } // Now populate the rest of V with 0's for(i = index + 1 ; i <= L; ++i) vP->push_back( 0L ); hashTable.insert(std::pair(key, vP)); break; // Multi-word integer case. As above, 2 sparse lists are passed in. The first contains // all the non-zero entries. The second contains the indice of each element. case LargeV: i = 1; j = 1; length = MapleToInteger32(kv,args[5]); L = MapleToInteger32(kv, args[6]); VP = new std::vector; VP->reserve(L ); for( ; i <= length; ++i ) { index = MapleToInteger32(kv, MapleListSelect(kv, args[3], i)); while(j < index) { VP->push_back( integer(0) ); ++j; } // Add a nonzero entry VP->push_back( MtoLI(kv, blank, MapleListSelect(kv,args[4], i) )); ++j; // ++index :-) index = MapleToInteger32(kv,MapleListSelect(kv,args[3],i)); } for( ; i <= L; ++i) VP->push_back( integer(0) ); hashTable.insert(std::pair(key, VP)); break; // In case a weird action is performed, just bail out default: MapleRaiseError(kv,"ERROR! Confused by request. Bailing out."); } // Corrects for list cases. Ensures that the "flag" variable is either 3 or 4, so it will // properly correspond to the type settings in the type table // insert the type in the typeTable if(flag < 3) flag += 2; typeTable.insert(std::pair(key,flag)); return ToMapleNULL(kv); } } /* killMatrix - BackEnd "destructor" for a Maple blackbox element that goes out of scope. * Deletes the blackbox. * Pre-condition: The object hashed to by key is an active BlackBox matrix. * Post-condition: The BlackBox matrix hashed to by key is freed */ extern "C" { ALGEB killMatrix(MKernelVector kv, ALGEB* args) { char err[] = "ERROR! Associated blackbox object does not exist!"; int key = MapleToInteger32(kv,args[1]), flag; // Gets the type in question std::map::iterator i = typeTable.find(key); // If the associated object code is not there, we have a problem. Bail. if( i == typeTable.end() ) MapleRaiseError(kv,err); // Otherwise we're good flag = i->second; // Erase the entry from the typeTable typeTable.erase(key); // hash out the pointer std::map::iterator h_i = hashTable.find(key); if( h_i != hashTable.end() ) { switch( flag ) { // Free the data, whatever it is case BlackBoxi:{ TriplesBBi* ptr = (TriplesBBi*) h_i->second; delete ptr; } break; case BlackBoxI: { TriplesBBI* ptr = (TriplesBBI*) h_i->second; delete ptr; } break; } // remove the pointer and bail hashTable.erase(key); } return ToMapleNULL(kv); } } /* killVector - Backend "destructor" for a linbox vector object in Maple. Takes as input a key to the * data. Frees up dynamic memory and removes the object from the hash tables * Pre-Condition: key is a key to a valid vector object * Post-Condition: Dynamic memory is freed and the object is removed from the hash tables. */ extern "C" { ALGEB killVector(MKernelVector kv, ALGEB* args) { // Gets the key int key = MapleToInteger32(kv, args[1]), flag; char err[] = "ERROR! Associated Vector object does not exist!"; // Checks to see if the object is there. If not, bail std::map::iterator f_i = typeTable.find(key); if( f_i == typeTable.end() ) MapleRaiseError( kv, err); // We're good otherwise flag = f_i->second; // In case the flag is there but the data isn't typeTable.erase(key); // Get ahold of the data std::map::iterator h_i = hashTable.find(key); if( h_i != hashTable.end() ) { // Switch according to the vector type, small or large switch( flag) { case SmallV: { Vectorl* ptr = (Vectorl*) h_i->second; delete ptr; } break; case LargeV: { VectorI* ptr = (VectorI*) h_i->second; delete ptr; } break; } hashTable.erase(key); } // Do nothing if it isn't in there return ToMapleNULL(kv); } } /* getMatrix - Returns an rtable object initialized with the data from the blackbox. This is a bit * of a hack, as the differences between Maple versions becomes an issue. There are two methods: * 1) (if using Maple 7) use string tools to build a string that embodies the proper command to * declare an rtable object, and invoke this command with the MapleEvalStatement() function, or * 2) use Maple's RTable API to create a new RTable object (this works in Maple 8, and I'm * presuming Maple 6 and 5. Special thanks to tech support at Maple Soft for informing me that in * maple 7, the RTableCreate() function has been disabled). * Pre-Condition: The key provided by the call hashes to a valid BlackBox object * Post-Condition: An RTable object initialized with the entries of the Black Box is returned to Maple */ extern "C" { ALGEB getMatrix(MKernelVector kv, ALGEB* args) { // Get the key int key = MapleToInteger32(kv,args[1]), flag; char err[] = "ERROR! The associated BlackBox object does not exist!"; M_INT index[2], bound[4]; RTableData d; ALGEB rtable, blank; RTableSettings s; std::vector Row, Col; std::vector::const_iterator r_i, c_i; char MapleStatement[100] = "rtable(1.."; // Get the data type of the blackbox std::map::iterator f_i = typeTable.find(key); if( f_i == typeTable.end() ) // In case the blackbox isn't there MapleRaiseError(kv,err); flag = f_i->second; // Otherwise, get the blackbox type // Check that the data is there std::map::iterator h_i = hashTable.find(key); if(h_i != hashTable.end() ) { // Switch according to mode - regular or "special fix" mode switch( MapleToInteger32(kv, args[3])) { case 1: // This is the Maple 7 case, "special fix" mode // Use the EvalMapleStatement() to call the rtable constructor in the // Maple environment // Switch according to the type switch(flag) { case BlackBoxi:{ // For single word entry matrices // Extract the necessary data TriplesBBi* BB = (TriplesBBi*) h_i->second; Vectorl Data = BB->getData(); Row = BB->getRows(); Col = BB->getCols(); Vectorl::const_iterator d_i; // Builds the statement that will be used in the Maple 7 callback sprintf(MapleStatement + strlen(MapleStatement), "%d", BB->rowdim() ); strcat(MapleStatement, ",1.."); sprintf(MapleStatement + strlen(MapleStatement), "%d", BB->coldim() ); strcat(MapleStatement, ", subtype=Matrix, storage=sparse);"); // Perform the callback rtable = kv->evalMapleStatement(MapleStatement); // Insert each non-zero entry for(d_i = Data.begin(), r_i = Row.begin(), c_i = Col.begin(); r_i != Row.end(); ++d_i, ++c_i, ++r_i) { index[0] = *r_i; index[1] = *c_i; d.dag = ToMapleInteger(kv, *d_i); // d is a union, dag is the // ALGEB union field RTableAssign(kv, rtable, index, d); } } break; case BlackBoxI: { // For multi-word size matrix types TriplesBBI* BB = (TriplesBBI*) h_i->second; VectorI Data = BB->getData(); VectorI::const_iterator d_i; // Build and execute the Maple callback sprintf(MapleStatement + strlen(MapleStatement), "%d", BB->rowdim() ); strcat(MapleStatement, ", 1.."); sprintf(MapleStatement + strlen(MapleStatement), "%d", BB->coldim() ); strcat(MapleStatement, ", subtype=Matrix, storage=sparse);"); rtable = kv->evalMapleStatement(MapleStatement); for(d_i = Data.begin(), r_i = Row.begin(), c_i = Col.begin(); r_i != Row.end(); ++d_i, ++r_i, ++c_i) { index[0] = *r_i; index[1] = *c_i; // * Okay, here's how this line works. Basically, // * in order to set the entries of this RTable to // * multi-precision integers, I have to first use my own conversion // * method, LiToM, to convert the integer entry to a ALGEB structure, // * then do a callback into Maple that calls the ExToM procedure, // * which converts the results of LiToM into a Maple multi-precision // * integer. At the moment, this is the best idea I've got as to // * how to convert a GMP integer into a Maple representation in one shot. // * d.dag = EvalMapleProc(kv,args[2],1,LiToM(kv, *d_i, blank)); RTableAssign(kv, rtable, index, d); } } break; // In this case the object is not a BlackBox type default: MapleRaiseError(kv,err); break; } break; case 2: // Okay, here is the normal case. // Use RTableCreate to create a Maple rtable object kv->rtableGetDefaults(&s); // Get default settings - set datatype to Maple, // DAGTAG to anything s.subtype = RTABLE_MATRIX; // Subtype set to Matrix s.storage = RTABLE_SPARSE; // Storage set to sparse s.num_dimensions = 2; // What do you think this means :-) bound[0] = bound[2] = 1; // Set the lower bounds of each dimension to 0, which for maple is 1 switch(flag) { // Switch on data type case BlackBoxi:{ // word size entry Matrix TriplesBBi* BB = (TriplesBBi*) h_i->second; Vectorl Data = BB->getData(); Row = BB->getRows(); Col = BB->getCols(); Vectorl::const_iterator d_i; bound[1] = BB->rowdim(); bound[3] = BB->coldim(); rtable = kv->rtableCreate(&s, NULL, bound); // This is the RTableCreate function, it's // just the one that works // Assign all the non-zero rows for( d_i = Data.begin(), r_i = Row.begin(), c_i = Col.begin(); r_i != Row.end(); ++d_i, ++c_i, ++r_i) { index[0] = *r_i; index[1] = *c_i; d.dag = ToMapleInteger(kv, *d_i); // d is a union, dag is the // ALGEB union field RTableAssign(kv, rtable, index, d); } } break; case BlackBoxI: { // For multi-word entry Matrices TriplesBBI* BB = (TriplesBBI*) h_i->second; VectorI Data = BB->getData(); // Setup the Create() call VectorI::const_iterator d_i; Row = BB->getRows(); Col = BB->getCols(); bound[1] = BB->rowdim(); bound[3] = BB->coldim(); rtable = kv->rtableCreate(&s, NULL, bound); // Create an empty RTable // Populate the RTable using the callback method described below for(d_i = Data.begin(), r_i = Row.begin(), c_i = Col.begin(); r_i != Row.end(); ++d_i, ++r_i, ++c_i) { index[0] = *r_i; index[1] = *c_i; // * Okay, here's how this line works. Basically, // * in order to set the entries of this RTable to // * multi-precision integers, I have to first use my own conversion // * method, LiToM, to convert the integer entry to a ALGEB structure, // * then do a callback into Maple that calls the ExToM procedure, // * which converts the results of LiToM into a Maple multi-precision // * integer. At the moment, this is the best idea I've got as to // * how to convert a GMP integer into a Maple representation in one shot. d.dag = EvalMapleProc(kv,args[2],1,LiToM(kv, *d_i, blank)); RTableAssign(kv, rtable, index, d); } } break; } } } else MapleRaiseError(kv,err); return rtable; } } /* getVector - Returns a Maple vector initalized with the data from the LinBox vector. As above, * is a hack in order to support two differing versions in Maple. Normally, would use the RTableCreate() * function to properly create the Vector, but in Maple7 this isn't supported. The code is essentially * the same as above, accept that we are building a vector rather than a Matrix * Pre-Condition: the key provided hashes to a viable vector object in the hashTable * Post-Condition: A properly initalized vector object is returned to maple */ extern "C" { ALGEB getVector(MKernelVector kv, ALGEB* args) { // Get the key, declare variables int key = MapleToInteger32(kv,args[1]), flag; char err[] = "ERROR! The associated Vector object does not exist!"; M_INT index, bound[2]; RTableData d; RTableSettings s; ALGEB rtable, blank; char MapleStatement[100] = "rtable(1.."; // Check to see if the object pointed to by key is in the type table. If not, panic std::map::iterator f_i = typeTable.find(key); if(f_i == typeTable.end() ) { MapleRaiseError(kv, err); } // Otherwise, we have our object flag = f_i->second; // Get a pointer to the actual data std::map::iterator h_i = hashTable.find(key); if(h_i != hashTable.end() ) { // Diverge over whether we are using maple 7 or 8 ( and 5 & 6) // in Maple, arg 3 is a flag indicating which method to use switch( MapleToInteger32(kv, args[3])) { // In this case, Maple 7 is being used, we have to construct a call using "EvalMapleStatement()" // to call the RTable constructor case 1: switch(flag) { case SmallV:{ // Get the vector Vectorl* V = (Vectorl*) h_i->second; Vectorl::const_iterator V_i; // Create the Maple object sprintf(MapleStatement + strlen(MapleStatement), "%d", V->size() ); strcat(MapleStatement, ", subtype=Vector[column], storage=sparse)"); rtable = kv->evalMapleStatement(MapleStatement); // populate the Maple vector w/ the entries from V above for(index = 1, V_i = V->begin(); V_i != V->end(); ++V_i, ++index) { d.dag = ToMapleInteger(kv, *V_i); // d is a union, dag is the // ALGEB union field RTableAssign(kv, rtable, &index, d); } } break; case LargeV: { // This part works the same way as above VectorI* V = (VectorI*) h_i->second; VectorI::const_iterator V_i; sprintf(MapleStatement + strlen(MapleStatement), "%d", V->size() ); strcat(MapleStatement, ",subtype=Vector[column], storage=sparse)"); rtable = kv->evalMapleStatement(MapleStatement); // Use maple callback to call the procedure from Maple that translates a gmp integer // into a large maple integer. Then put this into the Maple vector for(index = 1, V_i = V->begin(); V_i != V->end(); ++V_i, ++index) { /* Okay, here's how this line works. Basically, * in order to set the entries of this RTable to * multi-precision integers, I have to first use my own conversion * method, LiToM, to convert the integer entry to a ALGEB structure, * then do a callback into Maple that calls the ExToM procedure, * which converts the results of LiToM into a Maple multi-precision * integer. At the moment, this is the best idea I've got as to * how to convert a GMP integer into a Maple representation in one shot. */ d.dag = EvalMapleProc(kv,args[2],1,LiToM(kv, *V_i, blank)); RTableAssign(kv, rtable, &index, d); } } break; default: MapleRaiseError(kv, err); break; } break; // In this case, use the simpler RTableCreate function, rather than building a string // that must be parsed by maple case 2: kv->rtableGetDefaults(&s); // Get default settings - set datatype to Maple, // DAGTAG to anything s.subtype = 2; // Subtype set to column vector s.storage = 4; // Storage set to rectangular s.num_dimensions = 1; // What do you think this means :-) bound[0] = 1; // Set the lower bounds of each dimension to 0 switch(flag) {// Switch on data type of vector case SmallV:{ // single word integer entry vector Vectorl* V = (Vectorl*) h_i->second; Vectorl::const_iterator V_i; bound[1] = V->size(); rtable = kv->rtableCreate(&s, NULL, bound); // Create the Maple vector for(index = 1, V_i = V->begin(); V_i != V->end(); ++V_i, ++index) { d.dag = ToMapleInteger(kv, *V_i); // d is a union, dag is the // ALGEB union field RTableAssign(kv, rtable, &index, d); } } break; case LargeV: { // Same as above for multi-word integer entry vector VectorI* V = (VectorI*) h_i->second; VectorI::const_iterator V_i; bound[1] = V->size(); rtable = kv->rtableCreate(&s, NULL, bound); for(index = 1, V_i = V->begin(); V_i != V->end(); ++V_i, ++index) { /* Okay, here's how this line works. Basically, * in order to set the entries of this RTable to * multi-precision integers, I have to first use my own conversion * method, LiToM, to convert the integer entry to a ALGEB structure, * then do a callback into Maple that calls the ExToM procedure, * which converts the results of LiToM into a Maple multi-precision * integer. At the moment, this is the best idea I've got as to * how to convert a GMP integer into a Maple representation in one shot. */ d.dag = EvalMapleProc(kv,args[2],1,LiToM(kv, *V_i, blank)); RTableAssign(kv, rtable, &index, d); } } break; default: MapleRaiseError(kv, err); break; } break; // breaks case 2. // This was causing a wicked error :-) default: MapleRaiseError(kv, err); break; } } else { MapleRaiseError(kv, err); } return rtable; } } /* apply - Application function, Takes a Blackbox A and Vector X and performs the apply Ax. * There's alot of code here that essentially leads to simply calling the BlackBox's apply routine, * but there is alot that can go wrong with this call. * Pre-Condition: BlackBox & Vector objects exist in the hashtable; Blackbox data-type can handle * size of vector (ie - not trying to apply a large entry vector to a small entry Matrix * Post-Condition: New Vector is produced, put into hash table for future calls, access key returned * to Maple */ extern "C" { ALGEB apply(MKernelVector kv, ALGEB* args) { // There are probably a million better random number generators, but for the moment I use this one int BBKey = MapleToInteger32(kv,args[1]), VKey = MapleToInteger32(kv,args[2]), bflag, vflag, nKey; VectorI *tempIV, newV; Vectorl *tempiV, *vp; char MisMatchErr[] = "ERROR! The Vector elements are not in the field of the Matrix!"; char BBnoFind[] = "ERROR! The associated Blackbox object does not exist!"; char VectnoFind[] = "ERROR! The associated Vector object does not exist!"; std::map::iterator f_i; std::map::iterator h_i; // Get the random key from Maple nKey = MapleToInteger32(kv, args[3]); // Hash out the blackbox type f_i = typeTable.find(BBKey); if( f_i == typeTable.end() ) MapleRaiseError(kv, BBnoFind); else bflag = f_i->second; // Hash out the vector type f_i = typeTable.find(VKey); if( f_i == typeTable.end() ) MapleRaiseError(kv, VectnoFind); else vflag = f_i->second; // check that there isn't a type mismatch if( bflag == BlackBoxi && vflag == LargeV) // If this comes up, it means we have a large int vector, and a small int blackbox. Bad MapleRaiseError(kv, MisMatchErr); else if( bflag == BlackBoxI && vflag == SmallV) { // If this comes up, it means we have a small int vector, and a large int blackbox. Not fatal. h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFind); TriplesBBI* BB = (TriplesBBI*) h_i->second; h_i = hashTable.find(VKey); if(h_i == hashTable.end() ) MapleRaiseError(kv, VectnoFind); vp = (Vectorl*) h_i->second; // Converts the small vector into a large vector // Note, the reserve ensures there will only be at most one reallocation neccessary newV.reserve(vp->size() ); for(Vectorl::iterator i = vp->begin(); i != vp->end(); ++i) newV.push_back(integer(*i)); // Puts tempIV on the stack, so that it will persist. Also, set the correct size tempIV = new VectorI; tempIV->resize( BB->coldim() ); // Perform the apply BB->apply( *tempIV, newV); hashTable.insert(std::pair(nKey, tempIV)); typeTable.insert(std::pair(nKey, LargeV)); } else { // In this case, the types match (single word integer matrix w/ single word integer vector, // or multi-word entry w/ multi-word entry. This simplifies the code a good bit switch( bflag) { case BlackBoxi: { // Get the BlackBox h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFind); TriplesBBi* BB = (TriplesBBi*) h_i->second; // Get the Vector h_i = hashTable.find(VKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, VectnoFind); vp = (Vectorl*) h_i->second; // Perform the apply. Note, sets the temp vector's size to the columnar dimension tempiV = new Vectorl; tempiV->resize( BB->coldim() ); BB->apply(*tempiV, *vp); // Hash the results hashTable.insert(std::pair(nKey, tempiV)); typeTable.insert(std::pair(nKey,SmallV)); } break; case BlackBoxI: { // Get the BlackBox h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFind ); TriplesBBI* BB = (TriplesBBI*) h_i->second; // Get the vector h_i = hashTable.find(VKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, VectnoFind ); VectorI* Vp = (VectorI*) h_i->second; // Perform the apply tempIV = new VectorI; tempIV->resize( BB->coldim() ); BB->apply( *tempIV, *Vp); // Hash in the results hashTable.insert(std::pair(nKey, tempIV)); typeTable.insert(std::pair(nKey,LargeV)); } break; } } // If you get to this point, something has been hashed in, so return the key return ToMapleInteger(kv, (long) nKey); } } /* applyT - Application function. Takes a Blackbox A and Vector X and performs the transpose apply, * Atx. There's alot of code here that essentially leads to simply calling the BlackBox's apply routine, * but there is alot that can go wrong with this call. * Pre-Condition: BlackBox & Vector objects exist in the hashtable; Blackbox data-type can handle * size of vector (ie - not trying to apply a large entry vector to a small entry Matrix * Post-Condition: New Vector is produced, put into hash table for future calls, access key returned * to Maple */ extern "C" { ALGEB applyT(MKernelVector kv, ALGEB* args) { int BBKey = MapleToInteger32(kv,args[1]), VKey = MapleToInteger32(kv,args[2]), bflag, vflag, nKey; char misMatchErr[] = "ERROR! Vector not in field of blackbox!"; char BBnoFindErr[] = "ERROR! The associated blackbox object does not exist!"; char VectNoFindErr[] = "ERROR! The associated vector object does not exist!"; VectorI *tempIV, newV; Vectorl *tempiV, *vp; std::map::iterator f_i; std::map::iterator h_i; // Creates the new key nKey = MapleToInteger32(kv, args[3]); // Hash out the blackbox type f_i = typeTable.find(BBKey); if( f_i == typeTable.end() ) MapleRaiseError(kv,BBnoFindErr); else bflag = f_i->second; // Hash out the vector type f_i = typeTable.find(VKey); if( f_i == typeTable.end() ) MapleRaiseError(kv,VectNoFindErr); else vflag = f_i->second; // check that there isn't a type mismatch if( bflag == BlackBoxi && vflag == LargeV) // If this comes up, it means we have a large int vector, and a small int blackbox. Bad MapleRaiseError(kv, misMatchErr); else if( bflag == BlackBoxI && vflag == SmallV) { // If this comes up, it means we have a small int vector, and a large int blackbox. Not fatal. // Bail if data can't be found h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFindErr); TriplesBBI* BB = (TriplesBBI*) h_i->second; h_i = hashTable.find(VKey); if(h_i == hashTable.end() ) MapleRaiseError(kv, VectNoFindErr); // Build a large entry vector and populate it with the converted data from the small entry vector vp = (Vectorl*) h_i->second; newV.reserve( vp->size() ); for(Vectorl::iterator i = vp->begin(); i != vp->end(); ++i) newV.push_back(integer(*i)); // Puts tempIV on the stack, so that it will persist tempIV = new VectorI; tempIV->resize( BB->rowdim() ); // Perform the apply BB->applyTranspose( *tempIV, newV); hashTable.insert(std::pair(nKey, tempIV)); typeTable.insert(std::pair(nKey, LargeV)); } else { // For types that match (small Blackbox w/ small Vector or large blackbox w/ large vector) switch( bflag) { case BlackBoxi: { // Get the BlackBox h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFindErr); TriplesBBi* BB = (TriplesBBi*) h_i->second; // Get the Vector h_i = hashTable.find(VKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, VectNoFindErr); vp = (Vectorl*) h_i->second; // Perform the apply tempiV = new Vectorl; tempiV->resize( BB->rowdim() ); BB->applyTranspose( *tempiV, *vp); // Hash the results hashTable.insert(std::pair(nKey, tempiV)); typeTable.insert(std::pair(nKey,SmallV)); } break; case BlackBoxI: { // Get the BlackBox h_i = hashTable.find(BBKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, BBnoFindErr); TriplesBBI* BB = (TriplesBBI*) h_i->second; // Get the vector h_i = hashTable.find(VKey); if( h_i == hashTable.end() ) MapleRaiseError(kv, VectNoFindErr); VectorI* Vp = (VectorI*) h_i->second; // Perform the apply tempIV = new VectorI; tempIV->resize( BB->rowdim() ); BB->applyTranspose( *tempIV, *Vp); // Hash in the results hashTable.insert(std::pair(nKey, tempIV)); typeTable.insert(std::pair(nKey,LargeV)); } break; } } // If you get to this point, something has been hashed in, so return the key return ToMapleInteger(kv, (long) nKey); } } /* rank - one of the three main "solution" functions, computes the rank of a BlackBox in the hash table * Rank is computed using the rank function from the linbox repository * Pre-Condition: key provided hashes to a valid blackbox object * Post-Condition: the rank is returned to maple as an int */ extern "C" { ALGEB rank(MKernelVector kv, ALGEB* args) { int key = MapleToInteger32(kv,args[1]), flag; unsigned long result; char err[] = "ERROR! Associated blackbox object does not exist!"; TriplesBBi* BBi; TriplesBBI* BBI; std::map::iterator f_i = typeTable.find(key); std::map::iterator h_i; if(f_i == typeTable.end() ) MapleRaiseError(kv,err); else flag = f_i->second; h_i = hashTable.find(key); if( h_i != hashTable.end() ) { switch( flag ) { case BlackBoxi: BBi = (TriplesBBi*) h_i->second; return ToMapleInteger(kv, LinBox::rank(result, *BBi, BBi->field() ) ); // <- actual computation starts break; // here :-) case BlackBoxI: BBI = (TriplesBBI*) h_i->second; return ToMapleInteger(kv,LinBox::rank(result, *BBI, BBI->field() )); break; } } else MapleRaiseError(kv,err); } } /* det - Another major "application" function, this computes the determinant of the blackbox mod the * prime using the LinBox determinant methods, of which I know very little. Look at the * documentation in the solutions directory for more details. * Pre-condition: Key hashes to a valid BlackBox object * Post-condition: The modular determinant of the blackbox is returned as a maple integer */ extern "C" { ALGEB det(MKernelVector kv, ALGEB* args) { char err[] = "ERROR! Associated blackbox object does not exist!"; int key = MapleToInteger32(kv,args[1]), flag; std::map::iterator f_i; std::map::iterator h_i; long resulti; integer resultI; ALGEB blank; TriplesBBi *BBi; TriplesBBI *BBI; // Get the blackbox f_i = typeTable.find(key); if( f_i == typeTable.end() ) MapleRaiseError(kv,err); else flag = f_i->second; // If it's there h_i = hashTable.find(key); if( h_i != hashTable.end() ) { switch( flag ) { // switch on the type case BlackBoxi: BBi = (TriplesBBi*) h_i->second; return ToMapleInteger(kv, LinBox::det(resulti, *BBi, BBi->field() ) ); break; case BlackBoxI: BBI = (TriplesBBI*) h_i->second; return LiToM(kv, LinBox::det(resultI, *BBI, BBI->field() ), blank); break; } } else MapleRaiseError(kv, err); } } /* minpoly - Compute the minimal polynomial of the BlackBox matrix using linbox's minpoly solution. * I have no clue how it works, just that it does. This one is slightly more complicated than the * other two above * Pre-condition: Key maps to a valid BlackBox object in the hashTable * Post-condition: A Maple list of the polynomial coefficients, lowest degree first, is returned */ extern "C" { ALGEB minpoly(MKernelVector kv, ALGEB* args) { int i; ALGEB retlist, blank; char err[] = "ERROR! Associated blackbox object does not exist!"; int key = MapleToInteger32(kv,args[1]), flag; std::map::iterator f_i; std::map::iterator h_i; // Get the data from the hash table f_i = typeTable.find(key); if( f_i == typeTable.end() ) MapleRaiseError(kv,err); else flag = f_i->second; h_i = hashTable.find(key); if(h_i != hashTable.end() ) { // We've got data switch( flag ) { // Getting the minimal polynomial is rather complicated, so both instances of this code were // wrapped up inside a block, to cut down at the clutter at the top of this function. // First declares a vector of the proper type and casts the pointer. Then computes the minimal // polynomial. It then builds the proper Maple list structure for this application. case BlackBoxi: { Vectorl mpreturn; Vectorl::iterator mp_i; TriplesBBi* BB = (TriplesBBi*) h_i->second; LinBox::minpoly( mpreturn, *BB, BB->field() ); retlist = MapleListAlloc(kv, mpreturn.size() ); for(i = 1, mp_i = mpreturn.begin(); mp_i != mpreturn.end(); ++mp_i, ++i) MapleListAssign(kv, retlist, i, ToMapleInteger(kv, *mp_i)); } break; case BlackBoxI: { VectorI mpreturn; VectorI::iterator mp_i; TriplesBBI* BB = (TriplesBBI*) h_i->second; LinBox::minpoly( mpreturn, *BB, BB->field() ); retlist = MapleListAlloc(kv, mpreturn.size()); for(i = 1, mp_i = mpreturn.begin(); mp_i != mpreturn.end(); ++mp_i, ++i) MapleListAssign(kv, retlist, i, LiToM(kv, *mp_i, blank)); } break; } } else MapleRaiseError(kv,err); return retlist; } } /* LiToM - Converts from a GMP integer to a Maple list of word-size chunks * these chunks are passed back into Maple and converted by into maple represented integers * Pre-Condition: In is an initialized GMP number, Out can be initialized (or re-initialized) * Post-Condition: Out is an initalized maple integer containing the value of In */ ALGEB & LiToM(MKernelVector & kv, const integer & In, ALGEB & Out) { // If we get lucky, this thing fits in one word, which is good, so we just // straight convert it if(In.size() == 1) Out = ToMapleInteger(kv, Integer2long(In) ); else { // Otherwise, create a list, and for each entry, add a word-sized chunk. Out = MapleListAlloc(kv, In.size() ); for(size_t i = 1; i <= In.size(); ++i) MapleListAssign(kv,Out,i,ToMapleInteger(kv,In[i-1])); } // Return the result for redundancy return Out; } /* MtoLI - conversion between long integers passed from maple into gmp integers * Uses Horners method. * Pre-Condition: Out is un-initialized (or can be re-initialized), In is either an int or a * list * Post-Condition: Out contains a GMP version of In. */ integer & MtoLI(MKernelVector & kv, integer & Out, const ALGEB &In) { // We just need 1 base. By default, Maple breaks all integers of a certain size up into // mod 10000 chunks. The chunks are put into a maple list, and then passed into code static integer base(10000); int num, i; // This could be an int if( IsMapleInteger32(kv,In) ) // if so, just convert it Out = integer(MapleToInteger32(kv, In)); else { // else, get the number of chunks, and convert the highest chunk of In num = MapleToInteger32(kv, MapleListSelect(kv, In, 1) ); Out = integer(MapleToInteger32(kv, MapleListSelect(kv,In, num) ) ); for(i = num - 1; i > 1; --i) { // For each additional chunk, multiply Out by the base, and add in the new chunk Out *= base; Out += MapleToInteger32(kv, MapleListSelect( kv, In, i)); } } // redundant return Out; } // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple-old/lbmaple.mpl.head000066400000000000000000000010701347646240000220430ustar00rootroot00000000000000module LinBox() local create, destroy, lbXapply, lbXapplyT, lbXinitBB, lbXinitV, lbXrank, lbXdet, lbXmp, lbXssolve, lbXstart1, lbXstart2, lbXend, lbXgetMatrix, lbXkillMatrix, lbXgetVector, lbXkillVector, lbXgetEntryVector, lbXgetEntryMatrix, ExToMap, MapToEx, libname, ObjKeyCount; export LinBoxBB, LBrank, LBdet, LBminpoly, LBapply, LBapplyTranspose, LinBoxV; # LBDiag, LBSolve; option package, load=create, unload=destroy; description "Maple interface to LinBox methods & functions"; create := proc() global `type/LinBoxBB`, `type/LinBoxV`; libname :=linbox-1.6.3/interfaces/maple-old/lbmaple.mpl.tail000066400000000000000000000225301347646240000220770ustar00rootroot00000000000000 lbXend := define_external('End', MAPLE,LIB=libname); lbXapply := define_external('apply', MAPLE,LIB=libname); lbXapplyT := define_external('applyT', MAPLE,LIB=libname); lbXinitV := define_external('initV', MAPLE,LIB=libname); # lbXdiag := define_external('diag', MAPLE,LIB=libname); lbXinitBB := define_external('initBB', MAPLE,LIB=libname); lbXrank := define_external('rank',MAPLE,LIB=libname); lbXdet := define_external('det', MAPLE,LIB=libname); lbXmp := define_external('minpoly', MAPLE,LIB=libname); # lbXssolve := define_external('ssolve', MAPLE,LIB=libname); lbXgetMatrix := define_external('getMatrix', MAPLE,LIB=libname); lbXgetVector := define_external('getVector',MAPLE,LIB=libname); lbXkillMatrix := define_external('killMatrix', MAPLE,LIB=libname); lbXkillVector := define_external('killVector', MAPLE,LIB=libname); # lbXgetEntryVector := define_external('getEntryVector',MAPLE,LIB=libname); # lbXgetEntryMatrix := define_external('getEntryMatrix',MAPLE,LIB=libname); `type/LinBoxBB` := `module`(getMatrix) ; `type/LinBoxV` := `module`(getVector) ; ObjKeyCount := 0; end proc; create(); destroy := proc() lbXend(); end proc; ExToMap := proc() local b0, s, r, A, i; if type(args[1], integer) then args[1]; else A := args[1]; s := A[nops(A)]; b0 := 2^kernelopts(wordsize); for i from nops(A) - 1 to 1 do s := s * b0 + A[i]; od; s fi; end proc; MapToEx := proc(num::integer) local r; if num < kernelopts(maximmediate) then num; else r := [disassemble(addressof(num))]; subsop(1=nops(r),r); fi; end proc; LinBoxBB := proc( ) local k, f, D, R, C, rows, cols, s, nnz, M, p, check; if type(args[1], posint) then if nargs = 1 then k := args[1]; elif type(args[2], posint) and type(args[3], posint) and type(args[4], procedure) then p := args[1]; rows := args[2]; cols := args[3]; ObjKeyCount := ObjKeyCount + 1; k := ObjKeyCount; check := x -> evalb(rhs(x) <> 0); s := select(check, {seq(seq( (i,j)=apply(args[4],i,j), i=1..rows),j=1..cols)} ); # Pick out all the non-zero's nnz := nops(s); D := [seq(rhs(s[i]),i=1..nnz)]; R := [seq(lhs(s[i])[1], i=1..nnz)]; C := [seq(lhs(s[i])[2], i=1..nnz)]; lbXinitBB(2, k, p, D, R, C, rows, cols, nnz); elif type(args[2], Matrix) then ObjKeyCount := ObjKeyCount + 1; k := ObjKeyCount; M := args[2]; p := args[1]; # if p = 0 then # ... insert special code for integer ring # computation, as opposed to finite field computation if op(3,M)[1] = 'datatype=integer[4]' then lbXinitBB(1, k, p, M); elif p < kernelopts(maximmediate) then s := op(2,M); nnz := nops(s); rows := op(1,M)[1]; cols := op(1,M)[2]; D := [seq(rhs(s[i]),i=1..nnz)]; R := [seq(lhs(s[i])[1],i=1..nnz)]; C := [seq(lhs(s[i])[2],i=1..nnz)]; lbXinitBB(2, k, p, D, R, C, rows, cols, nnz); else s := op(2,M); nnz := nops(s); rows := op(1,M)[1]; cols := op(1,M)[2]; D := [seq(MapToEx(rhs(s[i])),i=1..nnz)]; R := [seq(lhs(s[i])[1],i=1..nnz)]; C := [seq(lhs(s[i])[2],i=1..nnz)]; lbXinitBB(3, k, MapToEx(p), D, R, C, rows, cols, nnz); fi; else error "Wrong number or type of parameters!"; fi; else error "Wrong number or type of parameters!"; fi; module() local destruct; export getMatrix, key; # getEntry option unload = destruct; description "Maple Container for LinBox blackbox"; key := k; getMatrix := proc() # Implents difference between Maple 7 & 6(8) # Many thanks to MapleSoft for pointing out the need for a workaround # for Maple v7 # If you are running v7, run the "exceptional" function # otherwise, run the normal function if `Maple 7` = substring(kernelopts(version),1..7) then lbXgetMatrix(k, ExToMap , 1); else lbXgetMatrix(k, ExToMap , 2); fi; end proc; # getEntry := proc(i::posint, j::posint) # lbXgetEntryMatrix(key, i, j); # end proc; destruct := proc() lbXkillMatrix(k): end proc; end module end proc; LinBoxV := proc() local k, index, L, mode, V, p, t, i, f; if type(args[1], posint) then # two possibilities: Vector from # a existing vector (key), or # build one from a proc if nargs = 1 then k := args[1]; elif type(args[2], 'procedure') then ObjKeyCount := ObjKeyCount + 1; k := ObjKeyCount; mode := 1; f := args[2]; p := proc(n) local r; r := MapToEx(apply(f, n)); if type(r, list) then mode := 2; fi; r end proc; L := [seq(p(t), t=1..args[1])]; lbXinitV(mode, k, L, args[1]); else error "Wrong number or type of parameters!"; end if; elif type(args[1], Vector) then # No key, we're translating from a vector ObjKeyCount := ObjKeyCount + 1; k := ObjKeyCount; V := args[1]; p := proc(n) local r; r := MapToEx(rhs(n)); if type(r,list) then mode := 4; fi; r end proc; mode := 3; t := sort(op(table(op(2,V))), (x,y)->( lhs(x) < lhs(y) ) ); index := map(lhs, t); L := map(p, t); lbXinitV(mode, k, index, L, nops(index), op(1,V) ); elif type( args[1], list) then ObjKeyCount := ObjKeyCount + 1; k := ObjKeyCount; lbXinitV(1,k, args[1], nops(args[1]) ); else error "Wrong number or type of parameters!"; fi; module() local destruct; export getVector, key; #getEntry description "Maple container for LinBox Vector"; option unload = destruct; key := k; destruct := proc() lbXkillVector(key); end proc; # getEntry := proc(i::posint) # lbXgetEntryVector(key, i); # end proc; getVector := proc() # Once again, split b/c of difference between Maple 7 and 6(8) # For maple 7, run the special getMatrix function # otherwise, run the normal function if `Maple 7` = substring(kernelopts(version),1..7) then lbXgetVector(key, ExToMap, 1); else lbXgetVector(key, ExToMap, 2); fi; end proc; end module end proc; LBapply := proc() local M, V, R, f; # if Matrix is not LinBox BB, make it so if type(args[1], posint) and type(args[2], Matrix) then if type(args[3], Vector) then M := LinBoxBB(args[1], args[2]); V := LinBoxV(args[3]); f := 1; elif type(args[3], LinBoxV) then M := LinBoxBB(args[1], args[2]); V := args[3]; f := 2; else error "Wrong number or type of parameters!"; fi; elif type(args[1], LinBoxBB) then M := args[1]; if type(args[2], Vector) then V := LinBoxV(args[2]); f := 1; elif type(args[2], LinBoxV) then V := args[2]; f := 2; fi; else error "Wrong number or type of parameters!"; fi; ObjKeyCount := ObjKeyCount + 1; lbXapply(M:-key, V:-key, ObjKeyCount ); if f = 1 then # if the user sends the vector # as a maple type, return # as that type R := LinBoxV(ObjKeyCount); R:-getVector() else LinBoxV(ObjKeyCount) end if; end proc; LBapplyTranspose := proc() local M, V, R, f; if type(args[1], posint) and type(args[2], Matrix) then if type(args[3], Vector) then M := LinBoxBB(args[1], args[2]); V := LinBoxV(args[3]); f := 1; elif type(args[3], LinBoxV) then M := LinBoxBB(args[1], args[2]); V := args[3]; f := 2; else error "Wrong number or type of parameters!"; fi; elif type(args[1], LinBoxBB) then M := args[1]; if type(args[2], Vector) then V := LinBoxV(args[2]); f := 1; elif type(args[2], LinBoxV) then V := args[2]; f := 2; else error "Wrong number or type of parameters!"; fi; else error "Wrong number or type of paramters!"; fi; ObjKeyCount := ObjKeyCount + 1; lbXapplyT(M:-key, V:-key, ObjKeyCount ); if f = 1 then # if the user sends the vector # as a maple type, return # as that type R := LinBoxV(ObjKeyCount); R:-getVector(); else LinBoxV(ObjKeyCount); fi; end proc; LBrank := proc() local M; if type(args[1], LinBoxBB) then M := args[1]; elif type(args[1], posint) and type(args[2], Matrix) then M := LinBoxBB(args[1], args[2]); else error "Wrong number or type of parameters!"; fi; lbXrank(M:-key); end proc; LBdet := proc() local M; if type(args[1], LinBoxBB) then M := args[1]; elif type(args[1], posint) and type(args[2], Matrix) then M := LinBoxBB(args[1], args[2]); else error "Wrong number or type of parameters!"; fi; lbXdet(M:-key); end proc; # minpoly function. If no variable name is given, then a list # containg the coefficients in sorted order, from degree lowest to # highest is returned (note this is a dense coefficient vector, there # are zeros here LBminpoly := proc() local L, i, x, M; if type(args[1], LinBoxBB) then M := args[1]; if nargs = 1 then x := true; elif nargs = 2 and type(args[2],name) then x := args[2]; else error "Wrong number or type of parameters!"; fi; elif type(args[1],posint) and type(args[2], Matrix) then M := LinBoxBB(args[1], args[2]); if nargs = 2 then x := true; elif nargs = 3 and type(args[3], name) then x := args[3]; else error "Wrong number or type of parameters!"; fi; else error "Wrong number or type of parameters!"; fi; L := lbXmp(M:-key); L := [seq(ExToMap(L[i]),i=1..nops(L))]; if type(x, boolean) then L else add(ExToMap(L[i])*x^(i-1),i=1..nops(L)) end if; end proc; end module: with(LinBox); linbox-1.6.3/interfaces/maple/000077500000000000000000000000001347646240000162435ustar00rootroot00000000000000linbox-1.6.3/interfaces/maple/Makefile.am000066400000000000000000000030331347646240000202760ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== if LINBOX_HAVE_MAPLE pkgincludesubdir=$(includedir)/interfaces/maple/new AM_CPPFLAGS =-I$(top_srcdir) -I. -I../../linbox AM_CXXFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -I../driver $(NTL_CFLAGS) $(MAPLE_CFLAGS) lib_LTLIBRARIES=liblbmaple.la liblbmaple_la_SOURCES= lb-maple.C liblbmaple_la_LDFLAGS= $(NTL_LIBS) $(MAPLE_LIBS) $(top_srcdir)/interfaces/driver/liblbdriver.la -Wl,-zmuldefs $(LDFLAGS) $(LINBOX_LDFLAGS) pkginclude_HEADERS =lb-maple.h lb-maple-utilities.h install-data-local: sh lb-maple-path.sh "$(libdir)/liblbmaple.so" $(INSTALL_DATA) lb-maple.mpl $(libdir)/lb-maple.mpl install-data-hook: cd $(libdir) && \ $(MAPLE_HOME)/bin/maple lb-maple.mpl 2>&1 > /dev/null endif linbox-1.6.3/interfaces/maple/lb-maple-path.pl000066400000000000000000000000741347646240000212240ustar00rootroot00000000000000#!/usr/bin/perl $sentence= s/lbpathvalue/lbpath:=$ARGV[1];linbox-1.6.3/interfaces/maple/lb-maple-path.sh000077500000000000000000000002311347646240000212210ustar00rootroot00000000000000#!/usr/bin/sh if test -r "lb-maple.mpl.bak"; then mv lb-maple.mpl.bak lb-maple.mpl fi sed -e "s|lbpathvalue|lbpath:=\"$1\";|" -i.bak lb-maple.mpl linbox-1.6.3/interfaces/maple/lb-maple-utilities.h000066400000000000000000000472311347646240000221250ustar00rootroot00000000000000/* lb-maple-utilities.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_maple_utilities_H #define __LINBOX_lb_maple_utilities_H #include "linbox/linbox-config.h" #include extern "C" { #include #include #include "mpltable.h" } //#define __LB_PRINT_GC #define __LINBOX_GC extern "C" { #ifdef __LINBOX_MAPLE_GMP_ACCESS extern void * (*__gmp_allocate_func)(size_t); extern void * (*__gmp_reallocate_func)(void*, size_t,size_t); extern void (*__gmp_free_func)(void*, size_t); static void * (*LB_GMP_ALLOC)(size_t) = __gmp_allocate_func; static void * (*LB_GMP_REALLOC)(void*,size_t,size_t) = __gmp_reallocate_func; static void (*LB_GMP_FREE)(void*,size_t) = __gmp_free_func; #endif void LB_GMP_SET(){ #ifdef __LINBOX_MAPLE_GMP_ACCESS mp_set_memory_functions(NULL,NULL,NULL); #endif } void LB_GMP_RESTORE() { #ifdef __LINBOX_MAPLE_GMP_ACCESS mp_set_memory_functions(LB_GMP_ALLOC,LB_GMP_REALLOC, LB_GMP_FREE); #endif } /********************************* * Raising LinBox error in Maple * *********************************/ static void lbRaiseError(MKernelVector kv, lb_runtime_error &t){ std::ostringstream out; out<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple/lb-maple.C000066400000000000000000000760301347646240000200460ustar00rootroot00000000000000/* lb-maple.C * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_maple_C #define __LINBOX_lb_maple_C #include #include #include #include #include "linbox/util/timer.h" extern "C"{ #include } extern "C" { /*********************************** * Initializer of LinBox interface * ***********************************/ ALGEB lbStart (MKernelVector kv, ALGEB *argv){ //MaplePrintf(kv, "LinBox driver initialization...\n"); try {LinBoxInit();} catch(lb_runtime_error &t){lbRaiseError(kv, t);} lb_kv = kv; return ToMapleNULL(kv); } ALGEB lbStop (MKernelVector kv, ALGEB *argv){ //MaplePrintf(kv, "LinBox driver termination..."); std::cout<<"terminating LinBox..."; //try{LinBoxEnd();} //catch(lb_runtime_error &t){lbRaiseError(kv, t);} std::cout<<"done\n"; return ToMapleNULL(kv); } /************************************** * Information from the LinBox driver * **************************************/ ALGEB lbDataInfo (MKernelVector kv, ALGEB *argv){ std::ostringstream out; LinBoxDataInfo(out); size_t l=out.str().length(); char* msg = new char[l]; strncpy(msg, out.str().c_str(), l); MaplePrintf(kv, msg); delete msg; return ToMapleNULL(kv); } /****************************************** ****************************************** *** Function to create LinBox's object *** ****************************************** ******************************************/ /********************************** * Interface to create an element * **********************************/ ALGEB lbCreateElement (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } const DomainKey *key = &MapleToDomainKey(kv, argv[1]); try { LB_GMP_SET(); const EltKey *k = &createElement(*key); LB_GMP_RESTORE(); return ElementKeyToMaple(kv, *k); } catch ( lb_runtime_error &t ) { lbRaiseError(kv, t); return ToMapleNULL(kv); } } /******************************** * Interface to create a domain * ********************************/ ALGEB lbCreateDomain (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); const DomainKey *key; try { if (argc < 1){ LB_GMP_SET(); key = &createDomain(0); LB_GMP_RESTORE(); return DomainKeyToMaple(kv, *key); } //LinBox::integer *p = GMPMapleToLinBox(kv, argv[1]); LinBox::integer p; GMPMapleToLinBox(p, kv, argv[1]); if (argc == 1){ LB_GMP_SET(); key = &createDomain(p); LB_GMP_RESTORE(); return DomainKeyToMaple(kv, *key); } if (argc == 2){ LB_GMP_SET(); key = &createDomain(p, MapleToString(kv, argv[2])); LB_GMP_RESTORE(); return DomainKeyToMaple(kv, *key); } if (argc > 2){ MapleRaiseError(kv, "wrong number of argument"); return ToMapleNULL(kv); } } catch ( lb_runtime_error &t ) { lbRaiseError(kv, t); return ToMapleNULL(kv);} return ToMapleNULL(kv); } /********************************** * Interface to create a blackbox * **********************************/ ALGEB lbCreateBlackboxFromMatrix(MKernelVector kv, ALGEB A, const LinBox::integer &p){ RTableSettings setting; RTableGetSettings(kv,&setting,A); size_t m,n; m = RTableUpperBound(kv, A, 1); n = RTableUpperBound(kv, A, 2); std::stringstream *buffer= new std::stringstream();//std::string(buffer_data, m*n)); //Timer chrono; //chrono.start(); if (setting.storage == RTABLE_RECT) DenseMatrixToBuffer(kv, A, *buffer, m, n, setting); else if (setting.storage == RTABLE_SPARSE) SparseMatrixToBuffer(kv, A, *buffer, m, n, setting); else MapleRaiseError(kv, "Matrix storage must be either dense or sparse"); //chrono.stop(); //std::ofstream FILE("MAPLE_FILE.TXT"); //FILE<str()<<"\n"; //FILE.close(); //std::cout<<"buffering in <- : "< : "< 4)){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } try { if (argc == 1){ if (IsMapleRTable(kv, argv[1])) return lbCreateBlackboxFromMatrix(kv, argv[1], LinBox::integer(0)); } if (argc == 2){ if (IsMapleInteger(kv, argv[1]) && IsMapleRTable(kv, argv[2])){ //LinBox::integer *p = GMPMapleToLinBox(kv, argv[1]); LinBox::integer p; GMPMapleToLinBox(p, kv, argv[1]); LB_GMP_SET(); ALGEB ret = lbCreateBlackboxFromMatrix(kv, argv[2], p); LB_GMP_RESTORE(); return ret; } if (IsMapleDomainKey(kv, argv[1]) && IsMapleString(kv, argv[2])) { const DomainKey *k = &MapleToDomainKey(kv, argv[1]); std::ifstream in(MapleToString(kv, argv[2])); LB_GMP_SET(); key = &createBlackbox(*k, in); LB_GMP_RESTORE(); return BlackboxKeyToMaple(kv, *key); } } if (argc == 3){ if (IsMapleDomainKey(kv, argv[1])){ const DomainKey *k = &MapleToDomainKey(kv, argv[1]); if (IsMapleInteger(kv, argv[2])){ LB_GMP_SET(); key = &createBlackbox(*k, MapleToInteger32(kv, argv[2]), MapleToInteger32(kv, argv[3])); LB_GMP_RESTORE(); } else { std::ifstream in( MapleToString(kv, argv[2])); LB_GMP_SET(); key = &createBlackbox(*k, in, MapleToString(kv, argv[3])); LB_GMP_RESTORE(); } return BlackboxKeyToMaple(kv, *key); } } if (argc == 4){ if (IsMapleDomainKey(kv, argv[1])) { const DomainKey *k = &MapleToDomainKey(kv, argv[1]); LB_GMP_SET(); key = &createBlackbox(*k, MapleToInteger32(kv, argv[2]), MapleToInteger32(kv, argv[3]), MapleToString(kv, argv[4])); LB_GMP_RESTORE(); return BlackboxKeyToMaple(kv, *key); } } MapleRaiseError(kv, "wrong types of arguments"); } catch ( lb_runtime_error &t ) { lbRaiseError(kv, t); } return ToMapleNULL(kv); } /******************************** * Interface to create a vector * ********************************/ ALGEB lbCreateVectorFromVector(MKernelVector kv, ALGEB V, const LinBox::integer &p){ LB_GMP_SET(); const DomainKey *Dkey = &createDomain(p); LB_GMP_RESTORE(); std::stringstream buffer; RTableSettings setting; RTableData tmp; RTableGetSettings(kv,&setting,V); size_t n; n = RTableUpperBound(kv, V, 1); buffer< 4)){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } try { if (argc == 1){ if (IsMapleRTable(kv, argv[1])) return lbCreateVectorFromVector(kv, argv[1], LinBox::integer(0)); } if (argc == 2){ if (IsMapleInteger(kv, argv[1]) && IsMapleRTable(kv, argv[2])){ //LinBox::integer *p = GMPMapleToLinBox(kv, argv[1]); LinBox::integer p; GMPMapleToLinBox(p, kv, argv[1]); LB_GMP_SET(); ALGEB ret = lbCreateVectorFromVector(kv, argv[2], p); LB_GMP_RESTORE(); return ret; } if ( IsMapleDomainKey(kv, argv[1]) && IsMapleInteger(kv, argv[2])) { const DomainKey *k = &MapleToDomainKey(kv, argv[1]); LB_GMP_SET(); key = &createVector(*k, MapleToInteger32(kv, argv[2])); LB_GMP_RESTORE(); return VectorKeyToMaple(kv, *key); } } if (argc == 3){ if ( IsMapleDomainKey(kv, argv[1]) && IsMapleInteger(kv, argv[2]) && IsMapleString(kv, argv[3])){ const DomainKey *k = &MapleToDomainKey(kv, argv[1]); LB_GMP_SET(); key = &createVector(*k, MapleToInteger32(kv, argv[2]), MapleToString(kv, argv[3])); LB_GMP_RESTORE(); return VectorKeyToMaple(kv, *key); } } MapleRaiseError(kv, "wrong types of arguments"); } catch ( lb_runtime_error &t ) { lbRaiseError(kv, t); } return ToMapleNULL(kv); } /*************************** *************************** *** Domain's Functions **** *************************** ***************************/ /****************************** * Interface to copy a Domain * *****************************/ ALGEB lbCopyDomain (MKernelVector kv, ALGEB *argv){ try { const DomainKey *key = &MapleToDomainKey(kv, argv[1]); return DomainKeyToMaple(kv, copyDomain(*key)); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /***************************************************** * Interface to change globally the prime field type * *****************************************************/ ALGEB lbSetPrimeField (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } if (!IsMapleString(kv, argv[1])){ MapleRaiseError(kv, "String expected for 1st argument"); return ToMapleNULL(kv); } setPrimeField(MapleToString(kv, argv[1])); return ToMapleNULL(kv); } /******************************************************** * Interface to change globally the rational field type * ********************************************************/ ALGEB lbSetRationalField (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } if (!IsMapleString(kv, argv[1])){ MapleRaiseError(kv, "String expected for 1s argument"); return ToMapleNULL(kv); } setRationalField(MapleToString(kv, argv[1])); return ToMapleNULL(kv); } /****************************************************** * Interface to change globally the integer ring type * ******************************************************/ ALGEB lbSetIntegerRing (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } if (!IsMapleString(kv, argv[1])){ MapleRaiseError(kv, "String expected for 1s argument"); return ToMapleNULL(kv); } setIntegerRing(MapleToString(kv, argv[1])); return ToMapleNULL(kv); } /***************************** ***************************** *** Blackbox's Functions **** ***************************** *****************************/ /******************************** * Interface to copy a blackbox * ********************************/ ALGEB lbCopyBlackbox (MKernelVector kv, ALGEB *argv){ try { const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); return BlackboxKeyToMaple(kv, copyBlackbox(*key)); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************ * Interface to get the dimension of a blackbox * ************************************************/ ALGEB lbGetBlackboxDimension (MKernelVector kv, ALGEB *argv){ // not yet : pb with return value ? return ToMapleNULL(kv); } /******************************************* * Interface to write a blackbox in a file * *******************************************/ ALGEB lbWriteBlackbox (MKernelVector kv, ALGEB *argv){ try { std::ofstream os(MapleToString(kv, argv[2])); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); writeBlackbox(*key, os); return ToMapleNULL(kv); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************** * Interface to fill a blackbox with random value * **************************************************/ ALGEB lbSetBlackboxAtRandom (MKernelVector kv, ALGEB *argv){ try { const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); setBlackboxAtRandom(*key); return argv[1]; } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /****************************************************** * Interface to rebind a blackbox over another domain * ******************************************************/ ALGEB lbRebindBlackbox (MKernelVector kv, ALGEB *argv){ try { const DomainKey *Dkey = &MapleToDomainKey(kv, argv[1]);; const BlackboxKey *Bkey = &MapleToBlackboxKey(kv, argv[2]); rebindBlackbox(*Bkey, *Dkey); return ToMapleNULL(kv); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************** * Interface to change globally the blackbox type * **************************************************/ ALGEB lbSetBlackbox (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of parameter in lbSetBlackbox"); return ToMapleNULL(kv); } if (!IsMapleString(kv, argv[1])){ MapleRaiseError(kv, "lbSetBlackbox expects a string as parameter"); return ToMapleNULL(kv); } setBlackbox(MapleToString(kv, argv[1])); return ToMapleNULL(kv); } /*************************** *************************** *** Vector's Functions **** *************************** ***************************/ /****************************** * Interface to copy a vector * ******************************/ ALGEB lbCopyVector (MKernelVector kv, ALGEB *argv){ try { const VectorKey *key = &MapleToVectorKey(kv, argv[1]); return VectorKeyToMaple(kv, copyVector(*key)); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /********************************************** * Interface to get the dimension of a vector * **********************************************/ ALGEB lbGetVectorDimension (MKernelVector kv, ALGEB *argv){ try { const VectorKey *key = &MapleToVectorKey(kv, argv[1]); size_t n = getVectorDimension(*key); return ToMapleInteger(kv, n); } catch (lb_runtime_error &t) {lbRaiseError(kv, t);} return ToMapleNULL(kv); } /***************************************** * Interface to write a vector in a file * *****************************************/ ALGEB lbWriteVector (MKernelVector kv, ALGEB *argv){ try { std::ofstream os(MapleToString(kv, argv[2])); const VectorKey *key = &MapleToVectorKey(kv, argv[1]); writeVector(*key, os); return ToMapleNULL(kv); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************ * Interface to fill a vector with random value * ************************************************/ ALGEB lbSetVectorAtRandom (MKernelVector kv, ALGEB *argv){ try { const VectorKey *key = &MapleToVectorKey(kv, argv[1]); setVectorAtRandom(*key); return argv[1]; } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /****************************************************** * Interface to rebind a vector over another domain * ******************************************************/ ALGEB lbRebindVector (MKernelVector kv, ALGEB *argv){ try { const DomainKey *Dkey = &MapleToDomainKey(kv, argv[1]);; const VectorKey *Bkey = &MapleToVectorKey(kv, argv[2]); rebindVector(*Bkey, *Dkey); return argv[2]; } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************ * Interface to change globally the vector type * ************************************************/ ALGEB lbSetVector (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); if (argc != 1){ MapleRaiseError(kv, "wrong number of arguments"); return ToMapleNULL(kv); } if (!IsMapleString(kv, argv[1])){ MapleRaiseError(kv, "String expected as 1st argument"); return ToMapleNULL(kv); } setVector(MapleToString(kv, argv[1])); return ToMapleNULL(kv); } /******************************* ******************************* *** Polynomial's Functions **** ******************************* *******************************/ /*********************************** * Interface to write a polynomial * ***********************************/ ALGEB lbWritePolynomial (MKernelVector kv, ALGEB *argv){ try { std::ofstream os(MapleToString(kv, argv[2])); const VectorKey *key = &MapleToVectorKey(kv, argv[1]); writePolynomial(*key, os); return ToMapleNULL(kv); } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /********************************* ********************************* **** list of LinBox solutions *** ********************************* *********************************/ /****************************************************** * Interface to compute the determinant of a blackbox * ******************************************************/ ALGEB lbDeterminant (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); try{ if (argc == 1){ LB_GMP_SET(); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); const EltKey *k = &lb_determinant(*key); LB_GMP_RESTORE(); return ElementKeyToMaple(kv, *k); } if (argc == 2){ LB_GMP_SET(); const EltKey *k = &MapleToElementKey(kv, argv[1]); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[2]); lb_determinant(*k, *key); LB_GMP_RESTORE(); return ToMapleNULL(kv); } } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /*********************************************** * Interface to compute the rank of a blackbox * ***********************************************/ ALGEB lbRank (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); try{ if (argc == 1){ LB_GMP_SET(); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); size_t r = lb_rank(*key); LB_GMP_RESTORE(); return ToMapleInteger(kv, r); } if (argc == 2){ LB_GMP_SET(); size_t *r = (size_t*) MapleToPointer(kv, argv[1]); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[2]); lb_determinant(*r, *key); LB_GMP_RESTORE(); return ToMapleNULL(kv); } } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************************************* * Interface to compute the minimal polynomial of a blackbox * *************************************************************/ ALGEB lbMinpoly (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); try{ if (argc == 1){ LB_GMP_SET(); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); const PolynomialKey *k = &lb_minpoly(*key); LB_GMP_RESTORE(); return PolynomialKeyToMaple(kv, *k); } if (argc == 2){ LB_GMP_SET(); const PolynomialKey *k = &MapleToPolynomialKey(kv, argv[1]); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[2]); lb_minpoly(*k, *key); LB_GMP_RESTORE(); return ToMapleNULL(kv); } } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /******************************************************************** * Interface to compute the characteristic polynomial of a blackbox * ********************************************************************/ ALGEB lbCharpoly (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); try{ if (argc == 1){ LB_GMP_SET(); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[1]); const PolynomialKey *k = &lb_charpoly(*key); LB_GMP_RESTORE(); return PolynomialKeyToMaple(kv, *k); } if (argc == 2){ LB_GMP_SET(); const PolynomialKey *k = &MapleToPolynomialKey(kv, argv[1]); const BlackboxKey *key = &MapleToBlackboxKey(kv, argv[2]); lb_charpoly(*k, *key); LB_GMP_RESTORE(); return ToMapleNULL(kv); } } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /************************************** * Interface to solve a linear system * **************************************/ ALGEB lbSolve (MKernelVector kv, ALGEB *argv){ M_INT argc = MapleNumArgs(kv, (ALGEB) argv); try{ if (argc == 2){ LB_GMP_SET(); const BlackboxKey *Bkey = &MapleToBlackboxKey(kv, argv[1]); const VectorKey *Vkey = &MapleToVectorKey(kv, argv[2]); const VectorKey *Rkey = &lb_solve(*Bkey, *Vkey); LB_GMP_RESTORE(); return VectorKeyToMaple(kv, *Rkey); } if (argc == 3){ LB_GMP_SET(); const VectorKey *Rkey = &MapleToVectorKey(kv, argv[1]); const BlackboxKey *Bkey = &MapleToBlackboxKey(kv, argv[2]); const VectorKey *Vkey = &MapleToVectorKey(kv, argv[3]); lb_solve(*Rkey, *Bkey, *Vkey); LB_GMP_RESTORE(); return ToMapleNULL(kv); } } catch (lb_runtime_error &t) { lbRaiseError(kv, t);} return ToMapleNULL(kv); } /******************************************* ******************************************* **** Conversion from LinBox to Maple **** ******************************************* *******************************************/ /*********************************************************** * API to convert a domain element to its Maple equivalent * ***********************************************************/ ALGEB lbConvertElement (MKernelVector kv, ALGEB *argv){ try { const EltKey *k = &MapleToElementKey(kv, argv[1]); SerialElement s; SerializeElement(s, *k); if (strcmp(s.type, "integer")==0) return LinBoxToGMPMaple(kv, s.list.front()); else if (strcmp(s.type,"rational")==0){ ALGEB n,d,f; n = LinBoxToGMPMaple(kv, s.list.front()); d = LinBoxToGMPMaple(kv, s.list.back()); f = EvalMapleStatement(kv,"Fraction:"); return EvalMapleProc(kv, f, 2, n, d); } else MapleRaiseError(kv, "LinBox internal error (serializing element problem)"); } catch (lb_runtime_error &t) {lbRaiseError(kv, t);} return ToMapleNULL(kv); } /***************************************************** * API to convert a blackbox to its Maple equivalent * *****************************************************/ ALGEB lbConvertBlackbox (MKernelVector kv, ALGEB *argv){ return ToMapleNULL(kv); } /*************************************************** * API to convert a Vector to its Maple equivalent * ***************************************************/ ALGEB lbConvertVector (MKernelVector kv, ALGEB *argv){ try { const VectorKey *k = &MapleToVectorKey(kv, argv[1]); SerialVector s; SerializeVector(s, *k); if (strcmp(s.type, "integer")==0){ size_t n = s.list.size(); RTableSettings setting; M_INT bounds[2];bounds[0]=1;bounds[1]=n; RTableGetDefaults(kv, &setting); setting.num_dimensions=1; setting.subtype=RTABLE_COLUMN; setting.data_type=RTABLE_DAG; ALGEB vector = RTableCreate(kv, &setting, NULL, bounds); M_INT index[1]; RTableData tmp; for (size_t i=1; i>1; RTableSettings setting; M_INT bounds[2];bounds[0]=1;bounds[1]=n; RTableGetDefaults(kv, &setting); setting.num_dimensions=1; setting.subtype=RTABLE_COLUMN; setting.data_type=RTABLE_DAG; ALGEB vector = RTableCreate(kv, &setting, NULL, bounds); ALGEB f = EvalMapleStatement(kv,"Fraction:"); M_INT index[1]; RTableData tmp; for (size_t i=1; is,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple/lb-maple.h000066400000000000000000000074011347646240000201070ustar00rootroot00000000000000/* lb-maple.h * Copyright (C) 2005 Pascal Giorgi * * Written by Pascal Giorgi * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_lb_maple_H #define __LINBOX_lb_maple_H #include #include extern "C" { /*********************************** * Initializer of LinBox interface * ***********************************/ ALGEB lbStart (MKernelVector kv, ALGEB *argv); ALGEB lbStop (MKernelVector kv, ALGEB *argv); /************************************** * Information from the LinBox driver * **************************************/ ALGEB lbDataInfo (MKernelVector kv, ALGEB *argv); /************************************** * Function to create LinBox's object * **************************************/ ALGEB lbCreateElement (MKernelVector kv, ALGEB *argv); ALGEB lbCreateDomain (MKernelVector kv, ALGEB *argv); ALGEB lbCreateBlackbox (MKernelVector kv, ALGEB *argv); ALGEB lbCreateVector (MKernelVector kv, ALGEB *argv); /********************** * Domain's Functions * **********************/ ALGEB lbSetPrimeField (MKernelVector kv, ALGEB *argv); ALGEB lbSetRationalField (MKernelVector kv, ALGEB *argv); ALGEB lbSetIntegerRing (MKernelVector kv, ALGEB *argv); /************************ * Blackbox's Functions * ************************/ ALGEB lbCopyBlackbox (MKernelVector kv, ALGEB *argv); ALGEB lbGetBlackboxDimension (MKernelVector kv, ALGEB *argv); ALGEB lbSetBlackboxAtRandom (MKernelVector kv, ALGEB *argv); ALGEB lbRebindBlackbox (MKernelVector kv, ALGEB *argv); ALGEB lbWriteBlackbox (MKernelVector kv, ALGEB *argv); ALGEB lbSetBlackbox (MKernelVector kv, ALGEB *argv); /************************ * Vector's Functions * ************************/ ALGEB lbCopyVector (MKernelVector kv, ALGEB *argv); ALGEB lbGetVectorDimension (MKernelVector kv, ALGEB *argv); ALGEB lbSetVectorAtRandom (MKernelVector kv, ALGEB *argv); ALGEB lbRebindVector (MKernelVector kv, ALGEB *argv); ALGEB lbWriteVector (MKernelVector kv, ALGEB *argv); ALGEB lbSetVector (MKernelVector kv, ALGEB *argv); /************************** * Polynomial's Functions * **************************/ ALGEB lbWritePolynomial (MKernelVector kv, ALGEB *argv); /****************************** * LinBox available solutions * ******************************/ ALGEB lbDeterminant (MKernelVector kv, ALGEB *argv); ALGEB lbRank (MKernelVector kv, ALGEB *argv); ALGEB lbMinpoly (MKernelVector kv, ALGEB *argv); ALGEB lbCharpoly (MKernelVector kv, ALGEB *argv); ALGEB lbSolve (MKernelVector kv, ALGEB *argv); } // end of extern "C" #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/interfaces/maple/lb-maple.mpl.bak000077500000000000000000000302151347646240000212060ustar00rootroot00000000000000LinBox:= module() description "Maple interface for LinBox library version 1.0 by Pascal Giorgi (LinBox project - www.linal.org)"; local lbpath, lbInit, lbEnd, lbStart, lbStop: export lbDeterminant, lbRank, lbMinpoly, lbCharpoly, lbSolve, Dev: option package, load=lbInit, unload=lbEnd: lbpathvalue ############################################################# # Function to initialize LinBox driver and LinBox interface # ############################################################# lbStart := define_external('lbStart' , MAPLE, LIB=lbpath); lbStop := define_external('lbStop' , MAPLE, LIB=lbpath); lbInit := proc() printf(" LinBox/Maple Interface Package beta version 1.0 \n by Pascal Giorgi (pascal.giorgi@univ-perp.fr)\n"); lbStart(); end proc; lbEnd := proc() end proc;#lbStop();end proc; ##################################################################### ############# Definition of the low level submodule ################ ##################################################################### Dev:= module() description "low level interface for direct LinBox object manipulation"; local lbInit, lbEnd; export lbDataInfo,lbStart, lbStop, lbElement, lbDomain, lbBlackbox, lbVector, lbSetPrimeField, lbSetRationalField, lbSetIntegerRing, lbCopyBlackbox, lbBlackboxDimension, lbSetBlackboxAtRandom, lbRebindBlackbox, lbWriteBlackbox, lbSetBlackbox, lbCopyVector, lbVectorDimension, lbSetVectorAtRandom, lbRebindVector, lbWriteVector, lbSetVector, lbWritePolynomial, lbDeterminant, lbRank, lbMinpoly, lbCharpoly, lbSolve, lbConvertElement, lbConvertBlackbox, lbConvertVector, lbConvertPolynomial, lbCopy, lbWrite, lbDimension, lbRebind, lbRandom: option package, load=lbInit, unload=lbEnd: ############################################################# # Function to initialize LinBox driver and LinBox interface # ############################################################# lbStart := define_external('lbStart' , MAPLE, LIB=lbpath); lbStop := define_external('lbStop' , MAPLE, LIB=lbpath); ###################################################### # Function to get information from the LinBox driver # ###################################################### lbDataInfo := define_external('lbDataInfo', MAPLE, LIB=lbpath); ######################################## # Function to set the LinBox data type # ######################################## lbSetPrimeField := define_external('lbSetPrimeField' , MAPLE, LIB=lbpath); lbSetRationalField := define_external('lbSetRationalField' , MAPLE, LIB=lbpath); lbSetIntegerRing := define_external('lbSetIntegerRing' , MAPLE, LIB=lbpath); lbSetBlackbox := define_external('lbSetBlackbox' , MAPLE, LIB=lbpath); lbSetVector := define_external('lbSetVector' , MAPLE, LIB=lbpath); ############################################### # Function to create LinBox object from Maple # ############################################### lbElement := define_external('lbCreateElement' , MAPLE, LIB=lbpath); lbDomain := define_external('lbCreateDomain' , MAPLE, LIB=lbpath); lbBlackbox := define_external('lbCreateBlackbox' , MAPLE, LIB=lbpath); lbVector := define_external('lbCreateVector' , MAPLE, LIB=lbpath); ####################################### # Function for LinBox blackbox object # ####################################### lbCopyBlackbox := define_external('lbCopyBlackbox' , MAPLE, LIB=lbpath); lbBlackboxDimension := define_external('lbGetBlackboxDimension' , MAPLE, LIB=lbpath); lbSetBlackboxAtRandom := define_external('lbSetBlackboxAtRandom' , MAPLE, LIB=lbpath); lbRebindBlackbox := define_external('lbRebindBlackbox' , MAPLE, LIB=lbpath); lbWriteBlackbox := define_external('lbWriteBlackbox' , MAPLE, LIB=lbpath); ##################################### # Function for LinBox vector object # ##################################### lbCopyVector := define_external('lbCopyVector' , MAPLE, LIB=lbpath); lbVectorDimension := define_external('lbGetVectorDimension' , MAPLE, LIB=lbpath); lbSetVectorAtRandom := define_external('lbSetVectorAtRandom' , MAPLE, LIB=lbpath); lbRebindVector := define_external('lbRebindVector' , MAPLE, LIB=lbpath); lbWriteVector := define_external('lbWriteVector' , MAPLE, LIB=lbpath); ######################################### # Function for LinBox polynomial object # ######################################### lbWritePolynomial := define_external('lbWritePolynomial' , MAPLE, LIB=lbpath); ############################## # Available LinBox solutions # ############################## lbDeterminant := define_external('lbDeterminant' , MAPLE, LIB=lbpath); lbRank := define_external('lbRank' , MAPLE, LIB=lbpath); lbMinpoly := define_external('lbMinpoly' , MAPLE, LIB=lbpath); lbCharpoly := define_external('lbCharpoly' , MAPLE, LIB=lbpath); lbSolve := define_external('lbSolve' , MAPLE, LIB=lbpath); ################################################## # Conversion from LinBox object to Maple Objects # ################################################## lbConvertElement := define_external('lbConvertElement' , MAPLE, LIB=lbpath); lbConvertBlackbox := define_external('lbConvertBlackbox' , MAPLE, LIB=lbpath); lbConvertVector := define_external('lbConvertVector' , MAPLE, LIB=lbpath); lbConvertPolynomial := define_external('lbConvertPolynomial' , MAPLE, LIB=lbpath); #################### # Higher level API # #################### lbCopy := define_external('lbCopy' , MAPLE, LIB=lbpath); lbWrite := define_external('lbWrite' , MAPLE, LIB=lbpath); lbDimension := define_external('lbDimension' , MAPLE, LIB=lbpath); lbRebind := define_external('lbRebind' , MAPLE, LIB=lbpath); lbRandom := define_external('lbRandom' , MAPLE, LIB=lbpath); end module: ############################################################## ############# end of the low level submodule ################ ############################################################## ################################################################### ############# definition of the high level module ################ ################################################################### ################################################ # Determinant computation from a Maple Matrix # ################################################ lbDeterminant := proc() local d, A, det, t; if (type(args[1], integer)) then if (type(args[2], Matrix)) then t := time(); A := Dev:-lbBlackbox(args[1], args[2]); t:= time()-t; else error("invalid argument",args[2], "must be a Matrix"); end if; elif (type(args[1], Matrix)) then t := time(); A := Dev:-lbBlackbox(args[1]); t:= time()-t; else error("invalid argument",args[1], "must be a Matrix"); end if; d := Dev:-lbDeterminant(A); det := Dev:-lbConvertElement(d); if (printlevel>1) then print("conversion time:",t); end if; return det; end; ######################################## # Rank computation from a Maple matrix # ######################################## lbRank := proc() local A,t; if (type(args[1], integer)) then if (type(args[2], Matrix)) then t := time(); A:=Dev:-lbBlackbox(args[1], args[2]); t:=time()-t; else error("invalid argument",args[2], "must be a Matrix"); end if; elif (type(args[1], Matrix)) then t := time(); A := Dev:-lbBlackbox(args[1]); t:=time()-t; else error("invalid argument",args[1], "must be a Matrix"); end if; if (printlevel>1) then print("conversion time:",t); end if; return Dev:-lbRank(A); end; ###################################################### # Minimal polynomial computation from a Maple matrix # ###################################################### lbMinpoly := proc() local A, p, symb,t; if (type(args[1], integer)) then if (type(args[2], Matrix)) then if (type(args[3], name)) then t:=time(); A:=Dev:-lbBlackbox(args[1], args[2]); t:=time()-t; symb:=args[3]; else error("invalid argument",args[3], "must be a name"); end if; else error("invalid argument",args[2], "must be a Matrix"); end if; elif (type(args[1], Matrix)) then if (type(args[2], name)) then t:=time(); A := Dev:-lbBlackbox(args[1]); t:=time()-t; symb:=args[2]; else error("invalid argument",args[2], "must be a name"); end if else error("invalid argument",args[1], "must be a Matrix"); end if; p:= Dev:-lbMinpoly(A); if (printlevel>1) then print("conversion time:",t); end if; return Dev:-lbConvertPolynomial(p,symb); end; ############################################################# # Characteristic polynomial computation from a Maple matrix # ############################################################# lbCharpoly := proc() local A, p, symb,t; if (type(args[1], integer)) then if (type(args[2], Matrix)) then if (type(args[3], name)) then t:=time(); A:=Dev:-lbBlackbox(args[1], args[2]); t:=time()-t; symb:=args[3]; else error("invalid argument",args[3], "must be a name"); end if; else error("invalid argument",args[2], "must be a Matrix"); end if; elif (type(args[1], Matrix)) then if (type(args[2], name)) then t:=time(); A := Dev:-lbBlackbox(args[1]); t:=time()-t; symb:=args[2]; else error("invalid argument",args[2], "must be a name"); end if else error("invalid argument",args[1], "must be a Matrix"); end if; p:= Dev:-lbCharpoly(A); if (printlevel>1) then print("conversion time:",t); end if; return Dev:-lbConvertPolynomial(p,symb); end; ############################################################# # Linear system solving from Maple matrix and Maple Vector # ############################################################# lbSolve := proc() local A,b,x,y,t; if (type(args[1], integer)) then if (type(args[2], Matrix)) then if (type(args[3], Vector)) then t:=time(); A:=Dev:-lbBlackbox(args[1], args[2]); b:=Dev:-lbVector(args[1], args[3]); t:=time()-t; else error("invalid argument",args[3], "must be a Vector"); fi; else error("invalid argument",args[2], "must be a Matrix"); fi; elif (type(args[1], Matrix)) then if (type(args[2], Vector)) then t:=time(); A:=Dev:-lbBlackbox(args[1]); b:=Dev:-lbVector(args[2]); t:=time()-t; else error("invalid argument",args[2], "must be a Vector"); fi; else error("invalid argument",args[1], "must be a Matrix"); fi; x:= Dev:-lbSolve(A,b); y:=Dev:-lbConvertVector(x); if (printlevel>1) then print("conversion time:",t); end if; return y; end; end module: save_linbox:=proc(repo) global savelibname,libname: if (FileTools[Exists](cat(repo,"/maple.lib"))) then fremove(cat(repo,"/maple.lib")); fremove(cat(repo,"/maple.ind")); # fremove(cat(repo,"/maple.hdb")); rmdir(repo); fi: if (not(FileTools[Exists](repo))) then mkdir(repo);fi: march( 'create',repo, 1000 ): savelibname := repo: libname := savelibname, libname: savelib('LinBox'): end: save_linbox("LinBoxMaple"); linbox-1.6.3/interfaces/maple/linbox-demonstration-good.mw000077500000000000000000022521611347646240000237310ustar00rootroot00000000000000 LinBox Interface beta version 0.1 demonstration by Pascal Giorgi restart;

<Text-field style="Heading 1" layout="Heading 1">Available through Maple module</Text-field> with(LinBox); LinBox/Maple Interface Package beta version 0.1 by Pascal Giorgi (pgiorgi@uwaterloo.ca) NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2LS1JI21pR0YlNjlRJERldkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZTLyUlYm9sZEdGOC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdGVi8lK2JhY2tncm91bmRHRlkvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjUvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGUC8lKm1hdGhjb2xvckdGVi8lL21hdGhiYWNrZ3JvdW5kR0ZZLyUrZm9udGZhbWlseUdGXG8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRlMtRi02M1EiLEYoL0YxUSZpbmZpeEYoL0Y0RjgvRjdGNS9GOlEkMGVtRigvRj1RM3Zlcnl0aGlja21hdGhzcGFjZUYoL0Y/RjhGQEZCRkVGSEZKRkxGTkZRRlRGVy1GZ242OVErbGJDaGFycG9seUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5sYkRldGVybWluYW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKmxiTWlucG9seUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYlJhbmtGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJTb2x2ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxLUYtNjNRIl1GKC9GMVEocG9zdGZpeEYoRjNGNkY5L0Y9UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRj5GQEZCRkVGSEZKRkxGTkZRRlRGVzcjNyhJJERldkdGKEkrbGJDaGFycG9seUdGKEkubGJEZXRlcm1pbmFudEdGKEkqbGJNaW5wb2x5R0YoSSdsYlJhbmtHRihJKGxiU29sdmVHRig= comparison with LinearAlgebra package with(LinearAlgebra); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Z3ktSSNtaUdGJTY5USMmeEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZTLyUlYm9sZEdGOC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdGVi8lK2JhY2tncm91bmRHRlkvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjUvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGUC8lKm1hdGhjb2xvckdGVi8lL21hdGhiYWNrZ3JvdW5kR0ZZLyUrZm9udGZhbWlseUdGXG8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRlMtRi02M1EiLEYoL0YxUSZpbmZpeEYoL0Y0RjgvRjdGNS9GOlEkMGVtRigvRj1RM3Zlcnl0aGlja21hdGhzcGFjZUYoL0Y/RjhGQEZCRkVGSEZKRkxGTkZRRlRGVy1GZ242OVEkQWRkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKEFkam9pbnRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEzQmFja3dhcmRTdWJzdGl0dXRlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0JhbmRNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEmQmFzaXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtQmV6b3V0TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0JpZGlhZ29uYWxGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUJpbGluZWFyRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVDaGFyYWN0ZXJpc3RpY01hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTlDaGFyYWN0ZXJpc3RpY1BvbHlub21pYWxGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEnQ29sdW1uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMENvbHVtbkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBDb2x1bW5PcGVyYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsQ29sdW1uU3BhY2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwQ29tcGFuaW9uTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMENvbmRpdGlvbk51bWJlckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9Db25zdGFudE1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9Db25zdGFudFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USVDb3B5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkNyZWF0ZVBlcm11dGF0aW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUNyb3NzUHJvZHVjdEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1EZWxldGVDb2x1bW5GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqRGVsZXRlUm93RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLERldGVybWluYW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKURpYWdvbmFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0RpYWdvbmFsTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UStEaW1lbnNpb25zRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0RvdFByb2R1Y3RGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE2RWlnZW5Db25kaXRpb25OdW1iZXJzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLEVpZ2VudmFsdWVzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUVpZ2VudmVjdG9yc0YoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USZFcXVhbEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJGb3J3YXJkU3Vic3RpdHV0ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5Gcm9iZW5pdXNGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRNEdhdXNzaWFuRWxpbWluYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEyR2VuZXJhdGVFcXVhdGlvbnNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvR2VuZXJhdGVNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEyR2V0UmVzdWx0RGF0YVR5cGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvR2V0UmVzdWx0U2hhcGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1R2l2ZW5zUm90YXRpb25NYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsR3JhbVNjaG1pZHRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtSGFua2VsTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLEhlcm1pdGVGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRM0hlcm1pdGlhblRyYW5zcG9zZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9IZXNzZW5iZXJnRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5IaWxiZXJ0TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkhvdXNlaG9sZGVyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0lkZW50aXR5TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkludGVyc2VjdGlvbkJhc2lzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0lzRGVmaW5pdGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtSXNPcnRob2dvbmFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKklzU2ltaWxhckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpJc1VuaXRhcnlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEySm9yZGFuQmxvY2tNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErSm9yZGFuRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UShMQV9NYWluRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMExVRGVjb21wb3NpdGlvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1MZWFzdFNxdWFyZXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsTGluZWFyU29sdmVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkTWFwRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJU1hcDJGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqTWF0cml4QWRkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMk1hdHJpeEV4cG9uZW50aWFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL01hdHJpeEZ1bmN0aW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLk1hdHJpeEludmVyc2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1TWF0cml4TWF0cml4TXVsdGlwbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErTWF0cml4Tm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxNYXRyaXhQb3dlckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVNYXRyaXhTY2FsYXJNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVNYXRyaXhWZWN0b3JNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJNaW5pbWFsUG9seW5vbWlhbEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USZNaW5vckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UShNb2R1bGFyRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKU11bHRpcGx5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLE5vVXNlclZhbHVlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJU5vcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqTm9ybWFsaXplRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKk51bGxTcGFjZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTNPdXRlclByb2R1Y3RNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqUGVybWFuZW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJlBpdm90RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlBvcG92Rm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBRUkRlY29tcG9zaXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtUmFuZG9tTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVJhbmRvbVZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USVSYW5rRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRNlJhdGlvbmFsQ2Fub25pY2FsRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTZSZWR1Y2VkUm93RWNoZWxvbkZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkUm93RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVJvd0RpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1Sb3dPcGVyYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpUm93U3BhY2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtU2NhbGFyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL1NjYWxhck11bHRpcGx5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVNjYWxhclZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpTY2h1ckZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvU2luZ3VsYXJWYWx1ZXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqU21pdGhGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlN1Yk1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpTdWJWZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpU3VtQmFzaXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwU3lsdmVzdGVyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL1RvZXBsaXR6TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJlRyYWNlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlRyYW5zcG9zZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBUcmlkaWFnb25hbEZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErVW5pdFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJWYW5kZXJtb25kZU1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpWZWN0b3JBZGRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsVmVjdG9yQW5nbGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1VmVjdG9yTWF0cml4TXVsdGlwbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErVmVjdG9yTm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVWZWN0b3JTY2FsYXJNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UStaZXJvTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK1plcm9WZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkWmlwRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnEtRi02M1EiXUYoL0YxUShwb3N0Zml4RihGM0Y2RjkvRj1RMnZlcnl0aGlubWF0aHNwYWNlRihGPkZARkJGRUZIRkpGTEZORlFGVEZXNyM3YnJJIyZ4R0YoSSRBZGRHNiQlKnByb3RlY3RlZEdGKkkoQWRqb2ludEdGKEkzQmFja3dhcmRTdWJzdGl0dXRlR0YoSStCYW5kTWF0cml4R0YoSSZCYXNpc0dGKEktQmV6b3V0TWF0cml4R0YoSS9CaWRpYWdvbmFsRm9ybUdGKEktQmlsaW5lYXJGb3JtR0YoSTVDaGFyYWN0ZXJpc3RpY01hdHJpeEdGKEk5Q2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsR0YoSSdDb2x1bW5HRihJMENvbHVtbkRpbWVuc2lvbkdGKEkwQ29sdW1uT3BlcmF0aW9uR0YoSSxDb2x1bW5TcGFjZUdGKEkwQ29tcGFuaW9uTWF0cml4R0YoSTBDb25kaXRpb25OdW1iZXJHRihJL0NvbnN0YW50TWF0cml4R0YoSS9Db25zdGFudFZlY3RvckdGKEklQ29weUdGKEkyQ3JlYXRlUGVybXV0YXRpb25HRihJLUNyb3NzUHJvZHVjdEdGKEktRGVsZXRlQ29sdW1uR0YoSSpEZWxldGVSb3dHRihJLERldGVybWluYW50R0YoSSlEaWFnb25hbEdGKEkvRGlhZ29uYWxNYXRyaXhHRihJKkRpbWVuc2lvbkdGKEkrRGltZW5zaW9uc0dGKEkrRG90UHJvZHVjdEdGKEk2RWlnZW5Db25kaXRpb25OdW1iZXJzR0YoSSxFaWdlbnZhbHVlc0dGKEktRWlnZW52ZWN0b3JzR0YoSSZFcXVhbEdGKEkyRm9yd2FyZFN1YnN0aXR1dGVHRihJLkZyb2Jlbml1c0Zvcm1HRihJNEdhdXNzaWFuRWxpbWluYXRpb25HRihJMkdlbmVyYXRlRXF1YXRpb25zR0YoSS9HZW5lcmF0ZU1hdHJpeEdGKEkyR2V0UmVzdWx0RGF0YVR5cGVHRihJL0dldFJlc3VsdFNoYXBlR0YoSTVHaXZlbnNSb3RhdGlvbk1hdHJpeEdGKEksR3JhbVNjaG1pZHRHRihJLUhhbmtlbE1hdHJpeEdGKEksSGVybWl0ZUZvcm1HRihJM0hlcm1pdGlhblRyYW5zcG9zZUdGKEkvSGVzc2VuYmVyZ0Zvcm1HRihJLkhpbGJlcnRNYXRyaXhHRihJMkhvdXNlaG9sZGVyTWF0cml4R0YoSS9JZGVudGl0eU1hdHJpeEdGKEkySW50ZXJzZWN0aW9uQmFzaXNHRihJK0lzRGVmaW5pdGVHRihJLUlzT3J0aG9nb25hbEdGKEkqSXNTaW1pbGFyR0YoSSpJc1VuaXRhcnlHRihJMkpvcmRhbkJsb2NrTWF0cml4R0YoSStKb3JkYW5Gb3JtR0YoSShMQV9NYWluR0YoSTBMVURlY29tcG9zaXRpb25HRihJLUxlYXN0U3F1YXJlc0dGKEksTGluZWFyU29sdmVHRihJJE1hcEdGKEklTWFwMkdGKEkqTWF0cml4QWRkR0YoSTJNYXRyaXhFeHBvbmVudGlhbEdGKEkvTWF0cml4RnVuY3Rpb25HRihJLk1hdHJpeEludmVyc2VHRihJNU1hdHJpeE1hdHJpeE11bHRpcGx5R0YoSStNYXRyaXhOb3JtR0YoSSxNYXRyaXhQb3dlckdGKEk1TWF0cml4U2NhbGFyTXVsdGlwbHlHRihJNU1hdHJpeFZlY3Rvck11bHRpcGx5R0YoSTJNaW5pbWFsUG9seW5vbWlhbEdGKEkmTWlub3JHRihJKE1vZHVsYXJHRihJKU11bHRpcGx5R0ZeaWxJLE5vVXNlclZhbHVlR0YoSSVOb3JtR0ZeaWxJKk5vcm1hbGl6ZUdGKEkqTnVsbFNwYWNlR0YoSTNPdXRlclByb2R1Y3RNYXRyaXhHRihJKlBlcm1hbmVudEdGKEkmUGl2b3RHRihJKlBvcG92Rm9ybUdGKEkwUVJEZWNvbXBvc2l0aW9uR0YoSS1SYW5kb21NYXRyaXhHRihJLVJhbmRvbVZlY3RvckdGKEklUmFua0dGKEk2UmF0aW9uYWxDYW5vbmljYWxGb3JtR0YoSTZSZWR1Y2VkUm93RWNoZWxvbkZvcm1HRihJJFJvd0dGKEktUm93RGltZW5zaW9uR0YoSS1Sb3dPcGVyYXRpb25HRihJKVJvd1NwYWNlR0YoSS1TY2FsYXJNYXRyaXhHRihJL1NjYWxhck11bHRpcGx5R0YoSS1TY2FsYXJWZWN0b3JHRihJKlNjaHVyRm9ybUdGKEkvU2luZ3VsYXJWYWx1ZXNHRihJKlNtaXRoRm9ybUdGKEkqU3ViTWF0cml4R0YoSSpTdWJWZWN0b3JHRihJKVN1bUJhc2lzR0YoSTBTeWx2ZXN0ZXJNYXRyaXhHRihJL1RvZXBsaXR6TWF0cml4R0YoSSZUcmFjZUdGXmlsSSpUcmFuc3Bvc2VHRihJMFRyaWRpYWdvbmFsRm9ybUdGKEkrVW5pdFZlY3RvckdGKEkyVmFuZGVybW9uZGVNYXRyaXhHRihJKlZlY3RvckFkZEdGKEksVmVjdG9yQW5nbGVHRihJNVZlY3Rvck1hdHJpeE11bHRpcGx5R0YoSStWZWN0b3JOb3JtR0YoSTVWZWN0b3JTY2FsYXJNdWx0aXBseUdGKEkrWmVyb01hdHJpeEdGKEkrWmVyb1ZlY3RvckdGKEkkWmlwR0Yo
<Text-field style="Heading 1" layout="Heading 1">High level of the interface </Text-field> Call LinBox functionnalities directly on Maple objects.
<Text-field style="Heading 2" layout="Heading 2">Computation over the integers</Text-field>
<Text-field style="Heading 3" layout="Heading 3">Determinant</Text-field> n:=100;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4xMDB+eH4xMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple determinant Determinant(A); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1zMTMxNTQyMTA5NjUyNDk5ODEwNDIyNzczOTQ5NjE2NjQzMzE5MTU2Mzc3NzMzNjAxNzQ5ODU1OTgzNzk3NDY0Njk1MTI3MTQ5NDk4NDIzMTg4MTg1ODgyMTI3Mzg0MzE3NzgwMDI3MDA2NDUzODIxMTk4NzYxNTc2Mzc4NDY1NTY4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIl1zI29iWXlqZGgoKT5AUVgxcS0heTxWUUZAKWU9KT1CJSlcXHI3JnBrdXokKWYmKVw8Z0x4UGMiPkxrOydcUnhBLyIpKlxfJzRAYUoi LinBox determinant lbDeterminant(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjVyEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1zMTMxNTQyMTA5NjUyNDk5ODEwNDIyNzczOTQ5NjE2NjQzMzE5MTU2Mzc3NzMzNjAxNzQ5ODU1OTgzNzk3NDY0Njk1MTI3MTQ5NDk4NDIzMTg4MTg1ODgyMTI3Mzg0MzE3NzgwMDI3MDA2NDUzODIxMTk4NzYxNTc2Mzc4NDY1NTY4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIl1zI29iWXlqZGgoKT5AUVgxcS0heTxWUUZAKWU9KT1CJSlcXHI3JnBrdXokKWYmKVw8Z0x4UGMiPkxrOydcUnhBLyIpKlxfJzRAYUoi Timing comparison t1:=time(Determinant(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS4yMzBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUk3ISIkNyNGZXI= t2:=time(lbDeterminant(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjWiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4xNjdGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJG4iISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw3LjM2NTI2OTQ2MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIraCVwX08oISIq B:=Matrix(200,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t1:=time(Determinant(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTMuMTQ2RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiZZSiIhIiQ3I0Zlcg== t2:=time(lbDeterminant(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjE3NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkdSIhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC45MTJGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJDcqISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNC40MTQ0NzM2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrb3RXVDkhIik=
<Text-field style="Heading 3" layout="Heading 3">Rank</Text-field> n:=100;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4xMDB+eH4xMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple rank Rank(A); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyI= LinBox rank lbRank(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjVCEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyI= Timing comparison t1:=time(Rank(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS4xMjdGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUY2ISIkNyNGZXI= t2:=time(lbRank(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAzNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjTyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4wNDFGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiI1QhIiQ3I0Zlcg== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwyNy40ODc4MDQ4OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKVsheVtGISIp B:=Matrix(200,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t1:=time(Rank(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTIuMzEzRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiY4QiIhIiQ3I0Zlcg== t2:time(lbRank(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI1N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkZCMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjMwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkKyQhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwzMDAuMzE3MDczMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrSzI8LkkhIig=
<Text-field style="Heading 3" layout="Heading 3">Minimal Polynomial</Text-field> n:=20;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMyMEYoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIm5HRigiIz83I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn4yMH54fjIwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple minimal polynomial MinimalPolynomial(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkwtSSNtb0dGJTYzUSomdW1pbnVzMDtGKC8lJWZvcm1HUSdwcmVmaXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdGNS8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjUvJSpzeW1tZXRyaWNHRjUvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y1LyUubW92YWJsZWxpbWl0c0dGNS8lJ2FjY2VudEdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUlc2l6ZUdRIzEyRigvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLUkjbW5HRiU2OVE1NjMzODM2NTYzNDU2OTYzNDM4OTBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRmluLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRIitGKC9GMVEmaW5maXhGKEYzRjYvRjlRMG1lZGl1bW1hdGhzcGFjZUYoL0Y8RlxyRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1GJDYlLUZaNjlRNTE5Njk2MzM1NDY5NjkwNTY0MDE4RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHEtRi02M1ExJkludmlzaWJsZVRpbWVzO0YoRmlxRjNGNkY4RjtGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUkjbWlHRiU2OVEieEYoRmduRmpuRlxvL0Zfb0ZgcEZgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcS9GYnFRJ2l0YWxpY0YoRmRxLUYtNjNRKCZtaW51cztGKEZpcUYzRjZGW3JGXXJGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUYkNiUtRlo2OVE0MjExNDA1NDUwMTY0MDEyNTI4NUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUklbXN1cEdGJTYlRmZyLUZaNjlRIjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRihGZnEtRiQ2JS1GWjY5UTQyMTYxNTA3NDIyMjQyNzg2NTEwRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEiM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEyNDYxNTM1MTU5NzY5NTEyOTNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI0RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTIyOTA3MzI4MTc3OTgxNDkyNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRMTIyODIxNjMyNDE3ODIxMTFGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI2RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTAzNTY0ODY3ODU2NjE4NzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGXXMtRiQ2JS1GWjY5US8zOTg0MjM4MjIwOTk0NkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjhGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRLjY5NDg2MjQ5OTQ0MzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5US0xMzk1ODE2MDA1MjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEsMzE2Mjg5OTE3OTVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVErNDg5NTg1Nzc3OEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzEyRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5USoxNjQwOTU3MjRGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEpMzk5NDg1MTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEoNDgxNjE0M0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE1RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UScyMjkxNTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEmMjM1MzNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxN0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEkMTc3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEjMThGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRJDEwMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2Iy1GZnM2JUZmci1GWjY5USMyMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0NyMsTCI1ISpRTSdwWGpsJFFqISIiKiYiNT1TYyFwcGFMJ3A+IiIiSSJ4R0YoRmVfbEZlX2wqJiI0JkdELGssWDA5QEZlX2wpRmZfbCIiI0ZlX2xGYl9sKiYiNDVseVVBVTI6OyNGZV9sKUZmX2wiIiRGZV9sRmVfbComIjIkSF5wKGZeYGglRmVfbClGZl9sIiIlRmVfbEZiX2wqJiIyRVwiKXo8R3QhSEZlX2wpRmZfbCIiJkZlX2xGZV9sKiYiMTZAeVRLOyNHI0ZlX2wpRmZfbCIiJ0ZlX2xGYl9sKiYiMHo9bSZ5J1tjJEZlX2wpRmZfbCIiKEZlX2xGZV9sKiYiL1kqNEFRVSlSRmVfbClGZl9sIiIpRmVfbEZiX2wqJiIuUlcqXGlbcEZlX2wpRmZfbCIiKkZlX2xGYl9sKiYiLUEwZyJlUiJGZV9sKUZmX2wiIzVGZV9sRmVfbComIiwmeiIqKkc7JEZlX2wpRmZfbCIjNkZlX2xGZV9sKiYiK3l4JmUqW0ZlX2wpRmZfbCIjN0ZlX2xGZV9sKiYiKkNkNGsiRmVfbClGZl9sIiM4RmVfbEZlX2wqJiIpPiZbKlJGZV9sKUZmX2wiIzlGZV9sRmJfbComIihWaCJbRmVfbClGZl9sIiM6RmVfbEZiX2wqJiInZiJII0ZlX2wpRmZfbCIjO0ZlX2xGZV9sKiYiJkxOI0ZlX2wpRmZfbCIjPEZlX2xGZV9sKiYiJHgiRmVfbClGZl9sIiM9RmVfbEZlX2wqJiIkLCJGZV9sKUZmX2wiIz5GZV9sRmJfbCokKUZmX2wiIz9GZV9sRmVfbA== LinBox minimal polynomial lbMinpoly(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkwtSSNtb0dGJTYzUSomdW1pbnVzMDtGKC8lJWZvcm1HUSdwcmVmaXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdGNS8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjUvJSpzeW1tZXRyaWNHRjUvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y1LyUubW92YWJsZWxpbWl0c0dGNS8lJ2FjY2VudEdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUlc2l6ZUdRIzEyRigvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLUkjbW5HRiU2OVE1NjMzODM2NTYzNDU2OTYzNDM4OTBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRmluLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRIitGKC9GMVEmaW5maXhGKEYzRjYvRjlRMG1lZGl1bW1hdGhzcGFjZUYoL0Y8RlxyRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1GJDYlLUZaNjlRNTE5Njk2MzM1NDY5NjkwNTY0MDE4RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHEtRi02M1ExJkludmlzaWJsZVRpbWVzO0YoRmlxRjNGNkY4RjtGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUkjbWlHRiU2OVEieEYoRmduRmpuRlxvL0Zfb0ZgcEZgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcS9GYnFRJ2l0YWxpY0YoRmRxLUYtNjNRKCZtaW51cztGKEZpcUYzRjZGW3JGXXJGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUYkNiUtRlo2OVE0MjExNDA1NDUwMTY0MDEyNTI4NUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUklbXN1cEdGJTYlRmZyLUZaNjlRIjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRihGZnEtRiQ2JS1GWjY5UTQyMTYxNTA3NDIyMjQyNzg2NTEwRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEiM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEyNDYxNTM1MTU5NzY5NTEyOTNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI0RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTIyOTA3MzI4MTc3OTgxNDkyNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRMTIyODIxNjMyNDE3ODIxMTFGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI2RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTAzNTY0ODY3ODU2NjE4NzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGXXMtRiQ2JS1GWjY5US8zOTg0MjM4MjIwOTk0NkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjhGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRLjY5NDg2MjQ5OTQ0MzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5US0xMzk1ODE2MDA1MjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEsMzE2Mjg5OTE3OTVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVErNDg5NTg1Nzc3OEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzEyRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5USoxNjQwOTU3MjRGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEpMzk5NDg1MTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEoNDgxNjE0M0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE1RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UScyMjkxNTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEmMjM1MzNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxN0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEkMTc3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEjMThGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRJDEwMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2Iy1GZnM2JUZmci1GWjY5USMyMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0NyMsTCI1ISpRTSdwWGpsJFFqISIiKiYiNT1TYyFwcGFMJ3A+IiIiSSJ4R0YoRmVfbEZlX2wqJiI0JkdELGssWDA5QEZlX2wpRmZfbCIiI0ZlX2xGYl9sKiYiNDVseVVBVTI6OyNGZV9sKUZmX2wiIiRGZV9sRmVfbComIjIkSF5wKGZeYGglRmVfbClGZl9sIiIlRmVfbEZiX2wqJiIyRVwiKXo8R3QhSEZlX2wpRmZfbCIiJkZlX2xGZV9sKiYiMTZAeVRLOyNHI0ZlX2wpRmZfbCIiJ0ZlX2xGYl9sKiYiMHo9bSZ5J1tjJEZlX2wpRmZfbCIiKEZlX2xGZV9sKiYiL1kqNEFRVSlSRmVfbClGZl9sIiIpRmVfbEZiX2wqJiIuUlcqXGlbcEZlX2wpRmZfbCIiKkZlX2xGYl9sKiYiLUEwZyJlUiJGZV9sKUZmX2wiIzVGZV9sRmVfbComIiwmeiIqKkc7JEZlX2wpRmZfbCIjNkZlX2xGZV9sKiYiK3l4JmUqW0ZlX2wpRmZfbCIjN0ZlX2xGZV9sKiYiKkNkNGsiRmVfbClGZl9sIiM4RmVfbEZlX2wqJiIpPiZbKlJGZV9sKUZmX2wiIzlGZV9sRmJfbComIihWaCJbRmVfbClGZl9sIiM6RmVfbEZiX2wqJiInZiJII0ZlX2wpRmZfbCIjO0ZlX2xGZV9sKiYiJkxOI0ZlX2wpRmZfbCIjPEZlX2xGZV9sKiYiJHgiRmVfbClGZl9sIiM9RmVfbEZlX2wqJiIkLCJGZV9sKUZmX2wiIz5GZV9sRmJfbCokKUZmX2wiIz9GZV9sRmVfbA== Timing comparison t1:=time(MinimalPolynomial(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS45MjZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUU+ISIkNyNGZXI= t2:time(lbMinpoly(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiJSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjAwN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiKCEiJA== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw0Ni45NzU2MDk3NkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrdzRjKHAlISIp
<Text-field style="Heading 3" layout="Heading 3">Characteristic Polynomial</Text-field> n:=20;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMyMEYoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIm5HRigiIz83I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn4yMH54fjIwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple characteristic polynomial CharacteristicPolynomial(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkstRiQ2Iy1JJW1zdXBHRiU2JS1JI21pR0YlNjlRInhGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGPS8lKnN1YnNjcmlwdEdGPS8lLHN1cGVyc2NyaXB0R0Y9LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGPS8lK2V4ZWN1dGFibGVHRj0vJSlyZWFkb25seUdGQC8lKWNvbXBvc2VkR0Y9LyUqY29udmVydGVkR0Y9LyUraW1zZWxlY3RlZEdGPS8lLHBsYWNlaG9sZGVyR0Y9LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkkvJS9tYXRoYmFja2dyb3VuZEdGTC8lK2ZvbnRmYW1pbHlHRjcvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjotSSNtbkdGJTY5USMyMEYoRjVGOEY7L0Y/Rj1GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG8vRl9vUSdub3JtYWxGKEZhby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtSSNtb0dGJTYzUSgmbWludXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y9LyUqc2VwYXJhdG9yR0Y9LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRigvJSdyc3BhY2VHRmpwLyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lMGZvbnRfc3R5bGVfbmFtZUdGZ24vJSVzaXplR0Y6LyUrZm9yZWdyb3VuZEdGSS8lK2JhY2tncm91bmRHRkwtRiQ2JS1GZG82OVEjOTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhby1GXnA2M1ExJkludmlzaWJsZVRpbWVzO0YoRmFwRmRwRmZwL0ZpcFEkMGVtRigvRlxxRl5zRl1xRl9xRmFxRmRxRmdxRmlxRltyRl1yRl9yRmFyRmNyLUYvNiVGMS1GZG82OVEjMTlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5USQyODFGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIzE4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam8tRl5wNjNRIitGKEZhcEZkcEZmcEZocEZbcUZdcUZfcUZhcUZkcUZncUZpcUZbckZdckZfckZhckZjci1GJDYlLUZkbzY5USU4NzkwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxN0YoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRJzMyODM0NUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTZGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USgyMjA0NTUzRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRKTMxNTkzMDI4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRKjcxMzQ3MDMyMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USs0NTc5NDc5OTcyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRLDU1NjA1OTQ2NDcwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRLTYyNzE1NTAxODUxNkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTBGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5US4yMDM2NTk5MjU2MzYwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEvNDI3ODg0MDEyODQ2MTVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTA0NTQ5OTA2MDE4MTc5ODlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjdGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTEyMDA5MDE1MTUwMTk1NzE5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI2RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEyNDEzNTkxOTI0MzU4OTg0MjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5UTIyODc5MDg0NDMyNzA2NDIzOUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEiNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRNDE3NjgxNzQ3NTU4MDU1MDE2MDhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTQzOTQyNDY2MjUxMzI0MTkyODM3RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USIyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GXXAtRiQ2JS1GZG82OVE1MTM4MDkxOTE3MDcyMzE0MjAyMTJGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0ZqckYxRl90LUZkbzY5UTUyODc2ODgyMDg3NjQ1NTAzMDAwOEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvNyMsTCokKUkieEdGKCIjPyIiIkZgX2wqJiIjJCpGYF9sKUZeX2wiIz5GYF9sISIiKiYiJCJHRmBfbClGXl9sIiM9RmBfbEZlX2wqJiIlIXopRmBfbClGXl9sIiM8RmBfbEZgX2wqJiInWCRHJEZgX2wpRl5fbCIjO0ZgX2xGZV9sKiYiKGBYPyNGYF9sKUZeX2wiIzpGYF9sRmBfbComIilHSWZKRmBfbClGXl9sIiM5RmBfbEZgX2wqJiIqQS5aOChGYF9sKUZeX2wiIzhGYF9sRmVfbComIitzKnolelhGYF9sKUZeX2wiIzdGYF9sRmBfbComIixxayVmZ2JGYF9sKUZeX2wiIzZGYF9sRmBfbComIi07Jj1dOkYnRmBfbClGXl9sIiM1RmBfbEZlX2wqJiIuZ2pEKmZPP0ZgX2wpRl5fbCIiKkZgX2xGYF9sKiYiLzpZRywlKXlVRmBfbClGXl9sIiIpRmBfbEZgX2wqJiIwKil6Ij1nISpcWEZgX2wpRl5fbCIiKEZgX2xGZV9sKiYiMT5kPl1eLDQ/RmBfbClGXl9sIiInRmBfbEZlX2wqJiIyRCUpKmVWIz5mOCVGYF9sKUZeX2wiIiZGYF9sRmBfbComIjJSVTFGViUzekdGYF9sKUZeX2wiIiVGYF9sRmBfbComIjQzO10wZXZ1Im88RmBfbClGXl9sIiIkRmBfbEZlX2wqJiI0UEc+QzhEbUMlUkZgX2wpRl5fbCIiI0ZgX2xGZV9sKiYiNTctVUpzcSI+NFEiRmBfbEZeX2xGYF9sRmVfbCI1MysuYmsoMyMpbyhHRmBfbA== LinBox characteristic polynomial lbCharpoly(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkstRiQ2Iy1JJW1zdXBHRiU2JS1JI21pR0YlNjlRInhGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGPS8lKnN1YnNjcmlwdEdGPS8lLHN1cGVyc2NyaXB0R0Y9LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGPS8lK2V4ZWN1dGFibGVHRj0vJSlyZWFkb25seUdGQC8lKWNvbXBvc2VkR0Y9LyUqY29udmVydGVkR0Y9LyUraW1zZWxlY3RlZEdGPS8lLHBsYWNlaG9sZGVyR0Y9LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkkvJS9tYXRoYmFja2dyb3VuZEdGTC8lK2ZvbnRmYW1pbHlHRjcvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjotSSNtbkdGJTY5USMyMEYoRjVGOEY7L0Y/Rj1GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG8vRl9vUSdub3JtYWxGKEZhby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtSSNtb0dGJTYzUSgmbWludXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y9LyUqc2VwYXJhdG9yR0Y9LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRigvJSdyc3BhY2VHRmpwLyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lMGZvbnRfc3R5bGVfbmFtZUdGZ24vJSVzaXplR0Y6LyUrZm9yZWdyb3VuZEdGSS8lK2JhY2tncm91bmRHRkwtRiQ2JS1GZG82OVEjOTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhby1GXnA2M1ExJkludmlzaWJsZVRpbWVzO0YoRmFwRmRwRmZwL0ZpcFEkMGVtRigvRlxxRl5zRl1xRl9xRmFxRmRxRmdxRmlxRltyRl1yRl9yRmFyRmNyLUYvNiVGMS1GZG82OVEjMTlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5USQyODFGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIzE4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam8tRl5wNjNRIitGKEZhcEZkcEZmcEZocEZbcUZdcUZfcUZhcUZkcUZncUZpcUZbckZdckZfckZhckZjci1GJDYlLUZkbzY5USU4NzkwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxN0YoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRJzMyODM0NUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTZGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USgyMjA0NTUzRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRKTMxNTkzMDI4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRKjcxMzQ3MDMyMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USs0NTc5NDc5OTcyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRLDU1NjA1OTQ2NDcwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRLTYyNzE1NTAxODUxNkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTBGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5US4yMDM2NTk5MjU2MzYwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEvNDI3ODg0MDEyODQ2MTVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTA0NTQ5OTA2MDE4MTc5ODlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjdGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTEyMDA5MDE1MTUwMTk1NzE5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI2RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEyNDEzNTkxOTI0MzU4OTg0MjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5UTIyODc5MDg0NDMyNzA2NDIzOUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEiNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRNDE3NjgxNzQ3NTU4MDU1MDE2MDhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTQzOTQyNDY2MjUxMzI0MTkyODM3RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USIyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GXXAtRiQ2JS1GZG82OVE1MTM4MDkxOTE3MDcyMzE0MjAyMTJGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0ZqckYxRl90LUZkbzY5UTUyODc2ODgyMDg3NjQ1NTAzMDAwOEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvNyMsTCokKUkieEdGKCIjPyIiIkZgX2wqJiIjJCpGYF9sKUZeX2wiIz5GYF9sISIiKiYiJCJHRmBfbClGXl9sIiM9RmBfbEZlX2wqJiIlIXopRmBfbClGXl9sIiM8RmBfbEZgX2wqJiInWCRHJEZgX2wpRl5fbCIjO0ZgX2xGZV9sKiYiKGBYPyNGYF9sKUZeX2wiIzpGYF9sRmBfbComIilHSWZKRmBfbClGXl9sIiM5RmBfbEZgX2wqJiIqQS5aOChGYF9sKUZeX2wiIzhGYF9sRmVfbComIitzKnolelhGYF9sKUZeX2wiIzdGYF9sRmBfbComIixxayVmZ2JGYF9sKUZeX2wiIzZGYF9sRmBfbComIi07Jj1dOkYnRmBfbClGXl9sIiM1RmBfbEZlX2wqJiIuZ2pEKmZPP0ZgX2wpRl5fbCIiKkZgX2xGYF9sKiYiLzpZRywlKXlVRmBfbClGXl9sIiIpRmBfbEZgX2wqJiIwKil6Ij1nISpcWEZgX2wpRl5fbCIiKEZgX2xGZV9sKiYiMT5kPl1eLDQ/RmBfbClGXl9sIiInRmBfbEZlX2wqJiIyRCUpKmVWIz5mOCVGYF9sKUZeX2wiIiZGYF9sRmBfbComIjJSVTFGViUzekdGYF9sKUZeX2wiIiVGYF9sRmBfbComIjQzO10wZXZ1Im88RmBfbClGXl9sIiIkRmBfbEZlX2wqJiI0UEc+QzhEbUMlUkZgX2wpRl5fbCIiI0ZgX2xGZV9sKiYiNTctVUpzcSI+NFEiRmBfbEZeX2xGYF9sRmVfbCI1MysuYmsoMyMpbyhHRmBfbA== Timing comparison t1:=time(CharacteristicPolynomial(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4xMDJGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJC0iISIkNyNGZXI= t2:=time(lbCharpoly(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4wMDZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiIichIiQ3I0Zlcg== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNy4wMDAwMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrKzwhIik= B:=Matrix(50,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn41MH54fjUwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn CharacteristicPolynomial(B,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNmJxLUkjbW9HRiU2M1EqJnVtaW51czA7RigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJmZhbHNlRigvJSpzZXBhcmF0b3JHRjUvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGOi8lKXN0cmV0Y2h5R0Y1LyUqc3ltbWV0cmljR0Y1LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGNS8lLm1vdmFibGVsaW1pdHNHRjUvJSdhY2NlbnRHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lJXNpemVHUSMxMkYoLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC1GJDYlLUkjbW5HRiU2OVFlbjI0NjUwODEyMzA2NjEwMDk4NzYyOTQ3NjQxODMzNTY0MjA0MjI5MTIwOTQ5OTAzNTkxNDkzMDc3NDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRltvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRMSZJbnZpc2libGVUaW1lcztGKC9GMVEmaW5maXhGKEYzRjZGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1JI21pR0YlNjlRInhGKEZpbkZcb0Zeby9GYW9GYnBGYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXEvRmRxUSdpdGFsaWNGKEZmcS1GLTYzUSIrRihGW3JGM0Y2L0Y5UTBtZWRpdW1tYXRoc3BhY2VGKC9GPEZockY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2Iy1JJW1zdXBHRiU2JUZdci1GZm42OVEjNTBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRi02M1EoJm1pbnVzO0YoRltyRjNGNkZnckZpckY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2JS1GZm42OVEkMjY2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVElNDAyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0OEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRJjI4MDA5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRmZuNjlRZW4zOTU4NjI4NTQzNTY2Mzk0NDMzODA1NjI1NjM0OTE3NDU2NjM5MTM4ODU2MzA2MTc2MzM5MjU0OTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGZHItRiQ2JS1GZm42OVEnODQ3NzgzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEpMzk0NjY5NTNGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USo1MzUxMDg3NThGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USs4NDU2OTUzNTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVEtMjQ5MjA4MTk1MzQ4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEuMjIwNDUxMjU3MjI2N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMDI0NTEyNDY2NTY2OTAyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRMTMwNzY4NDk2MDkwNTA5MjZGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UTIyNTg1NzQ0MzAwNjY0ODE0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMzIwNDg5NDIzNzg1NDU4OTIwOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRNTM3MDQ5OTEwNDIyOTYwNDIwOTMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE2MjA0MDc5Nzg5NzI2MDQ3NTg5NjM4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE3MzQ1MjcyMTM5NjM5NDMyNTIyMjUxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRODk0Mzg3NTE1MzY0NTQzMDY0MjA3NTk1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE5ODAxOTkyOTAwODk4MzY0MDg5MjcxMDYwRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE7MTI4MjA5OTc2ODc4MjM3NTA2NDg2MzEyNzRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UTsxNzYyNzQyNTk3OTExMzgxODQwMTc5OTQ0NkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRPTk5ODEwNjY1NzIxMjM2NDgyMzU1MTAyNDcxNzVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UT4zMjM2NDcwMTc4MzQ0NTc1NTUyMTk4Njg0ODM0N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRPzcwMjA4OTc4Mzk5MTA2Nzg5NjIxNTk3NTU1MDM1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRQTEyMjA0ODczNjYwMjk3MTgzMTAwMjQ0MzI0Mzg0NzE3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFCNTAwMDk5MzQ2MjQ0MjYzNjg5Mzc1MDM0MzUwNjk4MjkzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFDNjEwOTExODkwMjI2NjY2MDc4MDMyODk2MjAxNjM4MDI1MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRTI4NDIxNjQ0NjkwMTk3ODY4MjQwNTEyNzI5ODA3MTU0Njc1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRjEwMzUxNjcwMzI5OTQ0NjA0NjUwMTM5ODY2NTM4NzY1ODE1MzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUczMzAyMzMyNzc3NTk4ODcxMDM5NDQ0NzQ0MjEyNjc2MTIwMTA3OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSDEwMDQ4NDAzNzA1MTM2NjYzNTA3MzYwODE1MDgxNDA2MzIzMjY3MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSTg4NjUyNTMzOTc3OTQ0NDg3MjI5NDg0MzkxNTcxNzY2NTkyMTgxNzJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUoyMDAyODA4ODI2NzcwODc0NzQ3Njk2NDkzOTkzNDIxOTYzMzcxNjk0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRSzQ1MDUzNjgwOTUyMzA4NzkyOTQ3ODU4MDAyMzk1OTc1MDk3NDI0NDczN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRTTE0MzkwMTk5MzAxNTgxNzIyNDg2NDI3MTE0Mzk5NzAyODk1MDc1NTE1Njc2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzE2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFNNzEyODMwODY1MTgxNjYyNjY3NTIxNTk3Mzk2MTcwMzIwOTUwMzUxMDQ2MzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UU4zMzg0NDgzNDI5ODMxMjg2OTA0NzIxNzkxNTg0NTc1ODI4ODI5NjU3NDUxNDhGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UVAxMTY4Mzk1NzU5MTQwOTg4NDE5OTk5ODcyNjUyNTYzNzYxOTU2MzQ4MDI1NzEzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUDExMTAxNzQwMDU3NzQ3MTA0ODAyMTA4MDIxMjU3OTE4MjE2MzA3OTQ3ODk4NjY1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzEyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFRNzU3NzU0NTAxMDEzNzI4Njc0MjY5NjQ2NTUzNTEzMjU5NjA1NzIyODQ4MTc5OTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzExRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFSNTkzMzg4ODYxNTYyMzE2MTI5MDk4Mjk2MjU4ODAzODEzMDEzMDYzNTEzOTcwMzcwMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUzQ0MjAwMzk4MDUxODA3NTM4NzMxNDM0NTE1MTYyNTY4ODQ1MzEzODI2MjQxNjAyOTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVQyMzAyMTA3NDY3MDI0NDY4ODEwOTg0OTI1MTQ1MDI2Mzg5Njk4Nzc3MTg3NDYzMTcwNjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRVDgzNDIzNDUzNjk1NTU3MzI2MzQzODI1NzA1NTk2NjI5OTk4NTYzNjQ4MTg5MDM5NzEwN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFWNjgwNzc4MjQ1NDc4NzE5MzQ2ODAxMzIxNDg1MzIwNDIyMzYxNjAxMDYwMDMzNTgyNjE2MjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiNkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRVzQyOTUwMTEwODk3NDUwMjg1MzczNTQzOTU4NTIxNDUwODM4OTcyMTYxNjU5NzYxNTg2OTU3NUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFXMTY3NDkxMjI5NDE1MzY1NzUzMTc5MDg5MTYwMzE4MjAxOTM1Mjg2MjU5NDcwMDY3MTk5NDM5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVk2MDIyOTQ5MTYzNjY0MDgwOTYzODEzNTY4NTU4NDAwMjY1MTAyNDQ3MjQ0NTc1NDg1MjgzMDUyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USIzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFZODY5OTY4NzA4MDkwNDgxNTE3MTE5MjM3NDc2NjkwMDk4NzQ2MTAzMTY0MzUyMjAxNTA1OTQ4NTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiMkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzNyMsYnEqJiJlbld4SVwiZi4qXDQ3SFU/a04kPWtaSHcpNDVtSTczbEMiIiJJInhHRihGX2JtISIiKiQpRmBibSIjXUZfYm1GX2JtKiYiJG0jRl9ibSlGYGJtIiNcRl9ibUZhYm0qJiIlQFNGX2JtKUZgYm0iI1tGX2JtRl9ibSomIiY0IUdGX2JtKUZgYm0iI1pGX2JtRl9ibSJlbldcRFJqPDFqJilRIlJtWDxcakRjIVFWJVJtTmFHJ2VSRl9ibSomIickeVopRl9ibSlGYGJtIiNZRl9ibUZfYm0qJiIpYHBZUkZfYm0pRmBibSIjWEZfYm1GYWJtKiYiKmUoM15gRl9ibSlGYGJtIiNXRl9ibUZfYm0qJiIrY04mcFgpRl9ibSlGYGJtIiNWRl9ibUZfYm0qJiItW2A+MyNcI0ZfYm0pRmBibSIjVUZfYm1GX2JtKiYiLm5BZDdYPyNGX2JtKUZgYm0iI1RGX2JtRmFibSomIjBDIXBjbUNeQ0ZfYm0pRmBibSIjU0ZfYm1GYWJtKiYiMUU0MDQnXG8yJEZfYm0pRmBibSIjUkZfYm1GX2JtKiYiMlUiW20rVnUmZSNGX2JtKUZgYm0iI1FGX2JtRl9ibSomIjMzIyplYXlCJSpbP0ZfYm0pRmBibSIjUEZfYm1GYWJtKiYiNUs0VWdIVTUqXHEkRl9ibSlGYGJtIiNPRl9ibUZhYm0qJiI2UScqZVpncyp5elM/Rl9ibSlGYGJtIiNORl9ibUZfYm0qJiI3PURBRFZSJ1JARlgkRl9ibSlGYGJtIiNNRl9ibUZfYm0qJiI4JmYyVTFWWE86dlElKkZfYm0pRmBibSIjTEZfYm1GYWJtKiYiOWc1RiozayQpKjMhSCo+ISlGX2JtKUZgYm0iI0tGX2JtRmFibSomIjt1N2pbMXZCeW8oKjQjRyJGX2JtKUZgYm0iI0pGX2JtRmFibSomIjtZJSp6LCU9UTZ6ZlVGdyJGX2JtKUZgYm0iI0lGX2JtRmFibSomIj12ckM1YkJbTzdzbDEiKSoqRl9ibSlGYGJtIiNIRl9ibUZhYm0qJiI+WiRbbyk+X2JkVyR5LFpPS0ZfYm0pRmBibSIjR0ZfYm1GX2JtKiYiP2YuYnZmQCcqeTEiKlJ5KjMtKEZfYm0pRmBibSIjRkZfYm1GX2JtKiYiQTxaUUNWQytKPShIZ08oWz83Rl9ibSlGYGJtIiNFRl9ibUZfYm0qJiJCJEgpcF1WLnYkKm9qVUNZJCo0KyZGX2JtKUZgYm0iI0RGX2JtRl9ibSomIkNfLVE7PycqRy55Z21FLSo9IjRoRl9ibSlGYGJtIiNDRl9ibUZfYm0qJiJFZm5hciEpSEZeUyNveT4hcFc7VUdGX2JtKUZgYm0iI0JGX2JtRmFibSomIkZSOmV3UWwnKVIsbC9ZJSpILm5eLiJGX2JtKUZgYm0iI0FGX2JtRmFibSomIkd6NT9objdVdVclUjUoKSlmeEZMLUxGX2JtKUZgYm0iI0BGX2JtRl9ibSomIkhxRUJqUyIzOjNPMk5tT15xLiVbKyJGX2JtKUZgYm0iIz9GX2JtRmFibSomIklzIj0jZm08ZCJSJVtIc1tXeihSYF8nKSlGX2JtKUZgYm0iIz5GX2JtRmFibSomIkpVcHJMJz5VJCpSXCdwWlooM3hFKTNHKyNGX2JtKUZgYm0iIz1GX2JtRl9ibSomIktQWkN1NHZmUi0hZXklSHozQiY0b2BdJUZfYm0pRmBibSIjPEZfYm1GX2JtKiYiTXdjXnZdKkdxKlI5clUnW0E8ZSwkKj4hUjlGX2JtKUZgYm0iIztGX2JtRmFibSomIk1KWTVOXTRLcWhSKGZAdm1pOz1sMyRHckZfYm0pRmBibSIjOkZfYm1GYWJtKiYiTltedWxIKUdlZCVlInpAWiFwR0opSE1bJVEkRl9ibSlGYGJtIiM5Rl9ibUZhYm0qJiJQTXJEIVtqJj53akRscykqKio+JSkpNDlmZFJvNkZfYm0pRmBibSIjOEZfYm1GYWJtKiYiUGwnKSp5JXpJOyM9ekRAITNAIVs1WngwUzw1NkZfYm0pRmBibSIjN0ZfYm1GX2JtKiYiUWMqeiJbR3MwJ2ZLXmBsa3BVbkdQLCxYdmQoRl9ibSlGYGJtIiM2Rl9ibUZhYm0qJiJSK1BxUl5qSSw4USEpZWlIKTRIaEppOicpKVEkZkZfYm0pRmBibSIjNUZfYm1GYWJtKiYiU1dIZ1RpI1FKWClvRDs6WFZKKFF2IT0wKVIrVSVGX2JtKUZgYm0iIipGX2JtRl9ibSomIlRncUpZKD14KClwKlFFXTlEXCk0IilvVy1udTUtQkZfYm0pRmBibSIiKUZfYm1GX2JtKiYiVDJyUiEqPVtPYykqKkhtZjBkI1FNRXRiJnBgTVUkKUZfYm0pRmBibSIiKEZfYm1GYWJtKiYiVj87RWVMKzEsO09BL0smW0A4IW9NPih5YUN5Mm9GX2JtKUZgYm0iIidGX2JtRmFibSomIld2JnBlaChmOztzKlEzWEAmZVJhdGBHXXUqMzZdSCVGX2JtKUZgYm0iIiZGX2JtRl9ibSomIldSJSo+bitaZmlHTj4/PS47KjN6SnZsYFRIN1xuIkZfYm0pRmBibSIiJUZfYm1GX2JtKiYiWUYwJEcmW3ZYQ1pDNWwtU2Umb04iUSc0M2tPO1xILSdGX2JtKUZgYm0iIiRGX2JtRl9ibSomIllhW2ZdLEFOa0o1WSgpNCFwd3VCPnJeIlshNDMobypwKUZfYm0pRmBibSIiI0ZfYm1GX2Jt lbCharpoly(B,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiJyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNmJxLUkjbW9HRiU2M1EqJnVtaW51czA7RigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJmZhbHNlRigvJSpzZXBhcmF0b3JHRjUvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGOi8lKXN0cmV0Y2h5R0Y1LyUqc3ltbWV0cmljR0Y1LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGNS8lLm1vdmFibGVsaW1pdHNHRjUvJSdhY2NlbnRHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lJXNpemVHUSMxMkYoLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC1GJDYlLUkjbW5HRiU2OVFlbjI0NjUwODEyMzA2NjEwMDk4NzYyOTQ3NjQxODMzNTY0MjA0MjI5MTIwOTQ5OTAzNTkxNDkzMDc3NDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRltvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRMSZJbnZpc2libGVUaW1lcztGKC9GMVEmaW5maXhGKEYzRjZGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1JI21pR0YlNjlRInhGKEZpbkZcb0Zeby9GYW9GYnBGYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXEvRmRxUSdpdGFsaWNGKEZmcS1GLTYzUSIrRihGW3JGM0Y2L0Y5UTBtZWRpdW1tYXRoc3BhY2VGKC9GPEZockY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2Iy1JJW1zdXBHRiU2JUZdci1GZm42OVEjNTBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRi02M1EoJm1pbnVzO0YoRltyRjNGNkZnckZpckY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2JS1GZm42OVEkMjY2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVElNDAyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0OEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRJjI4MDA5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRmZuNjlRZW4zOTU4NjI4NTQzNTY2Mzk0NDMzODA1NjI1NjM0OTE3NDU2NjM5MTM4ODU2MzA2MTc2MzM5MjU0OTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGZHItRiQ2JS1GZm42OVEnODQ3NzgzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEpMzk0NjY5NTNGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USo1MzUxMDg3NThGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USs4NDU2OTUzNTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVEtMjQ5MjA4MTk1MzQ4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEuMjIwNDUxMjU3MjI2N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMDI0NTEyNDY2NTY2OTAyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRMTMwNzY4NDk2MDkwNTA5MjZGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UTIyNTg1NzQ0MzAwNjY0ODE0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMzIwNDg5NDIzNzg1NDU4OTIwOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRNTM3MDQ5OTEwNDIyOTYwNDIwOTMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE2MjA0MDc5Nzg5NzI2MDQ3NTg5NjM4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE3MzQ1MjcyMTM5NjM5NDMyNTIyMjUxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRODk0Mzg3NTE1MzY0NTQzMDY0MjA3NTk1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE5ODAxOTkyOTAwODk4MzY0MDg5MjcxMDYwRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE7MTI4MjA5OTc2ODc4MjM3NTA2NDg2MzEyNzRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UTsxNzYyNzQyNTk3OTExMzgxODQwMTc5OTQ0NkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRPTk5ODEwNjY1NzIxMjM2NDgyMzU1MTAyNDcxNzVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UT4zMjM2NDcwMTc4MzQ0NTc1NTUyMTk4Njg0ODM0N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRPzcwMjA4OTc4Mzk5MTA2Nzg5NjIxNTk3NTU1MDM1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRQTEyMjA0ODczNjYwMjk3MTgzMTAwMjQ0MzI0Mzg0NzE3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFCNTAwMDk5MzQ2MjQ0MjYzNjg5Mzc1MDM0MzUwNjk4MjkzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFDNjEwOTExODkwMjI2NjY2MDc4MDMyODk2MjAxNjM4MDI1MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRTI4NDIxNjQ0NjkwMTk3ODY4MjQwNTEyNzI5ODA3MTU0Njc1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRjEwMzUxNjcwMzI5OTQ0NjA0NjUwMTM5ODY2NTM4NzY1ODE1MzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUczMzAyMzMyNzc3NTk4ODcxMDM5NDQ0NzQ0MjEyNjc2MTIwMTA3OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSDEwMDQ4NDAzNzA1MTM2NjYzNTA3MzYwODE1MDgxNDA2MzIzMjY3MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSTg4NjUyNTMzOTc3OTQ0NDg3MjI5NDg0MzkxNTcxNzY2NTkyMTgxNzJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUoyMDAyODA4ODI2NzcwODc0NzQ3Njk2NDkzOTkzNDIxOTYzMzcxNjk0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRSzQ1MDUzNjgwOTUyMzA4NzkyOTQ3ODU4MDAyMzk1OTc1MDk3NDI0NDczN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRTTE0MzkwMTk5MzAxNTgxNzIyNDg2NDI3MTE0Mzk5NzAyODk1MDc1NTE1Njc2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzE2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFNNzEyODMwODY1MTgxNjYyNjY3NTIxNTk3Mzk2MTcwMzIwOTUwMzUxMDQ2MzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UU4zMzg0NDgzNDI5ODMxMjg2OTA0NzIxNzkxNTg0NTc1ODI4ODI5NjU3NDUxNDhGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UVAxMTY4Mzk1NzU5MTQwOTg4NDE5OTk5ODcyNjUyNTYzNzYxOTU2MzQ4MDI1NzEzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUDExMTAxNzQwMDU3NzQ3MTA0ODAyMTA4MDIxMjU3OTE4MjE2MzA3OTQ3ODk4NjY1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzEyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFRNzU3NzU0NTAxMDEzNzI4Njc0MjY5NjQ2NTUzNTEzMjU5NjA1NzIyODQ4MTc5OTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzExRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFSNTkzMzg4ODYxNTYyMzE2MTI5MDk4Mjk2MjU4ODAzODEzMDEzMDYzNTEzOTcwMzcwMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUzQ0MjAwMzk4MDUxODA3NTM4NzMxNDM0NTE1MTYyNTY4ODQ1MzEzODI2MjQxNjAyOTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVQyMzAyMTA3NDY3MDI0NDY4ODEwOTg0OTI1MTQ1MDI2Mzg5Njk4Nzc3MTg3NDYzMTcwNjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRVDgzNDIzNDUzNjk1NTU3MzI2MzQzODI1NzA1NTk2NjI5OTk4NTYzNjQ4MTg5MDM5NzEwN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFWNjgwNzc4MjQ1NDc4NzE5MzQ2ODAxMzIxNDg1MzIwNDIyMzYxNjAxMDYwMDMzNTgyNjE2MjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiNkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRVzQyOTUwMTEwODk3NDUwMjg1MzczNTQzOTU4NTIxNDUwODM4OTcyMTYxNjU5NzYxNTg2OTU3NUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFXMTY3NDkxMjI5NDE1MzY1NzUzMTc5MDg5MTYwMzE4MjAxOTM1Mjg2MjU5NDcwMDY3MTk5NDM5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVk2MDIyOTQ5MTYzNjY0MDgwOTYzODEzNTY4NTU4NDAwMjY1MTAyNDQ3MjQ0NTc1NDg1MjgzMDUyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USIzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFZODY5OTY4NzA4MDkwNDgxNTE3MTE5MjM3NDc2NjkwMDk4NzQ2MTAzMTY0MzUyMjAxNTA1OTQ4NTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiMkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzNyMsYnEqJiJlbld4SVwiZi4qXDQ3SFU/a04kPWtaSHcpNDVtSTczbEMiIiJJInhHRihGX2JtISIiKiQpRmBibSIjXUZfYm1GX2JtKiYiJG0jRl9ibSlGYGJtIiNcRl9ibUZhYm0qJiIlQFNGX2JtKUZgYm0iI1tGX2JtRl9ibSomIiY0IUdGX2JtKUZgYm0iI1pGX2JtRl9ibSJlbldcRFJqPDFqJilRIlJtWDxcakRjIVFWJVJtTmFHJ2VSRl9ibSomIickeVopRl9ibSlGYGJtIiNZRl9ibUZfYm0qJiIpYHBZUkZfYm0pRmBibSIjWEZfYm1GYWJtKiYiKmUoM15gRl9ibSlGYGJtIiNXRl9ibUZfYm0qJiIrY04mcFgpRl9ibSlGYGJtIiNWRl9ibUZfYm0qJiItW2A+MyNcI0ZfYm0pRmBibSIjVUZfYm1GX2JtKiYiLm5BZDdYPyNGX2JtKUZgYm0iI1RGX2JtRmFibSomIjBDIXBjbUNeQ0ZfYm0pRmBibSIjU0ZfYm1GYWJtKiYiMUU0MDQnXG8yJEZfYm0pRmBibSIjUkZfYm1GX2JtKiYiMlUiW20rVnUmZSNGX2JtKUZgYm0iI1FGX2JtRl9ibSomIjMzIyplYXlCJSpbP0ZfYm0pRmBibSIjUEZfYm1GYWJtKiYiNUs0VWdIVTUqXHEkRl9ibSlGYGJtIiNPRl9ibUZhYm0qJiI2UScqZVpncyp5elM/Rl9ibSlGYGJtIiNORl9ibUZfYm0qJiI3PURBRFZSJ1JARlgkRl9ibSlGYGJtIiNNRl9ibUZfYm0qJiI4JmYyVTFWWE86dlElKkZfYm0pRmBibSIjTEZfYm1GYWJtKiYiOWc1RiozayQpKjMhSCo+ISlGX2JtKUZgYm0iI0tGX2JtRmFibSomIjt1N2pbMXZCeW8oKjQjRyJGX2JtKUZgYm0iI0pGX2JtRmFibSomIjtZJSp6LCU9UTZ6ZlVGdyJGX2JtKUZgYm0iI0lGX2JtRmFibSomIj12ckM1YkJbTzdzbDEiKSoqRl9ibSlGYGJtIiNIRl9ibUZhYm0qJiI+WiRbbyk+X2JkVyR5LFpPS0ZfYm0pRmBibSIjR0ZfYm1GX2JtKiYiP2YuYnZmQCcqeTEiKlJ5KjMtKEZfYm0pRmBibSIjRkZfYm1GX2JtKiYiQTxaUUNWQytKPShIZ08oWz83Rl9ibSlGYGJtIiNFRl9ibUZfYm0qJiJCJEgpcF1WLnYkKm9qVUNZJCo0KyZGX2JtKUZgYm0iI0RGX2JtRl9ibSomIkNfLVE7PycqRy55Z21FLSo9IjRoRl9ibSlGYGJtIiNDRl9ibUZfYm0qJiJFZm5hciEpSEZeUyNveT4hcFc7VUdGX2JtKUZgYm0iI0JGX2JtRmFibSomIkZSOmV3UWwnKVIsbC9ZJSpILm5eLiJGX2JtKUZgYm0iI0FGX2JtRmFibSomIkd6NT9objdVdVclUjUoKSlmeEZMLUxGX2JtKUZgYm0iI0BGX2JtRl9ibSomIkhxRUJqUyIzOjNPMk5tT15xLiVbKyJGX2JtKUZgYm0iIz9GX2JtRmFibSomIklzIj0jZm08ZCJSJVtIc1tXeihSYF8nKSlGX2JtKUZgYm0iIz5GX2JtRmFibSomIkpVcHJMJz5VJCpSXCdwWlooM3hFKTNHKyNGX2JtKUZgYm0iIz1GX2JtRl9ibSomIktQWkN1NHZmUi0hZXklSHozQiY0b2BdJUZfYm0pRmBibSIjPEZfYm1GX2JtKiYiTXdjXnZdKkdxKlI5clUnW0E8ZSwkKj4hUjlGX2JtKUZgYm0iIztGX2JtRmFibSomIk1KWTVOXTRLcWhSKGZAdm1pOz1sMyRHckZfYm0pRmBibSIjOkZfYm1GYWJtKiYiTltedWxIKUdlZCVlInpAWiFwR0opSE1bJVEkRl9ibSlGYGJtIiM5Rl9ibUZhYm0qJiJQTXJEIVtqJj53akRscykqKio+JSkpNDlmZFJvNkZfYm0pRmBibSIjOEZfYm1GYWJtKiYiUGwnKSp5JXpJOyM9ekRAITNAIVs1WngwUzw1NkZfYm0pRmBibSIjN0ZfYm1GX2JtKiYiUWMqeiJbR3MwJ2ZLXmBsa3BVbkdQLCxYdmQoRl9ibSlGYGJtIiM2Rl9ibUZhYm0qJiJSK1BxUl5qSSw4USEpZWlIKTRIaEppOicpKVEkZkZfYm0pRmBibSIjNUZfYm1GYWJtKiYiU1dIZ1RpI1FKWClvRDs6WFZKKFF2IT0wKVIrVSVGX2JtKUZgYm0iIipGX2JtRl9ibSomIlRncUpZKD14KClwKlFFXTlEXCk0IilvVy1udTUtQkZfYm0pRmBibSIiKUZfYm1GX2JtKiYiVDJyUiEqPVtPYykqKkhtZjBkI1FNRXRiJnBgTVUkKUZfYm0pRmBibSIiKEZfYm1GYWJtKiYiVj87RWVMKzEsO09BL0smW0A4IW9NPih5YUN5Mm9GX2JtKUZgYm0iIidGX2JtRmFibSomIld2JnBlaChmOztzKlEzWEAmZVJhdGBHXXUqMzZdSCVGX2JtKUZgYm0iIiZGX2JtRl9ibSomIldSJSo+bitaZmlHTj4/PS47KjN6SnZsYFRIN1xuIkZfYm0pRmBibSIiJUZfYm1GX2JtKiYiWUYwJEcmW3ZYQ1pDNWwtU2Umb04iUSc0M2tPO1xILSdGX2JtKUZgYm0iIiRGX2JtRl9ibSomIllhW2ZdLEFOa0o1WSgpNCFwd3VCPnJeIlshNDMobypwKUZfYm0pRmBibSIiI0ZfYm1GX2Jt t1:=time(CharacteristicPolynomial(B,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmNC42NTlGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJWZZISIkNyNGZXI= t2:time(lbCharpoly(B,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjWiEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjA4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIjIykhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw3NzYuNTAwMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrbHghIig=
<Text-field style="Heading 3" layout="Heading 3">Linear System Solving</Text-field> n:=200;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQyMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIzcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen);b:=Vector(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple linear system solving x1:=LinearSolve(A,b, method=modular);x1[1]; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjeDFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== NiQtSSZtZnJhY0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDYqLUkjbW5HRiU2OVFhXWwmbWludXM7NTI3NDE2MTU0NzUxOTUxMDIzMTE3MTU1OTY4NjczNTQ2NDg0MjE2MzA0MTM3MTk5MjE2OTM0MDkxODcxNTUxMTg3Mjg4MjA0MDg4NjE5MjIwNDczNjMxNDQ1NTEwOTI5ODE4MDU0NzM3MDg3Mjc4NTk3MDUzNzYxNzg3MTQ3ODU1MjQxNTM2NzU0NDYxMTE1MTE1OTgxOTMxNzM5NzU4MTk3MTkwNDYxNjAzNDAxMDA4MzEzNjI4MDkyNTQzOTg0MjY0MzY3NTEyNjA0Mzg4NDk5NDM4ODU0Mjc5MzY4NDExNDU0NzM5MTAxODA1MjYyMzgxNjI0Mjk5NDYyMTI2NzA4NjQ1MDQxMjU0NDgzNzE2MTk0MTg2NzU3NDEwNjlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtRi02OVFpXGwzOTc3OTY3NDIxODI4ODU1MzcwNDAwODQ3NDkyMzA2MDk1OTYyMjczNTkwMTYwMjM2NDAyNzcwMTM4NzU4NjY0MTcyOTQyMTQzNTI2MjkxMjM4MzgzNjI3MTk5NjcxMDY3MzU3ODE2ODUyNjUyMTkzMTM5MDc0OTA1MTAyNzg2OTg0ODY0NTA2NTY0OTc3MzU2NjM3MzgzOTIyNjU3Nzk2NzMwNzY4ODExNTgwMDQ2OTMzMTg4MTQ2MjI2OTg3NTY0MzI2MDE5MDk4MjIwMjQwOTIzNDU0Mzg5NjQwMDI1NjAwNDY3MTMxOTM2NjA5NzY2MTkyNzY5MzY5MjQyMDQ5NDI3NzIyNTczODkyMDk3NDYwMTM3ODU0Njk5OTAzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJS5saW5ldGhpY2tuZXNzR1EiMUYoLyUrZGVub21hbGlnbkdRJ2NlbnRlckYoLyUpbnVtYWxpZ25HRmZvLyUpYmV2ZWxsZWRHRjgvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRjcjIyFqXGxwNXV2Jz0lPjtQW2E3L1gnM243aSUqSEM7UWlfIT01UlpYNiVvJHpVJilRJSpcKVEvRV5uVkUlKVJhIzRHT0ozNVMuO1khPig+ZShSPCQ+KWY2OjZZYW5gVF8meTkoeWhQMChmeXMzUFowPSlINF5YOWp0L0E+JykzLyMpRyg9XjooPTRNcEAqPlBUSTtVW1lObm9mOjxKLV4+dmFoVEYmImlcbC4qKnBheThndTQjKlFkQXhVXD9DcCRwRj5tKDRtJD44bi9nRCtrKlFhTSM0Qz8jKTQ+Z0trdilwQVkiKT1McC8hZTYpbzJ0J3pkRSNSUVBtTnhcYzFYJ1spcHktXiFcMlJKPl9FJm8ieU5uNW4qPkZPUVE3SEVOOVVIPGsnZShRLHgta0JnLGZ0QSdmNDFCXFozU3FgJilHPVVueihS LinBox linear system solving x2:=lbSolve(A,b);x2[1]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkbyMhIiQ= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjeDJGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== NiQtSSZtZnJhY0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDYqLUkjbW5HRiU2OVFhXWwmbWludXM7NTI3NDE2MTU0NzUxOTUxMDIzMTE3MTU1OTY4NjczNTQ2NDg0MjE2MzA0MTM3MTk5MjE2OTM0MDkxODcxNTUxMTg3Mjg4MjA0MDg4NjE5MjIwNDczNjMxNDQ1NTEwOTI5ODE4MDU0NzM3MDg3Mjc4NTk3MDUzNzYxNzg3MTQ3ODU1MjQxNTM2NzU0NDYxMTE1MTE1OTgxOTMxNzM5NzU4MTk3MTkwNDYxNjAzNDAxMDA4MzEzNjI4MDkyNTQzOTg0MjY0MzY3NTEyNjA0Mzg4NDk5NDM4ODU0Mjc5MzY4NDExNDU0NzM5MTAxODA1MjYyMzgxNjI0Mjk5NDYyMTI2NzA4NjQ1MDQxMjU0NDgzNzE2MTk0MTg2NzU3NDEwNjlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtRi02OVFpXGwzOTc3OTY3NDIxODI4ODU1MzcwNDAwODQ3NDkyMzA2MDk1OTYyMjczNTkwMTYwMjM2NDAyNzcwMTM4NzU4NjY0MTcyOTQyMTQzNTI2MjkxMjM4MzgzNjI3MTk5NjcxMDY3MzU3ODE2ODUyNjUyMTkzMTM5MDc0OTA1MTAyNzg2OTg0ODY0NTA2NTY0OTc3MzU2NjM3MzgzOTIyNjU3Nzk2NzMwNzY4ODExNTgwMDQ2OTMzMTg4MTQ2MjI2OTg3NTY0MzI2MDE5MDk4MjIwMjQwOTIzNDU0Mzg5NjQwMDI1NjAwNDY3MTMxOTM2NjA5NzY2MTkyNzY5MzY5MjQyMDQ5NDI3NzIyNTczODkyMDk3NDYwMTM3ODU0Njk5OTAzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJS5saW5ldGhpY2tuZXNzR1EiMUYoLyUrZGVub21hbGlnbkdRJ2NlbnRlckYoLyUpbnVtYWxpZ25HRmZvLyUpYmV2ZWxsZWRHRjgvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRjcjIyFqXGxwNXV2Jz0lPjtQW2E3L1gnM243aSUqSEM7UWlfIT01UlpYNiVvJHpVJilRJSpcKVEvRV5uVkUlKVJhIzRHT0ozNVMuO1khPig+ZShSPCQ+KWY2OjZZYW5gVF8meTkoeWhQMChmeXMzUFowPSlINF5YOWp0L0E+JykzLyMpRyg9XjooPTRNcEAqPlBUSTtVW1lObm9mOjxKLV4+dmFoVEYmImlcbC4qKnBheThndTQjKlFkQXhVXD9DcCRwRj5tKDRtJD44bi9nRCtrKlFhTSM0Qz8jKTQ+Z0trdilwQVkiKT1McC8hZTYpbzJ0J3pkRSNSUVBtTnhcYzFYJ1spcHktXiFcMlJKPl9FJm8ieU5uNW4qPkZPUVE3SEVOOVVIPGsnZShRLHgta0JnLGZ0QSdmNDFCXFozU3FgJilHPVVueihS Timing comparison t1:=time(LinearSolve(A,b,method=modular)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmNC42MTNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJThZISIkNyNGZXI= t2:=time(lbSolve(A,b)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjE2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkbyIhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4zMjNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJEIkISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNC4yODE3MzM3NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrdkw8RzkhIik= n:=300;B:=Matrix(n,gen);b1:=Vector(n,gen); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQzMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJDcjRmVy LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4zMDB+eH4zMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjYjFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4zMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== t1:=time(LinearSolve(B,b1, method=modular)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTQuMDEwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiY1UyIhIiQ3I0Zlcg== t2:time(lbSolve(B,b1)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjMxOUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkPiQhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjgwNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMCkhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw0My4zNzQ2MTMwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKzhZUFYhIik=
<Text-field style="Heading 2" layout="Heading 2">Computation over finite fields</Text-field> restart():with(LinBox):with(LinearAlgebra):
<Text-field style="Heading 3" layout="Heading 3">Determinant</Text-field> n:=1000;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USUxMDAwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkibkdGKCIlKzU3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);B:=Modular:-Mod(p,A, integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5UShDX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== Maple determinant Modular:-Determinant(p,B); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 Determinant(A,method=modular[p]); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 LinBox determinant lbDeterminant(p, A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjk5MEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkISoqISIk NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 Timing comparison t1:=time(Modular:-Determinant(p,B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMi4xMDZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJTFAISIkNyNGZXI= t2:=time(Determinant(A,method=modular[p])); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMy4xODRGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJSU9JCEiJDcjRmVy t3:=time(lbDeterminant(p,A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjA0OUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlXDUhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS41MjBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0M0dGKCQiJT86ISIkNyNGZXI= t1/t3;t2/t3; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxLjM4NTUyNjMxNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrO2pfJlEiISIq NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwyLjA5NDczNjg0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrVW90JTQjISIq
<Text-field style="Heading 3" layout="Heading 3">Rank</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=1000;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USUxMDAwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkibkdGKCIlKzU3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);B:=Modular:-Mod(p,A, integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5UShDX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== Maple rank Modular:-Rank(p,B); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USUxMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiJSs1 LinBox rank lbRank(p, A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjA2NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlbDUhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USUxMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiJSs1 Timing comparison t1:=time(Modular:-Rank(p,B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS44MDhGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJTM9ISIkNyNGZXI= t2:=time(lbRank(p,A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjIzNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlTzchIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMi4wOTNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJSQ0IyEiJDcjRmVy t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5US0wLjg2MzgzMTgyMDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyQiKy8jPSRRJykhIzU=
<Text-field style="Heading 3" layout="Heading 3">Minimal Polynomial</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple minimal polynomial doesn't exist in Givaro::Modular Package LinBox minimal polynomial lbMinpoly(p,A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI4MEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkIUchIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNl9mbi1GJDYlLUkjbW5HRiU2OVEiNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y6LyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRS8lL21hdGhiYWNrZ3JvdW5kR0ZILyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNy1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjovJSpzZXBhcmF0b3JHRjovJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGXXAvJSlzdHJldGNoeUdGOi8lKnN5bW1ldHJpY0dGOi8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkUvJStiYWNrZ3JvdW5kR0ZILUklbXN1cEdGJTYlLUkjbWlHRiU2OVEieEYoRjJGNUY4L0Y8Rk9GPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbi9GXG9RJ2l0YWxpY0YoRl5vLUYvNjlRJDI0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRmFvNjNRIitGKEZkb0Znb0Zpby9GXHBRMG1lZGl1bW1hdGhzcGFjZUYoL0ZfcEZcc0ZgcEZicEZkcEZncEZqcEZccUZecUZgcUZicUZkcUZmcS1GJDYlLUYvNjlRIjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDI0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQyNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMzg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQzODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQzODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQzOTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM5MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDM5MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDM5M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDQyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDIzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDI0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USM0OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDExOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQxMjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTIzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRIzcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQxNTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQzNDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQ0MTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQ0MTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkNDEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzMDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzEyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDMxNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQzOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMzk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQ0NTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQ0NTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkNDU4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyRlx2RmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3JGaVxsRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3JGZ3dGZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyRl1gbEZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyRmNnbEZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbckZqc0ZlckZoci1GJDYjLUZpcTYlRltyRmN6RmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEjMTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USMxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USMxOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRIzIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEjMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEjMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USMyNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEjMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USMzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USMzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USMzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USMzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDM3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxNDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyRmR0RmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQ4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvRltyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNTAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ5OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDQ5OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQ5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQ0OTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkNDk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0ODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzQ4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQ0NTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkNDUxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkNDUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjOTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDEwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDEwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDMwMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDMwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMzA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzA3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzA4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USM5MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxNDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQyODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQyODJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USQyODNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQyODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQyODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDI4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzE2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkMzE3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDE5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDE5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDM1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDE0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDE0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDQ3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDIyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDIyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDIyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQyMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQyMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQyMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDIyNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMjE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDExMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMTE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDExNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDExN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkNDc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQ0NzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQxNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDE2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDE3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDIwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMjA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQyMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMjEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDIxNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQyMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDIxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDIxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDIxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDMzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzMzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzMzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMjMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyMzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDIzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMjM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMjk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyOTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDMwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRIzUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEjNTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USM1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRIzU5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDMyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDMzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDMzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDMzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDQwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQwN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDQwOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzQ0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQzNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxNDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQzNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkNDQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkNDQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDQ2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQzNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMzY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMTgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDE4NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDAzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDE3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxNzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQxNzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkMTgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDEyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDEyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQxNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxNzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDE3MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDE3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDE3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDE3NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDQzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQ0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQ0NDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQzMzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQ0MzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQzM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMjc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyODBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDQyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDI2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDI2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDI2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQyNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQyNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRIzgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM4NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEjODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEjODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USM4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDEwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQxMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxMDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxMDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEjNDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkMzgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDQ2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDQ2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQ0NjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQ0NzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USQ0NzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQ0NzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USM2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRIzYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRIzYzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDI4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDI5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMjkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDI1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDI1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDI1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDI1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQyNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQyNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQyNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDEzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDEzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDEzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDM3OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDM3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzODBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzIxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQzMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQzMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE0OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDE1MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRIzc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRIzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM4MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USM4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USM4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzQ2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEjNDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzI4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDYwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDQ2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQ2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQ2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyRl9kbEZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbckZmdkZlckZoci1GJDYjLUZpcTYlRltyRmh4RmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3JGLkZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbckZgc0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyRmBqbEZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbckZpeUZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDM0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDM0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDM1MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQzNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTY0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMTY2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDE2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQxOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDIwMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQyMDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQyMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMjA3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDIwOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQ0MDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXI3IyxgZm4qJiIiJiIiIilJInhHRigiJFMjRmVheEZlYXgqJiIiJ0ZlYXgpRmdheCIkVCNGZWF4RmVheComIiM5RmVheClGZ2F4IiRVI0ZlYXhGZWF4KiYiIzpGZWF4KUZnYXgiJFYjRmVheEZlYXgqJClGZ2F4IiRYI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRaI0ZlYXhGZWF4KiYiIipGZWF4KUZnYXgiJFsjRmVheEZlYXgqJiIiJEZlYXgpRmdheCIkXCNGZWF4RmVheComRmRheEZlYXgpRmdheCIkXSNGZWF4RmVheComIiM2RmVheClGZ2F4IiReI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRfI0ZlYXhGZWF4KiYiIiVGZWF4KUZnYXgiJCZRRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCdRRmVheEZlYXgqJiIiKUZlYXgpRmdheCIkKFFGZWF4RmVheComIiM7RmVheClGZ2F4IiQpUUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQhUkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQiUkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQjUkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQkUkZlYXhGZWF4KiYiIzVGZWF4KUZnYXgiJCVSRmVheEZlYXgqJClGZ2F4IiRAJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRBJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRCJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRDJUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiREJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRWJEZlYXhGZWF4KiYiIzdGZWF4KUZnYXgiI1xGZWF4RmVheComRmRheEZlYXgpRmdheCIjXUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiNeRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJD4iRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJD8iRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEEiRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJEIiRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJEMiRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEQiRmVheEZlYXgqJiIiI0ZlYXgpRmdheCIkRiJGZWF4RmVheComRmlkeEZlYXgpRmdheCIjcUZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiNyRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiI3NGZWF4RmVheComRmRheEZlYXgpRmdheCIkZCJGZWF4RmVheComRl5ieEZlYXgpRmdheCIkZSJGZWF4RmVheComRmlkeEZlYXgpRmdheCIkZiJGZWF4RmVheComIiM4RmVheClGZ2F4IiRnIkZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRjIkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRUJEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRVJEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRTJEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ0JUZlYXhGZWF4KiYiIihGZWF4KUZnYXgiJDUlRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJDclRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJDglRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJF8kRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGAkRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJDQkRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJDUkRmVheEZlYXgqJClGZ2F4IiQ2JEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQ3JEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ4JEZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQ6JEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQmUkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQnUkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQoUkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQpUkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRiJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRjJUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRkJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRlJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRmJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRhJUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiRcJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4RlxjeEZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4RmlleEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4RmdjeEZlYXhGZWF4KiZGZGF4RmVheClGZ2F4Rl9neEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4RmFqeEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4Rl5ieEZlYXhGZWF4KiQpRmdheEZpZHhGZWF4RmVheComRmBjeEZlYXgpRmdheCIjPEZlYXhGZWF4KiQpRmdheCIjPUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiM+RmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiIz9GZWF4RmVheComRmlleEZlYXgpRmdheCIjQEZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiNBRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiI0JGZWF4RmVheComRmFqeEZlYXgpRmdheCIjQ0ZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiNERmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI0VGZWF4RmVheComRl5ieEZlYXgpRmdheCIjRkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiNHRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI0hGZWF4RmVheComRlxjeEZlYXgpRmdheCIjSUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiNKRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiI0tGZWF4RmVheComRmJieEZlYXgpRmdheCIjTUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiNORmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiI09GZWF4RmVheComRlxjeEZlYXgpRmdheCIjUEZlYXhGZWF4KiQpRmdheCIjUkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiNTRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJHMkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJHUkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJHYkRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJFUiRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI2tGZWF4RmVheComRmRbeUZlYXgpRmdheCIjbEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiNtRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiI25GZWF4RmVheComRmJieEZlYXgpRmdheCIjb0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiNwRmVheEZlYXhGYmJ4RmVheComRmJieEZlYXgpRmdheCIkIVtGZWF4RmVheComRmRbeUZlYXgpRmdheCIkI1tGZWF4RmVheComRmBjeEZlYXgpRmdheCIkIltGZWF4RmVheComRmJieEZlYXhGZ2F4RmVheEZlYXgqJClGZ2F4IiQrJkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQqXEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQpXEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQoXEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQnXEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQmXEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQlXEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQkXEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQjXEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQiXEZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQqW0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQpW0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQoW0ZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQnW0ZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQmW0ZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQlW0ZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQkW0ZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRaJEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRbJEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRcJEZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQhXEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRMJEZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRNJEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRbJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRdJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiReJUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRfJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRgJUZlYXhGZWF4KiQpRmdheCIjJypGZWF4RmVheComRmVkeEZlYXgpRmdheCIjKCpGZWF4RmVheCokKUZnYXgiIykqRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiIyoqRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCsiRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCwiRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJC0kRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJC4kRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJC8kRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJDAkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJDEkRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJDIkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJDMkRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiIyIqRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiIyMqRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiIyQqRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFciRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCJHRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCNHRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJCRHRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCVHRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCZHRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCdHRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJClHRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJDskRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJDwkRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJD0kRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiJD4kRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJD8kRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCE+RmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCI+RmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCM+RmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCU+RmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJCY+RmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCc+RmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCg+RmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCk+RmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJCo9RmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJGYkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJGckRmVheEZlYXgqJClGZ2F4IiRoJEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRpJEZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRYIkZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiRZIkZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRwJEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRxJEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRyJEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiR6JUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQ/I0ZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRAI0ZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRBI0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRCI0ZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRDI0ZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiREI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRFI0ZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRGI0ZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRHI0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQ+I0ZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQ2IkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQ3IkZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiQ4IkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ5IkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQ6IkZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQ7IkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQ8IkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQ9IkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ0IkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiR0JUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiR1JUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiR2JUZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiR3JUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiR4JUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiR5JUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiReIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRfIkZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiRgIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRhIkZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQ7JUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ8JUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQ9JUZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQ+JUZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ/JUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQ0I0ZlYXhGZWF4KiQpRmdheCIkNSNGZWF4RmVheComRmRheEZlYXgpRmdheCIkNiNGZWF4RmVheComRmVkeEZlYXgpRmdheCIkNyNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkOCNGZWF4RmVheComRmFqeEZlYXgpRmdheCIkOSNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkOiNGZWF4RmVheComRmRheEZlYXgpRmdheCIkOyNGZWF4RmVheComRmBjeEZlYXgpRmdheCIkPCNGZWF4RmVheComRl5ieEZlYXgpRmdheCIkPSNGZWF4RmVheComRmJieEZlYXgpRmdheCIkTiRGZWF4RmVheComRltpeEZlYXgpRmdheCIkTyRGZWF4RmVheComRmdjeEZlYXgpRmdheCIkUCRGZWF4RmVheComRmlkeEZlYXgpRmdheCIkSCNGZWF4RmVheComRltpeEZlYXgpRmdheCIkSSNGZWF4RmVheComRmVkeEZlYXgpRmdheCIkSiNGZWF4RmVheComRmlkeEZlYXgpRmdheCIkSyNGZWF4RmVheComRmRheEZlYXgpRmdheCIkTCNGZWF4RmVheCokKUZnYXgiJE0jRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJE4jRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJE8jRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFAjRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJFEjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFIjRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJCZIRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJCdIRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJChIRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJClIRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJCpIRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJCskRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCwkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiI19GZWF4RmVheComRlxjeEZlYXgpRmdheCIjYUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiNiRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiI2RGZWF4RmVheComRltpeEZlYXgpRmdheCIjZUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiNmRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJDYlRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJEgkRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJEkkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJEokRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJEskRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJDElRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJDIlRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJDMlRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiI3VGZWF4RmVheComRl5keEZlYXgpRmdheCIkVyRGZWF4RmVheComRl9neEZlYXgpRmdheCIkYiRGZWF4RmVheComRmlleEZlYXgpRmdheCIkYyRGZWF4RmVheComRl5ieEZlYXgpRmdheCIkYSRGZWF4RmVheComRmlkeEZlYXgpRmdheCIkUyJGZWF4RmVheComRltpeEZlYXgpRmdheCIkVCJGZWF4RmVheComRmRheEZlYXgpRmdheCIkbSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkbiRGZWF4RmVheComRmdjeEZlYXgpRmdheCIkbyRGZWF4RmVheComRmlleEZlYXgpRmdheCIkVSVGZWF4RmVheComRmBjeEZlYXgpRmdheCIkViVGZWF4RmVheComRmRheEZlYXgpRmdheCIkVyVGZWF4RmVheComRmlleEZlYXgpRmdheCIkWCVGZWF4RmVheComRl5ieEZlYXgpRmdheCIkWSVGZWF4RmVheComRltpeEZlYXgpRmdheCIkWiVGZWF4RmVheComRmlleEZlYXgpRmdheCIkaiRGZWF4RmVheComRmpheEZlYXgpRmdheCIkayRGZWF4RmVheComRl9neEZlYXgpRmdheCIkbCRGZWF4RmVheComRmVkeEZlYXgpRmdheCIkIz1GZWF4RmVheComRmdjeEZlYXgpRmdheCIkJD1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkJT1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkJj1GZWF4RmVheComRmVkeEZlYXgpRmdheCIkJz1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkKD1GZWF4RmVheComRl5ieEZlYXgpRmdheCIkKT1GZWF4RmVheCokKUZnYXgiJCpSRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCslRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCwlRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJC0lRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJC4lRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJE4lRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJHYiRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJHciRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJHgiRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJHkiRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHoiRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCE9RmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCI9RmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEciRmVheEZlYXgqJClGZ2F4IiRIIkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRJIkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRKIkZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRLIkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRMIkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRNIkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiNWRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI1dGZWF4RmVheComRlxjeEZlYXgpRmdheCIjWEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRvIkZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRwIkZlYXhGZWF4KiQpRmdheCIkcSJGZWF4RmVheComRmRheEZlYXgpRmdheCIkciJGZWF4RmVheComRlxjeEZlYXgpRmdheCIkcyJGZWF4RmVheComRmpheEZlYXgpRmdheCIkdCJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkdSJGZWF4RmVheComRmpheEZlYXgpRmdheCIkUCVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkUSVGZWF4RmVheComRl5ieEZlYXgpRmdheCIkUiVGZWF4RmVheComRmpheEZlYXgpRmdheCIkUyVGZWF4RmVheComRltpeEZlYXgpRmdheCIkVCVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkUSRGZWF4RmVheComRmlleEZlYXgpRmdheCIkUiRGZWF4RmVheComRmRbeUZlYXgpRmdheCIkSiVGZWF4RmVheComRmlleEZlYXgpRmdheCIkSyVGZWF4RmVheComRmRheEZlYXgpRmdheCIkTCVGZWF4RmVheComRmpheEZlYXgpRmdheCIkTSVGZWF4RmVheComRmRheEZlYXgpRmdheCIkTyVGZWF4RmVheCokKUZnYXgiJHMjRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJHUjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHYjRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJHgjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHkjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJHojRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJCFHRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJHQjRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJEUlRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJEYlRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJEclRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJEglRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJEklRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJGsjRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJGwjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJG0jRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJG4jRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJG8jRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJHAjRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJHEjRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJHIjRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiIyYqRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiIyUqRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiIyQpRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiIyUpRmVheEZlYXgqJClGZ2F4IiMmKUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiMnKUZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiMoKUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiMpKUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiMqKUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiMhKkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQuIkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQvIkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQwIkZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQxIkZlYXhGZWF4KiQpRmdheCIkMiJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkMyJGZWF4RmVheComRmlkeEZlYXgpRmdheCIkLSJGZWF4RmVheComRltpeEZlYXgpRmdheCIjVEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQiUUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQjUUZlYXhGZWF4KiQpRmdheCIkJFFGZWF4RmVheComRl5keEZlYXgpRmdheCIkJVFGZWF4RmVheComRmRbeUZlYXgpRmdheCIkbSVGZWF4RmVheComRlxjeEZlYXgpRmdheCIkbiVGZWF4RmVheComRlxjeEZlYXgpRmdheCIkbyVGZWF4RmVheComRmFqeEZlYXgpRmdheCIkcCVGZWF4RmVheComRmBjeEZlYXgpRmdheCIkcSVGZWF4RmVheComRmJieEZlYXgpRmdheCIkciVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkcyVGZWF4RmVheComRlxjeEZlYXgpRmdheCIjZ0ZlYXhGZWF4KiQpRmdheCIjaEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiNpRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI2pGZWF4RmVheComRmlleEZlYXgpRmdheCIkKkdGZWF4RmVheComRmlkeEZlYXgpRmdheCIkIUhGZWF4RmVheComRltpeEZlYXgpRmdheCIkIkhGZWF4RmVheComRmRbeUZlYXgpRmdheCIkI0hGZWF4RmVheComRmlkeEZlYXgpRmdheCIkJEhGZWF4RmVheComRl5keEZlYXgpRmdheCIkJUhGZWF4RmVheComRl5keEZlYXgpRmdheCIkYSNGZWF4RmVheComRmlleEZlYXgpRmdheCIkYiNGZWF4RmVheComRmBjeEZlYXgpRmdheCIkYyNGZWF4RmVheCokKUZnYXgiJGQjRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiJGUjRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGYjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJGcjRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJGgjRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJGkjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJGojRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGAjRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJGQkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJGUkRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJE4iRmVheEZlYXgqJClGZ2F4IiRPIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRRIkZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRSIkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiR4JEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiR5JEZlYXhGZWF4KiQpRmdheCIkeiRGZWF4RmVheComRmlleEZlYXgpRmdheCIkIVFGZWF4RmVheComRltpeEZlYXgpRmdheCIkdyRGZWF4RmVheComRmJieEZlYXgpRmdheCIkQCRGZWF4RmVheComRmRheEZlYXgpRmdheCIkQSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkQiRGZWF4RmVheCokKUZnYXgiJEMkRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJEQkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJFoiRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJFwiRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJF0iRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI3ZGZWF4RmVheComRmRbeUZlYXgpRmdheCIjd0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiN4RmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI3lGZWF4RmVheComRmdjeEZlYXgpRmdheCIjekZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiMhKUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiMiKUZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiMjKUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiNZRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiI1pGZWF4RmVheComRl9neEZlYXgpRmdheCIjW0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRFJEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRGJEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRHJEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRnJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRoJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRpJUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRqJUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRrJUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRsJUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4RltpeEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4RmBjeEZlYXhGZWF4KiQpRmdheEZeZHhGZWF4RmVheComRmJieEZlYXgpRmdheEZkYXhGZWF4RmVheComRmRbeUZlYXgpRmdheEZqYXhGZWF4RmVheComRl5keEZlYXgpRmdheEZkW3lGZWF4RmVheComRmRbeUZlYXgpRmdheEZlZHhGZWF4RmVheComRmdjeEZlYXgpRmdheCIkWCRGZWF4RmVheComRmpheEZlYXgpRmdheCIkWSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkXSRGZWF4RmVheComRl9neEZlYXgpRmdheCIkXiRGZWF4RmVheComRmRbeUZlYXgpRmdheCIkaCJGZWF4RmVheComRl5keEZlYXgpRmdheCIkaSJGZWF4RmVheComRl5ieEZlYXgpRmdheCIkayJGZWF4RmVheComRmBjeEZlYXgpRmdheCIkbCJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkbSJGZWF4RmVheComRmFqeEZlYXgpRmdheCIkbiJGZWF4RmVheComRl9neEZlYXgpRmdheCIkKj5GZWF4RmVheComRl9neEZlYXgpRmdheCIkKyNGZWF4RmVheComRltpeEZlYXgpRmdheCIkLSNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkLiNGZWF4RmVheComRmpheEZlYXgpRmdheCIkLyNGZWF4RmVheComRltpeEZlYXgpRmdheCIkMCNGZWF4RmVheComRmlkeEZlYXgpRmdheCIkMSNGZWF4RmVheComRmdjeEZlYXgpRmdheCIkMiNGZWF4RmVheComRmFqeEZlYXgpRmdheCIkMyNGZWF4RmVheComRl9neEZlYXgpRmdheCIkLyVGZWF4RmVheA== Timing time(lbMinpoly(p,A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjIyN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkRiMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjcwNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMSghIiQ=
<Text-field style="Heading 3" layout="Heading 3">Characteristic Polynomial</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple Characteristic polynomial doesn't exist in Givaro::Modular package LinBox Characteristic polynomial lbCharpoly(p,A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjQ1M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkYCUhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNl1nbi1GJDYlLUkjbW5HRiU2OVEiN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y6LyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRS8lL21hdGhiYWNrZ3JvdW5kR0ZILyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNy1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjovJSpzZXBhcmF0b3JHRjovJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGXXAvJSlzdHJldGNoeUdGOi8lKnN5bW1ldHJpY0dGOi8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkUvJStiYWNrZ3JvdW5kR0ZILUklbXN1cEdGJTYlLUkjbWlHRiU2OVEieEYoRjJGNUY4L0Y8Rk9GPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbi9GXG9RJ2l0YWxpY0YoRl5vLUYvNjlRJDM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRmFvNjNRIitGKEZkb0Znb0Zpby9GXHBRMG1lZGl1bW1hdGhzcGFjZUYoL0ZfcEZcc0ZgcEZicEZkcEZncEZqcEZccUZecUZgcUZicUZkcUZmcS1GJDYjLUZpcTYlRltyLUYvNjlRJDM5MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDEwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDM4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMTAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTAzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDEwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDQzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRIzk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEjOTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USM5OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjOTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRIzk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRIzkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEjOTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkNDg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQ0ODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkNDEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEjODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USM4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRIzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRIzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRIzg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEjODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USM4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDM4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRIzc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM4MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USM3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRIzcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjNzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEjNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQ0MzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEjNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMzc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRIzY3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZockZpdkZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQ4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDQ4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0ODlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQ0OTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkNDkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDQzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0OTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgb0ZbckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxMTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQxMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQxMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQxMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMTA4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMTA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkMTM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMTM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDEzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQxMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEzM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDEzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQxMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQ0OTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMTMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkMTMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQ1MDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQxMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxMjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDEyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDExOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDExOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDExN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0OTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ5NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQxMTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxMTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxMTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMTcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMTczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDE3NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE2OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQxNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQxNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQxNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQxNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMTY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE2MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDM5OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE1NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USM0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTUwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDE0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE0M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQxNDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMTM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMjEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDIxNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDIxNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIxMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDIxMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDIxMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDQxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQyMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMjA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyMDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyMDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMjAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDIwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxOThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMTk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDIwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDE5M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQxOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxOTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxOTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMTkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMTg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMTg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMTg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE4NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE4NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDE4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMTc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDE3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0NDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDIyNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQyMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQyMjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQyMjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDIxOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDIxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI0MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDI0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDI0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQyMzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyMzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMjMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRJDIzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQyMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQ0MDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDIzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDIzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjY0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDQ0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjU3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjU1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDI1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI1NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0MThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQ0MTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQ0NDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQ0NDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0NDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQyNDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDI0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDI0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEkMjgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDI3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQyNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyNzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDI3MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDI3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQ0MDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkNDA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMjY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjkwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMjkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDI4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRJDI4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQ4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDQwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0MDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyOTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyOTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQ0MjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMjk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMjk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDMwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQzMDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQ0NTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMzA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDMwOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDMxMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQzMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkNDUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkNDU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEkNDU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMzE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzIwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMzIxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNDU3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQ0NTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbckZnc0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbckZldUZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyRi5GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3JGaF5sRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3JGXmFsRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbckZbdUZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDMyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQzMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQzMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbckZqd0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbckZhdEZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbckZgekZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQ0MjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0MjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3JGW1xsRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMzAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyRmp6RmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3JGaXZGZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQ2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDQ2MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQ2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMzQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDM0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMzM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMzM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USMyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMzU1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMzU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkNDY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNDY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjMTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USMxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbckZbaWxGZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbckZfdkZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyRltkbEZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQ2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDQ2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDQ2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0NjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMzUwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDM1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDM1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDM0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDM0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRIzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEjMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USMyNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USMyNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDMxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQzMThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USMyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRIzI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEjMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkNDI4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkNDMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRIzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEjMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEjMzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRIzMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEjMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDM2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USMzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USMzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRIzM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDQ3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQ0MTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USMzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USM0MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDM3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQzNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0MDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQ0MTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzNzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRIzQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRIzQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkNDc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDQ3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDMxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USM0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USM1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USM1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USM1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USM1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USM1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USM1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDQ3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDQ3OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDQ3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRIzYwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USM2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRIzYzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEjNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQ0MzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkNDMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkNDgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyNyMsXmduKiYiIigiIiIpSSJ4R0YoIiQhUkZjZHhGY2R4KiQpRmVkeCIkIlJGY2R4RmNkeComIiImRmNkeClGZWR4IiQjUkZjZHhGY2R4KiYiIzVGY2R4KUZlZHgiJCRSRmNkeEZjZHgqJiIiJUZjZHgpRmVkeCIkMCJGY2R4RmNkeComIiInRmNkeClGZWR4IiQxIkZjZHhGY2R4KiYiIzpGY2R4KUZlZHgiJChRRmNkeEZjZHgqJiIjOEZjZHgpRmVkeCIkKVFGY2R4RmNkeComRltleEZjZHgpRmVkeCIkKlFGY2R4RmNkeComIiIpRmNkeClGZWR4IiQtIkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQuIkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQvIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiMqKkZjZHhGY2R4KiQpRmVkeCIkKyJGY2R4RmNkeComIiIqRmNkeClGZWR4IiQsIkZjZHhGY2R4KiYiIzdGY2R4KUZlZHgiJE0lRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJE4lRmNkeEZjZHgqJiIjNkZjZHgpRmVkeCIjJypGY2R4RmNkeComRl9meEZjZHgpRmVkeCIjKCpGY2R4RmNkeComRmNleEZjZHgpRmVkeCIjKSpGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjJCpGY2R4RmNkeCokKUZlZHgiIyUqRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiIyYqRmNkeEZjZHgqJiIiI0ZjZHgpRmVkeCIjISpGY2R4RmNkeComRltleEZjZHgpRmVkeCIjIipGY2R4RmNkeComRmdleEZjZHgpRmVkeCIjIypGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkJFtGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkJVtGY2R4RmNkeComIiIkRmNkeClGZWR4IiQmW0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQlUUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQmUUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQnUUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQ2JUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQ4JUZjZHhGY2R4KiYiIztGY2R4KUZlZHgiIygpRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiIykpRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiIyUpRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiIyYpRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiIycpRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiIyIpRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiIyQpRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJCJRRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJCNRRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJCRRRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI3hGY2R4RmNkeComIiM5RmNkeClGZWR4IiN5RmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiIyEpRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiI3ZGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjd0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiNzRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiI3RGY2R4RmNkeComRmldeUZjZHgpRmVkeCIjdUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiREJEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRSJUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNwRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiI3FGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjckZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiR5JEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiR6JEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQhUUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNuRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI29GY2R4RmNkeEZfZnhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoW0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQpW0ZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiQqW0ZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiQkXEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQjXEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQlXEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRPJUZjZHhGY2R4KiQpRmVkeCIkUCVGY2R4RmNkeComRltleEZjZHgpRmVkeCIkUSVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkIVxGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkJVJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkJlJGY2R4RmNkeComRltleEZjZHhGZWR4RmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJDUiRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJDYiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDciRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDIiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJDMiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJDQiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJE8iRmNkeEZjZHgqJClGZWR4IiRQIkZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRRIkZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiROIkZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRMIkZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRNIkZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRLIkZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQqXEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRJIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRKIkZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRIIkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRGIkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRHIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRFIkZjZHhGY2R4KiQpRmVkeCIkKyZGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkQyJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkRCJGY2R4RmNkeComRltleEZjZHgpRmVkeCIkQiJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkQCJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkQSJGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkPyJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkJ1xGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkPSJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkPiJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkPCJGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkKFxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkKVxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkJlxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkOCJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkOSJGY2R4RmNkeCokKUZlZHgiJDoiRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJDsiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJHMiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHQiRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJHUiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJHAiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHEiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJHIiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJG0iRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJG4iRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJG8iRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGoiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGsiRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJGwiRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJGciRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGgiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGkiRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJChSRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJClSRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJCpSRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGQiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGUiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGYiRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGEiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGIiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGMiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJF4iRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJF8iRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJGAiRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiI1pGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkWyJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkXCJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkXSJGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkWCJGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkWSJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkWiJGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkVSJGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkViJGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkVyJGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkUiJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkUyJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkVCJGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkOCNGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkOSNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkOiNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkNSNGY2R4RmNkeComRltleEZjZHgpRmVkeCIkNiNGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkNyNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkOiVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkOyVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkMiNGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkMyNGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkNCNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkLyNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkMCNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkMSNGY2R4RmNkeCokKUZlZHgiJCwjRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJC0jRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJC4jRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJCk+RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJCo+RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJCsjRmNkeEZjZHgqJClGZWR4IiQkPkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQmPkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQoPkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQlPkZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhPkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQiPkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQjPkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoPUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQpPUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQqPUZjZHhGY2R4KiQpRmVkeCIkJT1GY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkJj1GY2R4RmNkeComRltleEZjZHgpRmVkeCIkJz1GY2R4RmNkeComRmNleEZjZHgpRmVkeCIkIj1GY2R4RmNkeComRl9leEZjZHgpRmVkeCIkIz1GY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkJD1GY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkeSJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkeiJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkIT1GY2R4RmNkeComRmpneEZjZHgpRmVkeCIkdiJGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkdyJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkeCJGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkUyVGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkVCVGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkVSVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkQyNGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkQiNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkQCNGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkQSNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkPyNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkPSNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkPiNGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkPCNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkVCNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkVSNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkUyNGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkTyNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkUSNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkUiNGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkTCNGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkTSNGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkTiNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkKyVGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkLCVGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkSSNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkSiNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkSyNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkSCNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkRiNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkbCNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkbSNGY2R4RmNkeComRltleEZjZHgpRmVkeCIkbiNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkaSNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkaiNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkayNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkWiVGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkWyVGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkXCVGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkZyNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkaCNGY2R4RmNkeCokKUZlZHgiJGUjRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJGMjRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGQjRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGIjRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJGAjRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGEjRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJF8jRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJDwlRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJD0lRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJD4lRmNkeEZjZHgqJClGZWR4IiRWJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRXJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRYJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRZJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRdI0ZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiReI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRcI0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiRaI0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRbI0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRZI0ZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRXI0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRYI0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRWI0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQhR0ZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiQiR0ZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQjR0ZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiR4I0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiR5I0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiR6I0ZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiR1I0ZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiR2I0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiR3I0ZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRyI0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRzI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiR0I0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQuJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiQvJUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQwJUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRvI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRwI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRxI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQqR0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhSEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQiSEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQnR0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiQoR0ZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQpR0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQkR0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQlR0ZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQmR0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRBJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQiW0ZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQxJUZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQyJUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQjSEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQkSEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQlSEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQ/JUZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRAJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRBJUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiREI0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQmSEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQnSEZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoSEZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiQrJEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQtJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQqSEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRdJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiReJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRfJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRHI0ZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQxJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQyJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQzJEZjZHhGY2R4KiQpRmVkeCIkLiRGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkLyRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkMCRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkNCRGY2R4RmNkeCokKUZlZHgiJDUkRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJDYkRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJDckRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJDkkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDokRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDgkRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJGAlRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGElRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGMlRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJD4kRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJD8kRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJEAkRmNkeEZjZHgqJClGZWR4IiRkJUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRlJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRmJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRDJEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRFJEZjZHhGY2R4KiQpRmVkeCIkQiRGY2R4RmNkeComRmZmeEZjZHgpRmVkeEZbZXhGY2R4RmNkeComRmdbeUZjZHgpRmVkeEZnZXhGY2R4RmNkeComRltmeEZjZHgpRmVkeEZiZHhGY2R4RmNkeComRmldeUZjZHgpRmVkeEZkaXhGY2R4RmNkeComRmZneEZjZHgpRmVkeEZkanhGY2R4RmNkeComRmJkeEZjZHgpRmVkeEZjZXhGY2R4RmNkeCokKUZlZHgiJEckRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJEgkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJEkkRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJEYkRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHhGZmZ4RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHhGX2V4RmNkeEZjZHgqJkZnW3lGY2R4KUZlZHhGZmd4RmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJEIlRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJEMlRmNkeEZjZHgqJkZkanhGY2R4KUZlZHhGYWh4RmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJCwkRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHhGamd4RmNkeEZjZHgqJkZbZXhGY2R4KUZlZHhGX2Z4RmNkeEZjZHgqJClGZWR4IiRLJEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRMJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRNJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRnJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRoJUZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRpJUZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRXJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRYJEZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRZJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRUJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRVJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRWJEZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRRJEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRSJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRTJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiROJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRPJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRQJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQtJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiM/RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI0BGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjQUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRiJEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRjJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRhJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRuJUZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRvJUZjZHhGY2R4KiQpRmVkeCIkcCVGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkcSVGY2R4RmNkeComRltleEZjZHgpRmVkeCIjPEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiM9RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHhGaV15RmNkeEZjZHgqJkZbZnhGY2R4KUZlZHhGW2Z4RmNkeEZjZHgqJkZbZXhGY2R4KUZlZHhGZ1t5RmNkeEZjZHgqJClGZWR4IiRqJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRrJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRsJUZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRtJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiRdJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRfJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRgJEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRaJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRbJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRmJEZjZHhGY2R4KiQpRmVkeCIkZyRGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkZCRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkRSVGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkRiVGY2R4RmNkeComRltleEZjZHgpRmVkeCIjRUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiNGRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiI0JGY2R4RmNkeComRltmeEZjZHgpRmVkeCIjQ0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNERmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJDwkRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJD0kRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiI0dGY2R4RmNkeComRltleEZjZHgpRmVkeCIjSEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiNJRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJGgkRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJGkkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGokRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJEclRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJEglRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJEklRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI01GY2R4RmNkeComRl9leEZjZHgpRmVkeCIjTkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiNKRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI0tGY2R4RmNkeComRl9meEZjZHgpRmVkeCIjTEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRKJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiREJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiRrJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRsJEZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRtJEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiNPRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1BGY2R4RmNkeComRltmeEZjZHgpRmVkeCIjUUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRyJUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRzJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiR0JUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQ5JUZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRuJEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRvJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRxJEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNSRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1NGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIjVEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiR0JEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiR1JEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRyJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQzJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQ0JUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQ1JUZjZHhGY2R4KiQpRmVkeCIkdiRGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkdyRGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkeCRGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjVUZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNWRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJHUlRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJHYlRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJHclRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1dGY2R4RmNkeCokKUZlZHgiI1hGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjWUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQ7JEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNbRmNkeEZjZHgqJClGZWR4IiNcRmNkeEZjZHgqJClGZWR4IiNdRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiI15GY2R4RmNkeComRmdbeUZjZHgpRmVkeCIjX0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiNgRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiI2FGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjZEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNlRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI2ZGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjYkZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiNjRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJHglRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJHklRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHolRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiI2dGY2R4RmNkeCokKUZlZHgiI2hGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjaUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiNqRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiI2tGY2R4RmNkeCokKUZlZHgiI2xGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIjbUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRKJUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiRLJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRMJUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhW0ZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQjW0ZjZHhGY2R4 Timing time(lbCharpoly(p,A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI2M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkaiMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjY1N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkZCchIiQ=
<Text-field style="Heading 3" layout="Heading 3">Linear System Solving</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);b:=Vector(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjUwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5UShpbnRlZ2VyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GIzYjLUkjbW5HRiQ2OVEiNEYnRi9GMkY1L0Y5RjdGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm4vRmluUSdub3JtYWxGJ0Zbb0ZddEZgdC1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple linear system solving no native solution available B:=Modular:-Mod(p,A,integer[4]);b1:=Modular:-Mod(p,b,integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEoQ19vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjYjFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmNzNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW29GXXRGYHQtRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKENfb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn pv:=Vector(n-1):Modular:-LUDecomposition(p,B,pv,0); Modular:-LUApply(p,B,pv,b1);b1[1..10]; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OVEiMEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxMkYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxNUYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI0RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIzExRidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnJGZ3ItRmluNiMtRlxvNiMtRl9vNjlRIjlGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZcdC1GaW42Iy1GXG82Iy1GX282OVEiN0YnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== LinBox linear system solving x:=lbSolve(p,A,b);x[1..10]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI5M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkJEghIiQ= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEieEYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjUwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OVEiMEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxMkYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxNUYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI0RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIzExRidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnJGZ3ItRmluNiMtRlxvNiMtRl9vNjlRIjlGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZcdC1GaW42Iy1GXG82Iy1GX282OVEiN0YnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== Timing comparison B:=Modular:-Mod(p,A,integer[4]):b1:=Modular:-Mod(p,b,integer[4]):pv:=Vector(n-1): t1:=time(Modular:-LUDecomposition(p,B,pv,0))+time(Modular:-LUApply(p,B,pv,b1)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4yNThGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJGUjISIkNyNGZXI= t2:=time(lbSolve(p,A,b)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI3NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkdSMhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC40MzVGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJE4lISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5US0wLjU5MzEwMzQ0ODNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyQiKyRbTTUkZiEjNQ== Singular system n:=100; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy A:=Matrix(n,n,gen,datatype=integer[4]):c:=Vector(n,gen,datatype=integer[4]):c[n]:=0: A[1..n,n]:=A.c; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1YkdGJDYmLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y9LyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGRi8lL21hdGhiYWNrZ3JvdW5kR0ZJLyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNy1GIzYlLUYjNiUtSSNtbkdGJDY5USIxRidGMkY1RjgvRjxGOkY+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluL0Zcb1Enbm9ybWFsRidGXm8tSSNtb0dGJDYzUSMuLkYnLyUlZm9ybUdRKHBvc3RmaXhGJy8lJmZlbmNlR0Y6LyUqc2VwYXJhdG9yR0Y6LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRicvJSdyc3BhY2VHUSQwZW1GJy8lKXN0cmV0Y2h5R0Y6LyUqc3ltbWV0cmljR0Y6LyUobWF4c2l6ZUdRKWluZmluaXR5RicvJShtaW5zaXplR0Znby8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkYvJStiYWNrZ3JvdW5kR0ZJLUZlbzY5USQxMDBGJ0YyRjVGOEZob0Y+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluRmlvRl5vLUZccDYzUSIsRicvRmBwUSZpbmZpeEYnRmJwL0ZlcEY9L0ZncEZbcS9GanBRM3Zlcnl0aGlja21hdGhzcGFjZUYnRlxxRl5xRmBxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmFyRmNyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGOi1GXHA2M1EjOj1GJ0ZpckZicEZkcC9GZ3BRL3RoaWNrbWF0aHNwYWNlRicvRmpwRmhzRlxxRl5xRmBxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmFyLUkobWFjdGlvbkdGJDYkLUYjNiUtRlxwNjNRIltGJy9GYHBRJ3ByZWZpeEYnL0ZjcEY9RmRwL0ZncFEudGhpbm1hdGhzcGFjZUYnL0ZqcEZmdC9GXXFGPUZecUZgcUZjcUZlcUZncUZpcUZbckZdckZfckZhci1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYvNjlRK34xfi4ufjEwMH5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiw2Ji1GLzY5USdWZWN0b3JGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiM2Iy1GLzY5USdjb2x1bW5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GX3NGYnMtRl11NiMtRmB1NiMtRiM2JC1GLzY5USxEYXRhflR5cGU6fkYnRjJGNUY4RjtGPkZARkJGREZHRkpGTEZORlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby1GLDYmLUYvNjlRKGludGVnZXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiM2Iy1GZW82OVEiNEYnRjJGNUY4RmhvRj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GaW9GXm9GX3NGYnMtRl11NiMtRmB1NiMtRiM2JC1GLzY5USpTdG9yYWdlOn5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRi82OVEscmVjdGFuZ3VsYXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRl11NiMtRmB1NiMtRiM2JC1GLzY5UShPcmRlcjp+RidGMkY1RjhGO0Y+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vLUYvNjlRLkZvcnRyYW5fb3JkZXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRlxwNjNRIl1GJ0ZfcEZkdEZkcEZldC9GanBRMnZlcnl0aGlubWF0aHNwYWNlRidGaHRGXnFGYHFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYXIvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= lbRank(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAxMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjNSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USM5OUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiMqKg== pv:=Vector(n-1):Modular:-LUDecomposition(p,A,pv,0); Error, (in LinearAlgebra:-Modular:-LUDecomposition) matrix is singular x:=lbSolve(p,A,c):x[1..10]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAxNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjOSEiJA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OUZGRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI3RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIjBGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZdcy1GaW42Iy1GXG82Iy1GX282OVEjMTFGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeci1GaW42Iy1GXG82Iy1GX282OVEjMTVGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZbdC1GaW42Iy1GXG82Iy1GX282OVEiOEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yRmJ0LUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== Norm(map(modp,A.x-c,p)); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2OVEhRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdRJmZhbHNlRicvJSdpdGFsaWNHUSV0cnVlRicvJSp1bmRlcmxpbmVHRjcvJSpzdWJzY3JpcHRHRjcvJSxzdXBlcnNjcmlwdEdGNy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y3LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy8lKW1hdGhzaXplR0Y0
<Text-field style="Heading 2" layout="Heading 2">Benefits in practice</Text-field> Sometime numerical computation is not satisfying and exact computation becomes mandatory with(LinearAlgebra):
<Text-field style="Heading 3" layout="Heading 3">Very bad conditionned matrix</Text-field> Moler:=proc(n) local i,j,Moler; Moler:=Matrix(n); for i from 1 to n do for j from 1 to (i-1) do Moler[i,j]:=j-2; end do; Moler[i,i]:=i; for j from (i+1) to n do Moler[i,j]:=i-2; end do; end do; return Moler; end proc: Redheffer:=proc(n) local i,j,Redheffer; Redheffer:=Matrix(n); for i from 1 to n do Redheffer[i,1]:=1; for j from 2 to n do if (j mod i = 0) then Redheffer[i,j]:=1; else Redheffer[i,j]:=0; end if; end do; end do: return Redheffer; end proc: Moler(10),Redheffer(10); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYzUSJbRicvJSVmb3JtR1EncHJlZml4RicvJSZmZW5jZUdRJXRydWVGJy8lKnNlcGFyYXRvckdRJmZhbHNlRicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRjwvJSlzdHJldGNoeUdGNi8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSVzaXplR1EjMTJGJy8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRictRiM2Iy1JJ210YWJsZUdGJDYsLUkkbXRyR0YkNiwtSSRtdGRHRiQ2Iy1JI21uR0YkNjlGSC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdGVC8lJWJvbGRHRjkvJSdpdGFsaWNHRjkvJSp1bmRlcmxpbmVHRjkvJSpzdWJzY3JpcHRHRjkvJSxzdXBlcnNjcmlwdEdGOS8lK2ZvcmVncm91bmRHRlcvJStiYWNrZ3JvdW5kR0ZaLyUnb3BhcXVlR0Y5LyUrZXhlY3V0YWJsZUdGOS8lKXJlYWRvbmx5R0Y2LyUpY29tcG9zZWRHRjkvJSpjb252ZXJ0ZWRHRjkvJStpbXNlbGVjdGVkR0Y5LyUscGxhY2Vob2xkZXJHRjkvJTBmb250X3N0eWxlX25hbWVHRlEvJSptYXRoY29sb3JHRlcvJS9tYXRoYmFja2dyb3VuZEdGWi8lK2ZvbnRmYW1pbHlHRmVvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lKW1hdGhzaXplR0ZULUZebzYjLUZhbzY5USkmbWludXM7MUYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRmFyRmFyRmFyRmFyRmFyRmFyRmFyRmFyLUZbbzYsRmFyLUZebzYjLUZhbzY5USIyRidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3ItRl5vNiMtRmFvNjlRIjBGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZdc0Zdc0Zdc0Zdc0Zdc0Zdc0Zdcy1GW282LEZhckZdcy1GXm82Iy1GYW82OVEiM0YnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRl1vRl1vRl1vRl1vRl1vRl1vRl1vLUZbbzYsRmFyRl1zRl1vLUZebzYjLUZhbzY5USI0RidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3JGaHJGaHJGaHJGaHJGaHJGaHItRltvNixGYXJGXXNGXW9GaHItRl5vNiMtRmFvNjlRIjVGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZkc0Zkc0Zkc0Zkc0Zkcy1GW282LEZhckZdc0Zdb0ZockZkcy1GXm82Iy1GYW82OVEiNkYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRlt0Rlt0Rlt0Rlt0LUZbbzYsRmFyRl1zRl1vRmhyRmRzRlt0LUZebzYjLUZhbzY5USI3RidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3JGYnRGYnRGYnQtRltvNixGYXJGXXNGXW9GaHJGZHNGW3RGYnQtRl5vNiMtRmFvNjlRIjhGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZpdEZpdC1GW282LEZhckZdc0Zdb0ZockZkc0ZbdEZidEZpdC1GXm82Iy1GYW82OVEiOUYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRmB1LUZbbzYsRmFyRl1zRl1vRmhyRmRzRlt0RmJ0Rml0RmB1LUZebzYjLUZhbzY5USMxMEYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yLUYuNjNRIl1GJy9GMlEocG9zdGZpeEYnRjRGN0Y6L0Y+UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj9GQUZDRkZGSUZLRk1GT0ZSRlVGWC1GLjYzUSIsRicvRjJRJmluZml4RicvRjVGOS9GOEY2L0Y7USQwZW1GJy9GPlEzdmVyeXRoaWNrbWF0aHNwYWNlRicvRkBGOUZBRkNGRkZJRktGTUZPRlJGVUZYLUYjNiVGLS1GIzYjLUZobjYsLUZbbzYsRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vLUZbbzYsRl1vRl1vRl1zRl1vRl1zRl1vRl1zRl1vRl1zRl1vLUZbbzYsRl1vRl1zRl1vRl1zRl1zRl1vRl1zRl1zRl1vRl1zLUZbbzYsRl1vRl1zRl1zRl1vRl1zRl1zRl1zRl1vRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1vRl1zRl1zRl1zRl1zRl1vLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1vRl1zRl1zRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1vRl1zRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1vRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1vRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1vRmp2 n:=200; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQyMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIzcjRmVy M:=1.*Moler(n):R:=1.*Redheffer(n):MR:=M.R; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjTVJGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USx+MjAwfnh+MjAwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USZmbG9hdEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjhGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== ConditionNumber(M); ConditionNumber(R); ConditionNumber(MR); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5USw4LjQ4MDEwODYwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUklbXN1cEdGJTYlLUYtNjlRIzEwRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRi02OVEkMTIzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYoNyMkIissJzMsWykiJDki NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxMTI1MC4wMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrRDYhIiY= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5USwyLjUyNzg2NTk5MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUklbXN1cEdGJTYlLUYtNjlRIzEwRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRi02OVEjMjBGKEYwRjNGNkY5RjtGPUY/RkFGREZHRklGS0ZORlBGUkZURlZGWUZlbkZnbkZpbkZcby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRig3IyQiKyMqZid5XyMiIzY= Solving a linear system b:=1.*Vector(n,rand(-1..1)); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5USZmbG9hdEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjhGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW29GXXRGYHQtRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= t:=time():x:=LinearSolve(MR,b,method=hybrid):time()-t; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjAwOUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiKiEiJA== Norm(MR.x-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UTQyMzcuMTE3MTg3NTAwMDAwMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMkIjMrKysrdj08ckIhIzo= A:=Matrix(MR,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t:=time():y:=lbSolve(A,b):time()-t; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA2MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjaSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjMwN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMiQhIiQ= Norm(A.y-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMwLkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiIUZdbw==
<Text-field style="Heading 3" layout="Heading 3">High precision results</Text-field> Tref:=ImportMatrix("tref200.dat",format=entries); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVElVHJlZkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnc3BhcnNlRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn b:=Vector(200,rand(-1..1),datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5UShpbnRlZ2VyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GIzYjLUkjbW5HRiQ2OVEiNEYnRi9GMkY1L0Y5RjdGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm4vRmluUSdub3JtYWxGJ0Zbb0ZddEZgdC1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= t:=time():x:=LinearSolve(1.*Tref,1.*b):time()-t; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjA2NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIjbCEiJA== Norm(Tref.x-b); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5UTQyLjMxNzMxMzQzNjQ2MDc1NzgyRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjgvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1ExJkludmlzaWJsZVRpbWVzO0YoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGQy8lK2JhY2tncm91bmRHRkYtSSVtc3VwR0YlNiUtRi02OVEjMTBGKEYwRjNGNkY5RjtGPUY/RkFGREZHRklGS0ZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GLTY5USMtN0YoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGKDcjJCIzI3l2Z2tWOHRKIyEjQw== t:=time():y:=lbSolve(Tref,b):time()-t; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjEyNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkRCIhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjM3MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkcyQhIiQ= Norm(Tref.y-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= Bug in Maple Determinant(Tref);Rank(Tref); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxOTlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKj4= Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= Determinant(1.*Tref);Rank(1.*Tref); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5UTAyLjQwODQ1MTkyNTQ4MDVGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUTEmSW52aXNpYmxlVGltZXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EkMGVtRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JJW1zdXBHRiU2JS1GLTY5USMxMEYoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUYtNjlRJDUxMkYoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGKDcjJCIvMFtEPlgzQyIkKlw= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQyMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyM= lbDeterminant(Tref);lbRank(Tref); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjEzNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkTiIhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjIzNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkTSMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQyMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyM= Determinant(Matrix(Tref,storage=rectangular)); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M=
<Text-field style="Heading 1" layout="Heading 1">Low level of the interface</Text-field> restart; p:=17; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg==
<Text-field style="Heading 2" layout="Heading 2">Submodule of module LinBox</Text-field> with(LinBox:-Dev); LinBox/Maple Interface Package beta version 0.1 by Pascal Giorgi (pgiorgi@uwaterloo.ca) NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2ZW8tSSNtaUdGJTY5UStsYkJsYWNrYm94RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHRlMvJSVib2xkR0Y4LyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR0ZWLyUrYmFja2dyb3VuZEdGWS8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGNS8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZQLyUqbWF0aGNvbG9yR0ZWLyUvbWF0aGJhY2tncm91bmRHRlkvJStmb250ZmFtaWx5R0Zcby8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGUy1GLTYzUSIsRigvRjFRJmluZml4RigvRjRGOC9GN0Y1L0Y6USQwZW1GKC9GPVEzdmVyeXRoaWNrbWF0aHNwYWNlRigvRj9GOEZARkJGRUZIRkpGTEZORlFGVEZXLUZnbjY5UTRsYkJsYWNrYm94RGltZW5zaW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK2xiQ2hhcnBvbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJDb252ZXJ0QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVExbGJDb252ZXJ0RWxlbWVudEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTRsYkNvbnZlcnRQb2x5bm9taWFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMGxiQ29udmVydFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYkNvcHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvbGJDb3B5QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtbGJDb3B5VmVjdG9yRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK2xiRGF0YUluZm9GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEubGJEZXRlcm1pbmFudEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxsYkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USlsYkRvbWFpbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpsYkVsZW1lbnRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqbGJNaW5wb2x5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKWxiUmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJ2xiUmFua0YoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USlsYlJlYmluZEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTFsYlJlYmluZEJsYWNrYm94RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL2xiUmViaW5kVmVjdG9yRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLmxiU2V0QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE2bGJTZXRCbGFja2JveEF0UmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMWxiU2V0SW50ZWdlclJpbmdGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwbGJTZXRQcmltZUZpZWxkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRM2xiU2V0UmF0aW9uYWxGaWVsZEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxsYlNldFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTRsYlNldFZlY3RvckF0UmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKGxiU29sdmVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJTdGFydEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYlN0b3BGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpbGJWZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJWZWN0b3JEaW1lbnNpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJXcml0ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBsYldyaXRlQmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJXcml0ZVBvbHlub21pYWxGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEubGJXcml0ZVZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxLUYtNjNRIl1GKC9GMVEocG9zdGZpeEYoRjNGNkY5L0Y9UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRj5GQEZCRkVGSEZKRkxGTkZRRlRGVzcjN0dJK2xiQmxhY2tib3hHRihJNGxiQmxhY2tib3hEaW1lbnNpb25HRihJK2xiQ2hhcnBvbHlHRihJMmxiQ29udmVydEJsYWNrYm94R0YoSTFsYkNvbnZlcnRFbGVtZW50R0YoSTRsYkNvbnZlcnRQb2x5bm9taWFsR0YoSTBsYkNvbnZlcnRWZWN0b3JHRihJJ2xiQ29weUdGKEkvbGJDb3B5QmxhY2tib3hHRihJLWxiQ29weVZlY3RvckdGKEkrbGJEYXRhSW5mb0dGKEkubGJEZXRlcm1pbmFudEdGKEksbGJEaW1lbnNpb25HRihJKWxiRG9tYWluR0YoSSpsYkVsZW1lbnRHRihJKmxiTWlucG9seUdGKEkpbGJSYW5kb21HRihJJ2xiUmFua0dGKEkpbGJSZWJpbmRHRihJMWxiUmViaW5kQmxhY2tib3hHRihJL2xiUmViaW5kVmVjdG9yR0YoSS5sYlNldEJsYWNrYm94R0YoSTZsYlNldEJsYWNrYm94QXRSYW5kb21HRihJMWxiU2V0SW50ZWdlclJpbmdHRihJMGxiU2V0UHJpbWVGaWVsZEdGKEkzbGJTZXRSYXRpb25hbEZpZWxkR0YoSSxsYlNldFZlY3RvckdGKEk0bGJTZXRWZWN0b3JBdFJhbmRvbUdGKEkobGJTb2x2ZUdGKEkobGJTdGFydEdGKEknbGJTdG9wR0YoSSlsYlZlY3RvckdGKEkybGJWZWN0b3JEaW1lbnNpb25HRihJKGxiV3JpdGVHRihJMGxiV3JpdGVCbGFja2JveEdGKEkybGJXcml0ZVBvbHlub21pYWxHRihJLmxiV3JpdGVWZWN0b3JHRig=
<Text-field style="Heading 2" layout="Heading 2">Creation of Domain</Text-field> Integers Domain Z:=lbDomain(0,"linbox_ring_integer"); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJaRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFlbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIlpHRihJZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0dGKDcjRmFy Z:=lbDomain(); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJaRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFlbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIlpHRihJZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0dGKDcjRmFy Finite fields domain Zp:=lbDomain(p,"linbox_field_dbl"); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNacEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRWVtMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNacEdGKElZW0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXXwrR0YoNyNGYXI= Zp:=lbDomain(p); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNacEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRWVtMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNacEdGKElZW0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXXwrR0YoNyNGYXI= Use of global default type lbSetIntegerRing("linbox_ring_integer"); lbSetPrimeField("linbox_field_dbl"); Z1:=lbDomain(); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNaMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNaMUdGKEllbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrR0YoNyNGYXI= Zp2:=lbDomain(p); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRacDJGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GLTY5UVlbTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkkWnAyR0YoSVlbTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfCtHRig3I0Zhcg==
<Text-field style="Heading 2" layout="Heading 2">Using Blackbox (Matrix)</Text-field> A:=lbBlackbox(Z,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJBRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFcclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJBR0YoSVxyW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXX4pXXwrR0YoNyNGYXI= Ap:=lbBlackbox(Zp,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNBcEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRanFbfkxpbkJveH5CbGFja2JveH4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JI0FwR0YoSWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0dGKDcjRmFy Use of global default type lbSetBlackbox("linbox_sparse"); A:=lbBlackbox(Z,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJBRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFdclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X3NwYXJzZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkiQUdGKEldclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X3NwYXJzZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== Set entries at random over the domain lbRandom(A); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1yW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfc3BhcnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSV1yW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfc3BhcnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0dGKA== lbRandom(Ap); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0dGKA== Computation without specifying the domain Over the integers d1:=lbDeterminant(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNkMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaXAzMTE2Mjc5NjIyMjgzNDUzMDgyMjk4NjI2NDEyNzc2NjE2NzM5NDcwODUwOTA5NDU4ODgyODI3NjcxNDMyNjI5MDAwOTI1MTE3MjU0MjAwNzQ4MTM1MjMyNjU0OTZ8K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNkMUdGKElpcDMxMTYyNzk2MjIyODM0NTMwODIyOTg2MjY0MTI3NzY2MTY3Mzk0NzA4NTA5MDk0NTg4ODI4Mjc2NzE0MzI2MjkwMDA5MjUxMTcyNTQyMDA3NDgxMzUyMzI2NTQ5NnwrR0YoNyNGYXI= Over a finite field d2:=lbDeterminant(Ap); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNkMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRJDExfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjZDJHRihJJDExfCtHRig3I0Zhcg== Converting data lbConvertElement(d1); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWhwMzExNjI3OTYyMjI4MzQ1MzA4MjI5ODYyNjQxMjc3NjYxNjczOTQ3MDg1MDkwOTQ1ODg4MjgyNzY3MTQzMjYyOTAwMDkyNTExNzI1NDIwMDc0ODEzNTIzMjY1NDk2RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiaHAnXGxLXzhbMj9hczZENCtIRVZydyNHKSllJTQ0JjNaUm5od0ZURScpSCMzYE1HQSd6aTYk lbConvertElement(d2); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM2
<Text-field style="Heading 2" layout="Heading 2">using Vector</Text-field> construction over the integers V:=lbVector(Z,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJWRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFqcVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkiVkdGKElqcVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== construction over finite field Vp:=lbVector(Zp,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNWcEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaHFbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNWcEdGKElocVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0YoNyNGYXI= Use of global default type lbSetVector("linbox_dense"); Set entries at random over the domain lbRandom(V); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWpxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSWpxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0dGKA== lbRandom(Vp); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWhxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfildfCtGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdGOC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkEvJS9tYXRoYmFja2dyb3VuZEdGRC8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjI3I0locVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0Yo Computation without specifying the domain Over the integers x1:=lbSolve(A,V); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN4MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRXHJbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX3JhdGlvbmFsLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjeDFHRihJXHJbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX3JhdGlvbmFsLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== x2:=lbSolve(Ap,Vp); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaHFbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN4MkdGKElocVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0YoNyNGYXI= Converting data lbConvertVector(x1);lbConvertVector(x2); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Iy1JJ210YWJsZUdGJTYsLUkkbXRyR0YlNiMtSSRtdGRHRiU2Iy1JJm1mcmFjR0YlNiotSSNtbkdGJTY5UV5xJm1pbnVzOzg3NzQxNTkzMDY1NTUyMTYyMDA1MjQzNDAwNDI3Nzg2ODc3NDE4NDk0MDU0ODI1MzUwNTA0OTc5NjA1OTg3MjYxMzA3Mzg3Mjk0NDM0MzYwNTY3NzA3OTU5NDIzRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHRlMvJSVib2xkR0Y4LyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR0ZWLyUrYmFja2dyb3VuZEdGWS8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGNS8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZQLyUqbWF0aGNvbG9yR0ZWLyUvbWF0aGJhY2tncm91bmRHRlkvJStmb250ZmFtaWx5R0Zoby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGUy1GY282OVFocDE1NTgxMzk4MTExNDE3MjY1NDExNDkzMTMyMDYzODgzMDgzNjk3MzU0MjU0NTQ3Mjk0NDE0MTM4MzU3MTYzMTQ1MDA0NjI1NTg2MjcxMDAzNzQwNjc2MTYzMjc0OEYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyLyUubGluZXRoaWNrbmVzc0dRIjFGKC8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGKC8lKW51bWFsaWduR0Zccy8lKWJldmVsbGVkR0Y4RlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFfcSZtaW51czsxMDUwMTA3NDMwMjE2NTM2Mjc0NTA4NzE0MzkwODg5NzczMzY0NzE4NDc0MzQzNDM1ODc2MTc0NjkwMjUyNzU4MzA5MjU1OTU0Njg1NTQ5MDE3NjM2NzE2NTE4OTVGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRXXEmbWludXM7NDM2MTM1MjEzNTA1NTczMTI3MjA4ODY5MTE4MDYyOTg5ODAxNzkxMjUxODEzNzU2OTE5OTI3NDMzMTgyODU3NzQzMzczNzE0MTMzNDU2MTg0MDUzMzE5NjYyOUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyLUZjbzY5UWdwNzc5MDY5OTA1NTcwODYzMjcwNTc0NjU2NjAzMTk0MTU0MTg0ODY3NzEyNzI3MzY0NzIwNzA2OTE3ODU4MTU3MjUwMjMxMjc5MzEzNTUwMTg3MDMzODA4MTYzNzRGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRXnEmbWludXM7NDAwNTI3NzA3NDI1NTU0MDg5OTM0NDU1MDczNDc1MTUyMzAxNzMxODU4MjA4MzU3NTM1NzI5Mzg2MjgyMTQ4MjQyODM1NzI5MDcwODg2MTE0MjY3ODE1NjQ0MTlGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRaHAxNDc0NDk4NDgwODIwOTczNzU3MTA5NTI5NTg3Nzc2MTkxMzg2NDQ0NjY4NTE4NTE2MTQxNTM5OTQ2MTU0MDI1NTgyMzc1MjkzMjc2OTQ0MDQ1ODQ0MTk2MzU4MzFGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRZ3AxMzkxMzY5MjQ0MTgwMzMzNDIwMzE1Nzc4NzY0MDM3OTk5NTY3MjQwNDI0NjIwNDEzMDg5MjE1ODA0MjUxMDMzNTkwMjIwOTY2NzM5OTQ3OTI3NDEyMDU5MzkzOUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmN0RmdyRmpyRl1zRl9zRlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFncDgyNjUyOTU1Mjg0ODY3MTE0OTMxMjgyMTgxODQ2NDkxMDA0MTU4NTg0MjM0NzY4OTIzODUyODIzMTM3NzIxODg2NzQyMjA4ODUyODY2ODk4Mjc0MDAwMzk5MjA1RihGZm9GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYnJGZHJGZ3JGanJGXXNGX3NGVEZXLUZqbjYjLUZdbzYjLUZgbzYqLUZjbzY5UWdwMjg0NTcxODMyMDk2MDExMTk5OTAzMjM0Mjg2NTY1MDUxNTA1Njk4MzQ5NTIyMjYxNDIzMjkzMDQ0MjY1MTA4OTI3NDM2NDAzMjYxNjEwNjEwNDkxMzkxOTE2NDlGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZjdEZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRZ3A4NzEyMzcyNDgwNjAwMDA3NDEzMTQ5MzE2MzA3OTc2ODY0OTIyNjkxNDAyMTI1MzAyNzk3NTUxMjg2NDAwOTU3MjYzMjUzODQxOTczMDg2NzgwMTY5NTMzMTkxMUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmRyRmdyRmpyRl1zRl9zRlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFncDI3NTMzMjc4OTY5MTU2Njc3MjgxMTEzMTY1Njg1Mzc4MTM3NjI0MDYxOTczMzg4NjI3MDcyNzQzNzEyNTUzMjYyNTk2ODUyMDU5MzU1NjE2OTAzOTc2MjU3NTQ5RihGZm9GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYnItRmNvNjlRZ3AzODk1MzQ5NTI3ODU0MzE2MzUyODczMjgzMDE1OTcwNzcwOTI0MzM4NTYzNjM2ODIzNjAzNTM0NTg5MjkwNzg2MjUxMTU2Mzk2NTY3NzUwOTM1MTY5MDQwODE4N0YoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmdyRmpyRl1zRl9zRlRGVy1GLTYzUSJdRigvRjFRKHBvc3RmaXhGKEYzRjZGOS9GPVEydmVyeXRoaW5tYXRoc3BhY2VGKEY+RkBGQkZFRkhGSkZMRk5GUUZURlc3Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iy1JJ1JUQUJMRUdGKDYlIiorIykpcDgtSSdNQVRSSVhHRig2IzcsNyMjIWdwQiVmenFuME9NV0goUTI4RSgpZmd6XF1dYCNbMCVcPXUob3lGL1NWXytpQGJsSWZUeCkiaHBbRmpoblNQK3JpZURZK1hKO2QkUVRUJUhaWERhdHAkMyQpUTFLSlw2YUU8OTYpUiJlOjcjIyFocCYqPWxyT3csXGJvYWZENCRlRkQhcHVoKGVWVlZaPVpPdCgqKTNSOSgzWEZPbEBJdTVdNUZgejcjIyFmcEhtPkwwJT1jTTg5UFBWeCZHPUx1Iyo+cHY4PUQieiwpKilIMT0icCkzczd0Yl04XzhPJSJncHVqIjNRLig9XU5KejdCXXM6ZXkicHE/Wk9GRnJuWz1hVD4ubWx1MEZqM2QwKnAheig3IyMhZ3A+V2MieUU5aCkzMkhkJEdDW0BHJ1FIZGBkJDMjZT10LEI6dk0yYlckKiozYWJVMnhfKyVGYHo3IyMiaHBKZWo+V2UvV3BGJEh2QmVEUzpZKlI6OTsmPSZvWVcnUSI+d3hlSCY0cnZ0NCMzWylcdTlGYHo3IyMiZ3BSUmY/VEZ6JSpSbic0QSFmTDVEL2VAKjM4L2lDL0NuJioqei5rKHlkSj9NTCE9VyNwOFIiRmd6NyMjImdwMCMqUitTRikqbydHJikzQXUnKT1zUEojRyZRIypvWkIlZWVUKyJcWT09I0dKXDZuW0diSGwjKUZgejcjIyJncFw7PlIiXDUxaGhLU091IyozXkVXSUhCOUVBJlwkKXAwOjBsbEdNSyEqKj42ZzRLPWQlR0ZnejcjIyJncDY+TCZwLHknM3Q+JVFEanMmNFMnR152ei1gNy05cEFcJ28oekk7JFxKVDIrZyFbc0JyKUZgejcjIyJncFx2RHdSIXBoYiRmPyZvZmlLYjdQdXNxaSlRdD4xQ3c4eWBvbEo2Ikd4bTpwKnlLYEYiZ3AoPTMvcF4kNHZubFJjNkQneSFIKmVNTmdCb2pqJlFWIzR4cWYsJEd0R047ViZ5X1xgKlEmSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdGKjYjSSdjb2x1bW5HRig3Iy1GXlxsNiMvSSQlaWRHRihGaHk= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Iy1JJ210YWJsZUdGJTYsLUkkbXRyR0YlNiMtSSRtdGRHRiU2Iy1JI21uR0YlNjlRIjRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUy8lJWJvbGRHRjgvJSdpdGFsaWNHRjgvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHRlYvJStiYWNrZ3JvdW5kR0ZZLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y1LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHRlAvJSptYXRoY29sb3JHRlYvJS9tYXRoYmFja2dyb3VuZEdGWS8lK2ZvbnRmYW1pbHlHRmVvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZTLUZqbjYjLUZdbzYjLUZgbzY5USIzRihGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3ItRmpuNiMtRl1vNiMtRmBvNjlRIjlGKEZjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZoci1Gam42Iy1GXW82Iy1GYG82OVEjMTJGKEZjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZhckZfc0ZpbkZpbkZpbi1GLTYzUSJdRigvRjFRKHBvc3RmaXhGKEYzRjZGOS9GPVEydmVyeXRoaW5tYXRoc3BhY2VGKEY+RkBGQkZFRkhGSkZMRk5GUUZURlc3Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iy1JJ1JUQUJMRUdGKDYlIipLUkhRIi1JJ01BVFJJWEdGKDYjNyw3IyIiJTcjIiIkNyMiIipGX3U3IyIjN0ZddUZhdUZbdUZbdUZbdSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0YqNiNJJ2NvbHVtbkdGKDcjLUZjdTYjL0kkJWlkR0YoRmZ0
<Text-field style="Heading 2" layout="Heading 2">Example of use</Text-field>
<Text-field style="Heading 3" layout="Heading 3">Highly efficient user's solution</Text-field> Compute the determinant of a matrix read from a file myDeterminant:=proc(p, file) local Zp,B,d; Zp:=lbDomain(p); B:=lbBlackbox(Zp,file); d:=lbElement(Zp); lbDeterminant(d,B); return lbConvertElement(d); end; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5US5teURldGVybWluYW50RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRiQ2KS1GX282M1ElcHJvY0YoL0Zjb1EhRihGZW9GZ28vRmpvUSQwZW1GKC9GXXBGXnJGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2JS1GX282M1EiKEYoL0Zjb1EncHJlZml4RigvRmZvRjtGZ28vRmpvUS50aGlubWF0aHNwYWNlRigvRl1wRmlyL0ZfcEY7RmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiUtRi02OVEicEYoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIsRihGYm9GZW8vRmhvRjtGXXIvRl1wUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGKEZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GLTY5USVmaWxlRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIilGKC9GY29RKHBvc3RmaXhGKEZnckZnb0Zoci9GXXBRMnZlcnl0aGlubWF0aHNwYWNlRihGW3NGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtSSdtc3BhY2VHRiU2Ji8lJ2hlaWdodEdRJzAuMH5leEYoLyUmd2lkdGhHUScwLjN+ZW1GKC8lJmRlcHRoR0ZmdC8lKmxpbmVicmVha0dRMWZpcnN0cHJvY25ld2xpbmVGKC1GJDYmLUZfbzYzUSZsb2NhbEYoRltyRmVvRmdvRl1yL0ZdcFEwbWVkaXVtbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Jy1GLTY5USNacEYoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvRmFzLUYtNjlRIkJGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zhcy1GLTY5USJkRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIjtGKEZib0Zlb0Zkc0ZdckZccEZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcUZhdC1GJDYnLUYkNiUtRiQ2JUZodUZeby1GJDYlLUYkNiVGYnItRiQ2JS1GLTY5US5gTGluQm94Oi1EZXZgRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIzotRihGW3JGZW9GZ29GXXJGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRi02OVEpbGJEb21haW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqcy1GX282M1EwJkFwcGx5RnVuY3Rpb247RihGYm9GZW9GZ29GXXJGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2JUZici1GJDYjRl5zRmpzRmF2RmF0LUYkNiUtRiQ2JUZbdkZeby1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5UStsYkJsYWNrYm94RihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG9GanNGaXctRiQ2JUZici1GJDYlRmh1RmFzRmdzRmpzRmF2RmF0LUYkNiUtRiQ2JUZedkZeby1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5USpsYkVsZW1lbnRGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqc0Zpdy1GJDYlRmJyLUYkNiNGaHVGanNGYXZGYXQtRiQ2JS1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5US5sYkRldGVybWluYW50RihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG9GanNGaXctRiQ2JUZici1GJDYlRl52RmFzRlt2RmpzRmF2RmF0LUYkNiQtRl9vNjNRJ3JldHVybkYoRltyRmVvRmdvRl1yRmR1Rl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiUtRiQ2JUZici1GJDYlRmB3RmN3LUYtNjlRMWxiQ29udmVydEVsZW1lbnRGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqc0Zpdy1GJDYlRmJyLUYkNiNGXnZGanMtRmJ0NiZGZHQvRmh0UScwLjB+ZW1GKEZqdC9GXXVRNmRlY3JlYXNlaW5kZW50bmV3bGluZUYoLUZfbzYzUSllbmR+cHJvY0YoRltyRmVvRmdvL0Zqb0ZldUZfckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcTcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkubXlEZXRlcm1pbmFudEdGKGYqNiRJInBHRihJJWZpbGVHRig2JUkjWnBHRihJIkJHRihJImRHRihGKEYoQyc+RmpdbC1fSSREZXZHNiQlKnByb3RlY3RlZEcvRidJJ0xpbkJveEdGKEkpbGJEb21haW5HRig2I0ZnXWw+RltebC1fRmFebEkrbGJCbGFja2JveEdGKDYkRmpdbEZoXWw+RlxebC1fRmFebEkqbGJFbGVtZW50R0YoNiNGal1sLV9GYV5sSS5sYkRldGVybWluYW50R0YoNiRGXF5sRltebE8tX0ZhXmxJMWxiQ29udmVydEVsZW1lbnRHRig2I0ZcXmxGKEYoRig3I0ZlXWw= myDeterminant(1009, "trefethen_200.sms"); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQzNDZGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkWSQ= myDeterminant(0, "trefethen_200.sms"); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M=
<Text-field style="Heading 2" layout="Heading 2">To continue ...</Text-field>
linbox-1.6.3/interfaces/maple/linbox-demonstration.mw000077500000000000000000022521611347646240000230030ustar00rootroot00000000000000 LinBox Interface beta version 0.1 demonstration by Pascal Giorgi restart;
<Text-field style="Heading 1" layout="Heading 1">Available through Maple module</Text-field> with(LinBox); LinBox/Maple Interface Package beta version 0.1 by Pascal Giorgi (pgiorgi@uwaterloo.ca) NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2LS1JI21pR0YlNjlRJERldkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZTLyUlYm9sZEdGOC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdGVi8lK2JhY2tncm91bmRHRlkvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjUvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGUC8lKm1hdGhjb2xvckdGVi8lL21hdGhiYWNrZ3JvdW5kR0ZZLyUrZm9udGZhbWlseUdGXG8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRlMtRi02M1EiLEYoL0YxUSZpbmZpeEYoL0Y0RjgvRjdGNS9GOlEkMGVtRigvRj1RM3Zlcnl0aGlja21hdGhzcGFjZUYoL0Y/RjhGQEZCRkVGSEZKRkxGTkZRRlRGVy1GZ242OVErbGJDaGFycG9seUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5sYkRldGVybWluYW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKmxiTWlucG9seUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYlJhbmtGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJTb2x2ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxLUYtNjNRIl1GKC9GMVEocG9zdGZpeEYoRjNGNkY5L0Y9UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRj5GQEZCRkVGSEZKRkxGTkZRRlRGVzcjNyhJJERldkdGKEkrbGJDaGFycG9seUdGKEkubGJEZXRlcm1pbmFudEdGKEkqbGJNaW5wb2x5R0YoSSdsYlJhbmtHRihJKGxiU29sdmVHRig= comparison with LinearAlgebra package with(LinearAlgebra); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Z3ktSSNtaUdGJTY5USMmeEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZTLyUlYm9sZEdGOC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdGVi8lK2JhY2tncm91bmRHRlkvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjUvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGUC8lKm1hdGhjb2xvckdGVi8lL21hdGhiYWNrZ3JvdW5kR0ZZLyUrZm9udGZhbWlseUdGXG8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRlMtRi02M1EiLEYoL0YxUSZpbmZpeEYoL0Y0RjgvRjdGNS9GOlEkMGVtRigvRj1RM3Zlcnl0aGlja21hdGhzcGFjZUYoL0Y/RjhGQEZCRkVGSEZKRkxGTkZRRlRGVy1GZ242OVEkQWRkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKEFkam9pbnRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEzQmFja3dhcmRTdWJzdGl0dXRlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0JhbmRNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEmQmFzaXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtQmV6b3V0TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0JpZGlhZ29uYWxGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUJpbGluZWFyRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVDaGFyYWN0ZXJpc3RpY01hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTlDaGFyYWN0ZXJpc3RpY1BvbHlub21pYWxGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEnQ29sdW1uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMENvbHVtbkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBDb2x1bW5PcGVyYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsQ29sdW1uU3BhY2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwQ29tcGFuaW9uTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMENvbmRpdGlvbk51bWJlckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9Db25zdGFudE1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9Db25zdGFudFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USVDb3B5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkNyZWF0ZVBlcm11dGF0aW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUNyb3NzUHJvZHVjdEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1EZWxldGVDb2x1bW5GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqRGVsZXRlUm93RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLERldGVybWluYW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKURpYWdvbmFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0RpYWdvbmFsTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UStEaW1lbnNpb25zRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0RvdFByb2R1Y3RGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE2RWlnZW5Db25kaXRpb25OdW1iZXJzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLEVpZ2VudmFsdWVzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLUVpZ2VudmVjdG9yc0YoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USZFcXVhbEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJGb3J3YXJkU3Vic3RpdHV0ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5Gcm9iZW5pdXNGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRNEdhdXNzaWFuRWxpbWluYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEyR2VuZXJhdGVFcXVhdGlvbnNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvR2VuZXJhdGVNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEyR2V0UmVzdWx0RGF0YVR5cGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvR2V0UmVzdWx0U2hhcGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1R2l2ZW5zUm90YXRpb25NYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsR3JhbVNjaG1pZHRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtSGFua2VsTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLEhlcm1pdGVGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRM0hlcm1pdGlhblRyYW5zcG9zZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US9IZXNzZW5iZXJnRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US5IaWxiZXJ0TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkhvdXNlaG9sZGVyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL0lkZW50aXR5TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMkludGVyc2VjdGlvbkJhc2lzRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK0lzRGVmaW5pdGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtSXNPcnRob2dvbmFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKklzU2ltaWxhckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpJc1VuaXRhcnlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEySm9yZGFuQmxvY2tNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErSm9yZGFuRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UShMQV9NYWluRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMExVRGVjb21wb3NpdGlvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1MZWFzdFNxdWFyZXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsTGluZWFyU29sdmVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkTWFwRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJU1hcDJGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqTWF0cml4QWRkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMk1hdHJpeEV4cG9uZW50aWFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL01hdHJpeEZ1bmN0aW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLk1hdHJpeEludmVyc2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1TWF0cml4TWF0cml4TXVsdGlwbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErTWF0cml4Tm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxNYXRyaXhQb3dlckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVNYXRyaXhTY2FsYXJNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVNYXRyaXhWZWN0b3JNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJNaW5pbWFsUG9seW5vbWlhbEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USZNaW5vckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UShNb2R1bGFyRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKU11bHRpcGx5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLE5vVXNlclZhbHVlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJU5vcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqTm9ybWFsaXplRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKk51bGxTcGFjZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTNPdXRlclByb2R1Y3RNYXRyaXhGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqUGVybWFuZW50RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJlBpdm90RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlBvcG92Rm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBRUkRlY29tcG9zaXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtUmFuZG9tTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVJhbmRvbVZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USVSYW5rRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRNlJhdGlvbmFsQ2Fub25pY2FsRm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTZSZWR1Y2VkUm93RWNoZWxvbkZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkUm93RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVJvd0RpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5US1Sb3dPcGVyYXRpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpUm93U3BhY2VGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtU2NhbGFyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL1NjYWxhck11bHRpcGx5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLVNjYWxhclZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpTY2h1ckZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvU2luZ3VsYXJWYWx1ZXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqU21pdGhGb3JtRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlN1Yk1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpTdWJWZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpU3VtQmFzaXNGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwU3lsdmVzdGVyTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL1RvZXBsaXR6TWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJlRyYWNlRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKlRyYW5zcG9zZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBUcmlkaWFnb25hbEZvcm1GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErVW5pdFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTJWYW5kZXJtb25kZU1hdHJpeEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpWZWN0b3JBZGRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEsVmVjdG9yQW5nbGVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE1VmVjdG9yTWF0cml4TXVsdGlwbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVErVmVjdG9yTm9ybUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTVWZWN0b3JTY2FsYXJNdWx0aXBseUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UStaZXJvTWF0cml4RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK1plcm9WZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEkWmlwRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnEtRi02M1EiXUYoL0YxUShwb3N0Zml4RihGM0Y2RjkvRj1RMnZlcnl0aGlubWF0aHNwYWNlRihGPkZARkJGRUZIRkpGTEZORlFGVEZXNyM3YnJJIyZ4R0YoSSRBZGRHNiQlKnByb3RlY3RlZEdGKkkoQWRqb2ludEdGKEkzQmFja3dhcmRTdWJzdGl0dXRlR0YoSStCYW5kTWF0cml4R0YoSSZCYXNpc0dGKEktQmV6b3V0TWF0cml4R0YoSS9CaWRpYWdvbmFsRm9ybUdGKEktQmlsaW5lYXJGb3JtR0YoSTVDaGFyYWN0ZXJpc3RpY01hdHJpeEdGKEk5Q2hhcmFjdGVyaXN0aWNQb2x5bm9taWFsR0YoSSdDb2x1bW5HRihJMENvbHVtbkRpbWVuc2lvbkdGKEkwQ29sdW1uT3BlcmF0aW9uR0YoSSxDb2x1bW5TcGFjZUdGKEkwQ29tcGFuaW9uTWF0cml4R0YoSTBDb25kaXRpb25OdW1iZXJHRihJL0NvbnN0YW50TWF0cml4R0YoSS9Db25zdGFudFZlY3RvckdGKEklQ29weUdGKEkyQ3JlYXRlUGVybXV0YXRpb25HRihJLUNyb3NzUHJvZHVjdEdGKEktRGVsZXRlQ29sdW1uR0YoSSpEZWxldGVSb3dHRihJLERldGVybWluYW50R0YoSSlEaWFnb25hbEdGKEkvRGlhZ29uYWxNYXRyaXhHRihJKkRpbWVuc2lvbkdGKEkrRGltZW5zaW9uc0dGKEkrRG90UHJvZHVjdEdGKEk2RWlnZW5Db25kaXRpb25OdW1iZXJzR0YoSSxFaWdlbnZhbHVlc0dGKEktRWlnZW52ZWN0b3JzR0YoSSZFcXVhbEdGKEkyRm9yd2FyZFN1YnN0aXR1dGVHRihJLkZyb2Jlbml1c0Zvcm1HRihJNEdhdXNzaWFuRWxpbWluYXRpb25HRihJMkdlbmVyYXRlRXF1YXRpb25zR0YoSS9HZW5lcmF0ZU1hdHJpeEdGKEkyR2V0UmVzdWx0RGF0YVR5cGVHRihJL0dldFJlc3VsdFNoYXBlR0YoSTVHaXZlbnNSb3RhdGlvbk1hdHJpeEdGKEksR3JhbVNjaG1pZHRHRihJLUhhbmtlbE1hdHJpeEdGKEksSGVybWl0ZUZvcm1HRihJM0hlcm1pdGlhblRyYW5zcG9zZUdGKEkvSGVzc2VuYmVyZ0Zvcm1HRihJLkhpbGJlcnRNYXRyaXhHRihJMkhvdXNlaG9sZGVyTWF0cml4R0YoSS9JZGVudGl0eU1hdHJpeEdGKEkySW50ZXJzZWN0aW9uQmFzaXNHRihJK0lzRGVmaW5pdGVHRihJLUlzT3J0aG9nb25hbEdGKEkqSXNTaW1pbGFyR0YoSSpJc1VuaXRhcnlHRihJMkpvcmRhbkJsb2NrTWF0cml4R0YoSStKb3JkYW5Gb3JtR0YoSShMQV9NYWluR0YoSTBMVURlY29tcG9zaXRpb25HRihJLUxlYXN0U3F1YXJlc0dGKEksTGluZWFyU29sdmVHRihJJE1hcEdGKEklTWFwMkdGKEkqTWF0cml4QWRkR0YoSTJNYXRyaXhFeHBvbmVudGlhbEdGKEkvTWF0cml4RnVuY3Rpb25HRihJLk1hdHJpeEludmVyc2VHRihJNU1hdHJpeE1hdHJpeE11bHRpcGx5R0YoSStNYXRyaXhOb3JtR0YoSSxNYXRyaXhQb3dlckdGKEk1TWF0cml4U2NhbGFyTXVsdGlwbHlHRihJNU1hdHJpeFZlY3Rvck11bHRpcGx5R0YoSTJNaW5pbWFsUG9seW5vbWlhbEdGKEkmTWlub3JHRihJKE1vZHVsYXJHRihJKU11bHRpcGx5R0ZeaWxJLE5vVXNlclZhbHVlR0YoSSVOb3JtR0ZeaWxJKk5vcm1hbGl6ZUdGKEkqTnVsbFNwYWNlR0YoSTNPdXRlclByb2R1Y3RNYXRyaXhHRihJKlBlcm1hbmVudEdGKEkmUGl2b3RHRihJKlBvcG92Rm9ybUdGKEkwUVJEZWNvbXBvc2l0aW9uR0YoSS1SYW5kb21NYXRyaXhHRihJLVJhbmRvbVZlY3RvckdGKEklUmFua0dGKEk2UmF0aW9uYWxDYW5vbmljYWxGb3JtR0YoSTZSZWR1Y2VkUm93RWNoZWxvbkZvcm1HRihJJFJvd0dGKEktUm93RGltZW5zaW9uR0YoSS1Sb3dPcGVyYXRpb25HRihJKVJvd1NwYWNlR0YoSS1TY2FsYXJNYXRyaXhHRihJL1NjYWxhck11bHRpcGx5R0YoSS1TY2FsYXJWZWN0b3JHRihJKlNjaHVyRm9ybUdGKEkvU2luZ3VsYXJWYWx1ZXNHRihJKlNtaXRoRm9ybUdGKEkqU3ViTWF0cml4R0YoSSpTdWJWZWN0b3JHRihJKVN1bUJhc2lzR0YoSTBTeWx2ZXN0ZXJNYXRyaXhHRihJL1RvZXBsaXR6TWF0cml4R0YoSSZUcmFjZUdGXmlsSSpUcmFuc3Bvc2VHRihJMFRyaWRpYWdvbmFsRm9ybUdGKEkrVW5pdFZlY3RvckdGKEkyVmFuZGVybW9uZGVNYXRyaXhHRihJKlZlY3RvckFkZEdGKEksVmVjdG9yQW5nbGVHRihJNVZlY3Rvck1hdHJpeE11bHRpcGx5R0YoSStWZWN0b3JOb3JtR0YoSTVWZWN0b3JTY2FsYXJNdWx0aXBseUdGKEkrWmVyb01hdHJpeEdGKEkrWmVyb1ZlY3RvckdGKEkkWmlwR0Yo
<Text-field style="Heading 1" layout="Heading 1">High level of the interface </Text-field> Call LinBox functionnalities directly on Maple objects.
<Text-field style="Heading 2" layout="Heading 2">Computation over the integers</Text-field>
<Text-field style="Heading 3" layout="Heading 3">Determinant</Text-field> n:=100;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4xMDB+eH4xMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple determinant Determinant(A); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1zMTMxNTQyMTA5NjUyNDk5ODEwNDIyNzczOTQ5NjE2NjQzMzE5MTU2Mzc3NzMzNjAxNzQ5ODU1OTgzNzk3NDY0Njk1MTI3MTQ5NDk4NDIzMTg4MTg1ODgyMTI3Mzg0MzE3NzgwMDI3MDA2NDUzODIxMTk4NzYxNTc2Mzc4NDY1NTY4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIl1zI29iWXlqZGgoKT5AUVgxcS0heTxWUUZAKWU9KT1CJSlcXHI3JnBrdXokKWYmKVw8Z0x4UGMiPkxrOydcUnhBLyIpKlxfJzRAYUoi LinBox determinant lbDeterminant(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjVyEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1zMTMxNTQyMTA5NjUyNDk5ODEwNDIyNzczOTQ5NjE2NjQzMzE5MTU2Mzc3NzMzNjAxNzQ5ODU1OTgzNzk3NDY0Njk1MTI3MTQ5NDk4NDIzMTg4MTg1ODgyMTI3Mzg0MzE3NzgwMDI3MDA2NDUzODIxMTk4NzYxNTc2Mzc4NDY1NTY4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIl1zI29iWXlqZGgoKT5AUVgxcS0heTxWUUZAKWU9KT1CJSlcXHI3JnBrdXokKWYmKVw8Z0x4UGMiPkxrOydcUnhBLyIpKlxfJzRAYUoi Timing comparison t1:=time(Determinant(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS4yMzBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUk3ISIkNyNGZXI= t2:=time(lbDeterminant(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjWiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4xNjdGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJG4iISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw3LjM2NTI2OTQ2MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIraCVwX08oISIq B:=Matrix(200,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t1:=time(Determinant(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTMuMTQ2RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiZZSiIhIiQ3I0Zlcg== t2:=time(lbDeterminant(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjE3NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkdSIhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC45MTJGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJDcqISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNC40MTQ0NzM2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrb3RXVDkhIik=
<Text-field style="Heading 3" layout="Heading 3">Rank</Text-field> n:=100;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4xMDB+eH4xMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple rank Rank(A); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyI= LinBox rank lbRank(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjVCEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyI= Timing comparison t1:=time(Rank(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS4xMjdGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUY2ISIkNyNGZXI= t2:=time(lbRank(A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAzNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjTyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4wNDFGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiI1QhIiQ3I0Zlcg== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwyNy40ODc4MDQ4OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKVsheVtGISIp B:=Matrix(200,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t1:=time(Rank(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTIuMzEzRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiY4QiIhIiQ3I0Zlcg== t2:time(lbRank(B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI1N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkZCMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjMwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkKyQhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwzMDAuMzE3MDczMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrSzI8LkkhIig=
<Text-field style="Heading 3" layout="Heading 3">Minimal Polynomial</Text-field> n:=20;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMyMEYoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIm5HRigiIz83I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn4yMH54fjIwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple minimal polynomial MinimalPolynomial(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkwtSSNtb0dGJTYzUSomdW1pbnVzMDtGKC8lJWZvcm1HUSdwcmVmaXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdGNS8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjUvJSpzeW1tZXRyaWNHRjUvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y1LyUubW92YWJsZWxpbWl0c0dGNS8lJ2FjY2VudEdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUlc2l6ZUdRIzEyRigvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLUkjbW5HRiU2OVE1NjMzODM2NTYzNDU2OTYzNDM4OTBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRmluLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRIitGKC9GMVEmaW5maXhGKEYzRjYvRjlRMG1lZGl1bW1hdGhzcGFjZUYoL0Y8RlxyRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1GJDYlLUZaNjlRNTE5Njk2MzM1NDY5NjkwNTY0MDE4RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHEtRi02M1ExJkludmlzaWJsZVRpbWVzO0YoRmlxRjNGNkY4RjtGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUkjbWlHRiU2OVEieEYoRmduRmpuRlxvL0Zfb0ZgcEZgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcS9GYnFRJ2l0YWxpY0YoRmRxLUYtNjNRKCZtaW51cztGKEZpcUYzRjZGW3JGXXJGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUYkNiUtRlo2OVE0MjExNDA1NDUwMTY0MDEyNTI4NUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUklbXN1cEdGJTYlRmZyLUZaNjlRIjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRihGZnEtRiQ2JS1GWjY5UTQyMTYxNTA3NDIyMjQyNzg2NTEwRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEiM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEyNDYxNTM1MTU5NzY5NTEyOTNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI0RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTIyOTA3MzI4MTc3OTgxNDkyNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRMTIyODIxNjMyNDE3ODIxMTFGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI2RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTAzNTY0ODY3ODU2NjE4NzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGXXMtRiQ2JS1GWjY5US8zOTg0MjM4MjIwOTk0NkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjhGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRLjY5NDg2MjQ5OTQ0MzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5US0xMzk1ODE2MDA1MjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEsMzE2Mjg5OTE3OTVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVErNDg5NTg1Nzc3OEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzEyRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5USoxNjQwOTU3MjRGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEpMzk5NDg1MTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEoNDgxNjE0M0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE1RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UScyMjkxNTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEmMjM1MzNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxN0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEkMTc3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEjMThGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRJDEwMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2Iy1GZnM2JUZmci1GWjY5USMyMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0NyMsTCI1ISpRTSdwWGpsJFFqISIiKiYiNT1TYyFwcGFMJ3A+IiIiSSJ4R0YoRmVfbEZlX2wqJiI0JkdELGssWDA5QEZlX2wpRmZfbCIiI0ZlX2xGYl9sKiYiNDVseVVBVTI6OyNGZV9sKUZmX2wiIiRGZV9sRmVfbComIjIkSF5wKGZeYGglRmVfbClGZl9sIiIlRmVfbEZiX2wqJiIyRVwiKXo8R3QhSEZlX2wpRmZfbCIiJkZlX2xGZV9sKiYiMTZAeVRLOyNHI0ZlX2wpRmZfbCIiJ0ZlX2xGYl9sKiYiMHo9bSZ5J1tjJEZlX2wpRmZfbCIiKEZlX2xGZV9sKiYiL1kqNEFRVSlSRmVfbClGZl9sIiIpRmVfbEZiX2wqJiIuUlcqXGlbcEZlX2wpRmZfbCIiKkZlX2xGYl9sKiYiLUEwZyJlUiJGZV9sKUZmX2wiIzVGZV9sRmVfbComIiwmeiIqKkc7JEZlX2wpRmZfbCIjNkZlX2xGZV9sKiYiK3l4JmUqW0ZlX2wpRmZfbCIjN0ZlX2xGZV9sKiYiKkNkNGsiRmVfbClGZl9sIiM4RmVfbEZlX2wqJiIpPiZbKlJGZV9sKUZmX2wiIzlGZV9sRmJfbComIihWaCJbRmVfbClGZl9sIiM6RmVfbEZiX2wqJiInZiJII0ZlX2wpRmZfbCIjO0ZlX2xGZV9sKiYiJkxOI0ZlX2wpRmZfbCIjPEZlX2xGZV9sKiYiJHgiRmVfbClGZl9sIiM9RmVfbEZlX2wqJiIkLCJGZV9sKUZmX2wiIz5GZV9sRmJfbCokKUZmX2wiIz9GZV9sRmVfbA== LinBox minimal polynomial lbMinpoly(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkwtSSNtb0dGJTYzUSomdW1pbnVzMDtGKC8lJWZvcm1HUSdwcmVmaXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdGNS8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjUvJSpzeW1tZXRyaWNHRjUvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y1LyUubW92YWJsZWxpbWl0c0dGNS8lJ2FjY2VudEdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUlc2l6ZUdRIzEyRigvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLUkjbW5HRiU2OVE1NjMzODM2NTYzNDU2OTYzNDM4OTBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRmluLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRIitGKC9GMVEmaW5maXhGKEYzRjYvRjlRMG1lZGl1bW1hdGhzcGFjZUYoL0Y8RlxyRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1GJDYlLUZaNjlRNTE5Njk2MzM1NDY5NjkwNTY0MDE4RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHEtRi02M1ExJkludmlzaWJsZVRpbWVzO0YoRmlxRjNGNkY4RjtGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUkjbWlHRiU2OVEieEYoRmduRmpuRlxvL0Zfb0ZgcEZgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcS9GYnFRJ2l0YWxpY0YoRmRxLUYtNjNRKCZtaW51cztGKEZpcUYzRjZGW3JGXXJGPUY/RkFGREZHRklGS0ZNRlBGU0ZWLUYkNiUtRlo2OVE0MjExNDA1NDUwMTY0MDEyNTI4NUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUklbXN1cEdGJTYlRmZyLUZaNjlRIjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRihGZnEtRiQ2JS1GWjY5UTQyMTYxNTA3NDIyMjQyNzg2NTEwRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEiM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEyNDYxNTM1MTU5NzY5NTEyOTNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI0RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTIyOTA3MzI4MTc3OTgxNDkyNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRMTIyODIxNjMyNDE3ODIxMTFGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI2RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UTAzNTY0ODY3ODU2NjE4NzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGXXMtRiQ2JS1GWjY5US8zOTg0MjM4MjIwOTk0NkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIjhGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRLjY5NDg2MjQ5OTQ0MzlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USI5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5US0xMzk1ODE2MDA1MjJGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEsMzE2Mjg5OTE3OTVGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVErNDg5NTg1Nzc3OEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzEyRihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5USoxNjQwOTU3MjRGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxM0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEpMzk5NDg1MTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0Rl1zLUYkNiUtRlo2OVEoNDgxNjE0M0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE1RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2JS1GWjY5UScyMjkxNTlGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxNkYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEmMjM1MzNGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZjci1GZnM2JUZmci1GWjY5USMxN0YoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0RmZxLUYkNiUtRlo2OVEkMTc3RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGY3ItRmZzNiVGZnItRlo2OVEjMThGKEZnbkZqbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZkcUZbdEZdcy1GJDYlLUZaNjlRJDEwMUYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRmNyLUZmczYlRmZyLUZaNjlRIzE5RihGZ25Gam5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGZHFGW3RGZnEtRiQ2Iy1GZnM2JUZmci1GWjY5USMyMEYoRmduRmpuRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmRxRlt0NyMsTCI1ISpRTSdwWGpsJFFqISIiKiYiNT1TYyFwcGFMJ3A+IiIiSSJ4R0YoRmVfbEZlX2wqJiI0JkdELGssWDA5QEZlX2wpRmZfbCIiI0ZlX2xGYl9sKiYiNDVseVVBVTI6OyNGZV9sKUZmX2wiIiRGZV9sRmVfbComIjIkSF5wKGZeYGglRmVfbClGZl9sIiIlRmVfbEZiX2wqJiIyRVwiKXo8R3QhSEZlX2wpRmZfbCIiJkZlX2xGZV9sKiYiMTZAeVRLOyNHI0ZlX2wpRmZfbCIiJ0ZlX2xGYl9sKiYiMHo9bSZ5J1tjJEZlX2wpRmZfbCIiKEZlX2xGZV9sKiYiL1kqNEFRVSlSRmVfbClGZl9sIiIpRmVfbEZiX2wqJiIuUlcqXGlbcEZlX2wpRmZfbCIiKkZlX2xGYl9sKiYiLUEwZyJlUiJGZV9sKUZmX2wiIzVGZV9sRmVfbComIiwmeiIqKkc7JEZlX2wpRmZfbCIjNkZlX2xGZV9sKiYiK3l4JmUqW0ZlX2wpRmZfbCIjN0ZlX2xGZV9sKiYiKkNkNGsiRmVfbClGZl9sIiM4RmVfbEZlX2wqJiIpPiZbKlJGZV9sKUZmX2wiIzlGZV9sRmJfbComIihWaCJbRmVfbClGZl9sIiM6RmVfbEZiX2wqJiInZiJII0ZlX2wpRmZfbCIjO0ZlX2xGZV9sKiYiJkxOI0ZlX2wpRmZfbCIjPEZlX2xGZV9sKiYiJHgiRmVfbClGZl9sIiM9RmVfbEZlX2wqJiIkLCJGZV9sKUZmX2wiIz5GZV9sRmJfbCokKUZmX2wiIz9GZV9sRmVfbA== Timing comparison t1:=time(MinimalPolynomial(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS45MjZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJUU+ISIkNyNGZXI= t2:time(lbMinpoly(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiJSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjAwN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiKCEiJA== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw0Ni45NzU2MDk3NkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrdzRjKHAlISIp
<Text-field style="Heading 3" layout="Heading 3">Characteristic Polynomial</Text-field> n:=20;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMyMEYoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIm5HRigiIz83I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn4yMH54fjIwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple characteristic polynomial CharacteristicPolynomial(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkstRiQ2Iy1JJW1zdXBHRiU2JS1JI21pR0YlNjlRInhGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGPS8lKnN1YnNjcmlwdEdGPS8lLHN1cGVyc2NyaXB0R0Y9LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGPS8lK2V4ZWN1dGFibGVHRj0vJSlyZWFkb25seUdGQC8lKWNvbXBvc2VkR0Y9LyUqY29udmVydGVkR0Y9LyUraW1zZWxlY3RlZEdGPS8lLHBsYWNlaG9sZGVyR0Y9LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkkvJS9tYXRoYmFja2dyb3VuZEdGTC8lK2ZvbnRmYW1pbHlHRjcvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjotSSNtbkdGJTY5USMyMEYoRjVGOEY7L0Y/Rj1GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG8vRl9vUSdub3JtYWxGKEZhby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtSSNtb0dGJTYzUSgmbWludXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y9LyUqc2VwYXJhdG9yR0Y9LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRigvJSdyc3BhY2VHRmpwLyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lMGZvbnRfc3R5bGVfbmFtZUdGZ24vJSVzaXplR0Y6LyUrZm9yZWdyb3VuZEdGSS8lK2JhY2tncm91bmRHRkwtRiQ2JS1GZG82OVEjOTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhby1GXnA2M1ExJkludmlzaWJsZVRpbWVzO0YoRmFwRmRwRmZwL0ZpcFEkMGVtRigvRlxxRl5zRl1xRl9xRmFxRmRxRmdxRmlxRltyRl1yRl9yRmFyRmNyLUYvNiVGMS1GZG82OVEjMTlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5USQyODFGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIzE4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam8tRl5wNjNRIitGKEZhcEZkcEZmcEZocEZbcUZdcUZfcUZhcUZkcUZncUZpcUZbckZdckZfckZhckZjci1GJDYlLUZkbzY5USU4NzkwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxN0YoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRJzMyODM0NUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTZGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USgyMjA0NTUzRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRKTMxNTkzMDI4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRKjcxMzQ3MDMyMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USs0NTc5NDc5OTcyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRLDU1NjA1OTQ2NDcwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRLTYyNzE1NTAxODUxNkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTBGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5US4yMDM2NTk5MjU2MzYwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEvNDI3ODg0MDEyODQ2MTVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTA0NTQ5OTA2MDE4MTc5ODlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjdGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTEyMDA5MDE1MTUwMTk1NzE5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI2RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEyNDEzNTkxOTI0MzU4OTg0MjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5UTIyODc5MDg0NDMyNzA2NDIzOUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEiNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRNDE3NjgxNzQ3NTU4MDU1MDE2MDhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTQzOTQyNDY2MjUxMzI0MTkyODM3RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USIyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GXXAtRiQ2JS1GZG82OVE1MTM4MDkxOTE3MDcyMzE0MjAyMTJGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0ZqckYxRl90LUZkbzY5UTUyODc2ODgyMDg3NjQ1NTAzMDAwOEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvNyMsTCokKUkieEdGKCIjPyIiIkZgX2wqJiIjJCpGYF9sKUZeX2wiIz5GYF9sISIiKiYiJCJHRmBfbClGXl9sIiM9RmBfbEZlX2wqJiIlIXopRmBfbClGXl9sIiM8RmBfbEZgX2wqJiInWCRHJEZgX2wpRl5fbCIjO0ZgX2xGZV9sKiYiKGBYPyNGYF9sKUZeX2wiIzpGYF9sRmBfbComIilHSWZKRmBfbClGXl9sIiM5RmBfbEZgX2wqJiIqQS5aOChGYF9sKUZeX2wiIzhGYF9sRmVfbComIitzKnolelhGYF9sKUZeX2wiIzdGYF9sRmBfbComIixxayVmZ2JGYF9sKUZeX2wiIzZGYF9sRmBfbComIi07Jj1dOkYnRmBfbClGXl9sIiM1RmBfbEZlX2wqJiIuZ2pEKmZPP0ZgX2wpRl5fbCIiKkZgX2xGYF9sKiYiLzpZRywlKXlVRmBfbClGXl9sIiIpRmBfbEZgX2wqJiIwKil6Ij1nISpcWEZgX2wpRl5fbCIiKEZgX2xGZV9sKiYiMT5kPl1eLDQ/RmBfbClGXl9sIiInRmBfbEZlX2wqJiIyRCUpKmVWIz5mOCVGYF9sKUZeX2wiIiZGYF9sRmBfbComIjJSVTFGViUzekdGYF9sKUZeX2wiIiVGYF9sRmBfbComIjQzO10wZXZ1Im88RmBfbClGXl9sIiIkRmBfbEZlX2wqJiI0UEc+QzhEbUMlUkZgX2wpRl5fbCIiI0ZgX2xGZV9sKiYiNTctVUpzcSI+NFEiRmBfbEZeX2xGYF9sRmVfbCI1MysuYmsoMyMpbyhHRmBfbA== LinBox characteristic polynomial lbCharpoly(A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNkstRiQ2Iy1JJW1zdXBHRiU2JS1JI21pR0YlNjlRInhGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGPS8lKnN1YnNjcmlwdEdGPS8lLHN1cGVyc2NyaXB0R0Y9LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGPS8lK2V4ZWN1dGFibGVHRj0vJSlyZWFkb25seUdGQC8lKWNvbXBvc2VkR0Y9LyUqY29udmVydGVkR0Y9LyUraW1zZWxlY3RlZEdGPS8lLHBsYWNlaG9sZGVyR0Y9LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkkvJS9tYXRoYmFja2dyb3VuZEdGTC8lK2ZvbnRmYW1pbHlHRjcvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjotSSNtbkdGJTY5USMyMEYoRjVGOEY7L0Y/Rj1GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG8vRl9vUSdub3JtYWxGKEZhby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtSSNtb0dGJTYzUSgmbWludXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y9LyUqc2VwYXJhdG9yR0Y9LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRigvJSdyc3BhY2VHRmpwLyUpc3RyZXRjaHlHRj0vJSpzeW1tZXRyaWNHRj0vJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y9LyUubW92YWJsZWxpbWl0c0dGPS8lJ2FjY2VudEdGPS8lMGZvbnRfc3R5bGVfbmFtZUdGZ24vJSVzaXplR0Y6LyUrZm9yZWdyb3VuZEdGSS8lK2JhY2tncm91bmRHRkwtRiQ2JS1GZG82OVEjOTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhby1GXnA2M1ExJkludmlzaWJsZVRpbWVzO0YoRmFwRmRwRmZwL0ZpcFEkMGVtRigvRlxxRl5zRl1xRl9xRmFxRmRxRmdxRmlxRltyRl1yRl9yRmFyRmNyLUYvNiVGMS1GZG82OVEjMTlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5USQyODFGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIzE4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam8tRl5wNjNRIitGKEZhcEZkcEZmcEZocEZbcUZdcUZfcUZhcUZkcUZncUZpcUZbckZdckZfckZhckZjci1GJDYlLUZkbzY5USU4NzkwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxN0YoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRJzMyODM0NUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTZGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USgyMjA0NTUzRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRKTMxNTkzMDI4RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRKjcxMzQ3MDMyMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5USs0NTc5NDc5OTcyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl90LUYkNiUtRmRvNjlRLDU1NjA1OTQ2NDcwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USMxMUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRLTYyNzE1NTAxODUxNkYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEjMTBGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5US4yMDM2NTk5MjU2MzYwRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEvNDI3ODg0MDEyODQ2MTVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTA0NTQ5OTA2MDE4MTc5ODlGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjdGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTEyMDA5MDE1MTUwMTk1NzE5RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USI2RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GX3QtRiQ2JS1GZG82OVEyNDEzNTkxOTI0MzU4OTg0MjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjVGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZfdC1GJDYlLUZkbzY5UTIyODc5MDg0NDMyNzA2NDIzOUYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpyLUYvNiVGMS1GZG82OVEiNEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvRmpvRl1wLUYkNiUtRmRvNjlRNDE3NjgxNzQ3NTU4MDU1MDE2MDhGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqci1GLzYlRjEtRmRvNjlRIjNGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0Zqb0ZdcC1GJDYlLUZkbzY5UTQzOTQyNDY2MjUxMzI0MTkyODM3RihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9GanItRi82JUYxLUZkbzY5USIyRihGNUY4RjtGZ29GQUZDRkVGR0ZKRk1GT0ZRRlNGVUZXRllGZW5GaG5Gam5GXG9GaG9GYW9Gam9GXXAtRiQ2JS1GZG82OVE1MTM4MDkxOTE3MDcyMzE0MjAyMTJGKEY1RjhGO0Znb0ZBRkNGRUZHRkpGTUZPRlFGU0ZVRldGWUZlbkZobkZqbkZcb0Zob0Zhb0ZqckYxRl90LUZkbzY5UTUyODc2ODgyMDg3NjQ1NTAzMDAwOEYoRjVGOEY7RmdvRkFGQ0ZFRkdGSkZNRk9GUUZTRlVGV0ZZRmVuRmhuRmpuRlxvRmhvRmFvNyMsTCokKUkieEdGKCIjPyIiIkZgX2wqJiIjJCpGYF9sKUZeX2wiIz5GYF9sISIiKiYiJCJHRmBfbClGXl9sIiM9RmBfbEZlX2wqJiIlIXopRmBfbClGXl9sIiM8RmBfbEZgX2wqJiInWCRHJEZgX2wpRl5fbCIjO0ZgX2xGZV9sKiYiKGBYPyNGYF9sKUZeX2wiIzpGYF9sRmBfbComIilHSWZKRmBfbClGXl9sIiM5RmBfbEZgX2wqJiIqQS5aOChGYF9sKUZeX2wiIzhGYF9sRmVfbComIitzKnolelhGYF9sKUZeX2wiIzdGYF9sRmBfbComIixxayVmZ2JGYF9sKUZeX2wiIzZGYF9sRmBfbComIi07Jj1dOkYnRmBfbClGXl9sIiM1RmBfbEZlX2wqJiIuZ2pEKmZPP0ZgX2wpRl5fbCIiKkZgX2xGYF9sKiYiLzpZRywlKXlVRmBfbClGXl9sIiIpRmBfbEZgX2wqJiIwKil6Ij1nISpcWEZgX2wpRl5fbCIiKEZgX2xGZV9sKiYiMT5kPl1eLDQ/RmBfbClGXl9sIiInRmBfbEZlX2wqJiIyRCUpKmVWIz5mOCVGYF9sKUZeX2wiIiZGYF9sRmBfbComIjJSVTFGViUzekdGYF9sKUZeX2wiIiVGYF9sRmBfbComIjQzO10wZXZ1Im88RmBfbClGXl9sIiIkRmBfbEZlX2wqJiI0UEc+QzhEbUMlUkZgX2wpRl5fbCIiI0ZgX2xGZV9sKiYiNTctVUpzcSI+NFEiRmBfbEZeX2xGYF9sRmVfbCI1MysuYmsoMyMpbyhHRmBfbA== Timing comparison t1:=time(CharacteristicPolynomial(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4xMDJGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJC0iISIkNyNGZXI= t2:=time(lbCharpoly(A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiIiEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4wMDZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiIichIiQ3I0Zlcg== t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNy4wMDAwMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrKzwhIik= B:=Matrix(50,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRKn41MH54fjUwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn CharacteristicPolynomial(B,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNmJxLUkjbW9HRiU2M1EqJnVtaW51czA7RigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJmZhbHNlRigvJSpzZXBhcmF0b3JHRjUvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGOi8lKXN0cmV0Y2h5R0Y1LyUqc3ltbWV0cmljR0Y1LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGNS8lLm1vdmFibGVsaW1pdHNHRjUvJSdhY2NlbnRHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lJXNpemVHUSMxMkYoLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC1GJDYlLUkjbW5HRiU2OVFlbjI0NjUwODEyMzA2NjEwMDk4NzYyOTQ3NjQxODMzNTY0MjA0MjI5MTIwOTQ5OTAzNTkxNDkzMDc3NDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRltvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRMSZJbnZpc2libGVUaW1lcztGKC9GMVEmaW5maXhGKEYzRjZGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1JI21pR0YlNjlRInhGKEZpbkZcb0Zeby9GYW9GYnBGYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXEvRmRxUSdpdGFsaWNGKEZmcS1GLTYzUSIrRihGW3JGM0Y2L0Y5UTBtZWRpdW1tYXRoc3BhY2VGKC9GPEZockY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2Iy1JJW1zdXBHRiU2JUZdci1GZm42OVEjNTBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRi02M1EoJm1pbnVzO0YoRltyRjNGNkZnckZpckY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2JS1GZm42OVEkMjY2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVElNDAyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0OEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRJjI4MDA5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRmZuNjlRZW4zOTU4NjI4NTQzNTY2Mzk0NDMzODA1NjI1NjM0OTE3NDU2NjM5MTM4ODU2MzA2MTc2MzM5MjU0OTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGZHItRiQ2JS1GZm42OVEnODQ3NzgzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEpMzk0NjY5NTNGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USo1MzUxMDg3NThGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USs4NDU2OTUzNTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVEtMjQ5MjA4MTk1MzQ4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEuMjIwNDUxMjU3MjI2N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMDI0NTEyNDY2NTY2OTAyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRMTMwNzY4NDk2MDkwNTA5MjZGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UTIyNTg1NzQ0MzAwNjY0ODE0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMzIwNDg5NDIzNzg1NDU4OTIwOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRNTM3MDQ5OTEwNDIyOTYwNDIwOTMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE2MjA0MDc5Nzg5NzI2MDQ3NTg5NjM4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE3MzQ1MjcyMTM5NjM5NDMyNTIyMjUxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRODk0Mzg3NTE1MzY0NTQzMDY0MjA3NTk1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE5ODAxOTkyOTAwODk4MzY0MDg5MjcxMDYwRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE7MTI4MjA5OTc2ODc4MjM3NTA2NDg2MzEyNzRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UTsxNzYyNzQyNTk3OTExMzgxODQwMTc5OTQ0NkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRPTk5ODEwNjY1NzIxMjM2NDgyMzU1MTAyNDcxNzVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UT4zMjM2NDcwMTc4MzQ0NTc1NTUyMTk4Njg0ODM0N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRPzcwMjA4OTc4Mzk5MTA2Nzg5NjIxNTk3NTU1MDM1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRQTEyMjA0ODczNjYwMjk3MTgzMTAwMjQ0MzI0Mzg0NzE3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFCNTAwMDk5MzQ2MjQ0MjYzNjg5Mzc1MDM0MzUwNjk4MjkzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFDNjEwOTExODkwMjI2NjY2MDc4MDMyODk2MjAxNjM4MDI1MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRTI4NDIxNjQ0NjkwMTk3ODY4MjQwNTEyNzI5ODA3MTU0Njc1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRjEwMzUxNjcwMzI5OTQ0NjA0NjUwMTM5ODY2NTM4NzY1ODE1MzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUczMzAyMzMyNzc3NTk4ODcxMDM5NDQ0NzQ0MjEyNjc2MTIwMTA3OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSDEwMDQ4NDAzNzA1MTM2NjYzNTA3MzYwODE1MDgxNDA2MzIzMjY3MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSTg4NjUyNTMzOTc3OTQ0NDg3MjI5NDg0MzkxNTcxNzY2NTkyMTgxNzJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUoyMDAyODA4ODI2NzcwODc0NzQ3Njk2NDkzOTkzNDIxOTYzMzcxNjk0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRSzQ1MDUzNjgwOTUyMzA4NzkyOTQ3ODU4MDAyMzk1OTc1MDk3NDI0NDczN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRTTE0MzkwMTk5MzAxNTgxNzIyNDg2NDI3MTE0Mzk5NzAyODk1MDc1NTE1Njc2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzE2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFNNzEyODMwODY1MTgxNjYyNjY3NTIxNTk3Mzk2MTcwMzIwOTUwMzUxMDQ2MzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UU4zMzg0NDgzNDI5ODMxMjg2OTA0NzIxNzkxNTg0NTc1ODI4ODI5NjU3NDUxNDhGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UVAxMTY4Mzk1NzU5MTQwOTg4NDE5OTk5ODcyNjUyNTYzNzYxOTU2MzQ4MDI1NzEzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUDExMTAxNzQwMDU3NzQ3MTA0ODAyMTA4MDIxMjU3OTE4MjE2MzA3OTQ3ODk4NjY1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzEyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFRNzU3NzU0NTAxMDEzNzI4Njc0MjY5NjQ2NTUzNTEzMjU5NjA1NzIyODQ4MTc5OTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzExRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFSNTkzMzg4ODYxNTYyMzE2MTI5MDk4Mjk2MjU4ODAzODEzMDEzMDYzNTEzOTcwMzcwMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUzQ0MjAwMzk4MDUxODA3NTM4NzMxNDM0NTE1MTYyNTY4ODQ1MzEzODI2MjQxNjAyOTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVQyMzAyMTA3NDY3MDI0NDY4ODEwOTg0OTI1MTQ1MDI2Mzg5Njk4Nzc3MTg3NDYzMTcwNjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRVDgzNDIzNDUzNjk1NTU3MzI2MzQzODI1NzA1NTk2NjI5OTk4NTYzNjQ4MTg5MDM5NzEwN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFWNjgwNzc4MjQ1NDc4NzE5MzQ2ODAxMzIxNDg1MzIwNDIyMzYxNjAxMDYwMDMzNTgyNjE2MjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiNkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRVzQyOTUwMTEwODk3NDUwMjg1MzczNTQzOTU4NTIxNDUwODM4OTcyMTYxNjU5NzYxNTg2OTU3NUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFXMTY3NDkxMjI5NDE1MzY1NzUzMTc5MDg5MTYwMzE4MjAxOTM1Mjg2MjU5NDcwMDY3MTk5NDM5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVk2MDIyOTQ5MTYzNjY0MDgwOTYzODEzNTY4NTU4NDAwMjY1MTAyNDQ3MjQ0NTc1NDg1MjgzMDUyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USIzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFZODY5OTY4NzA4MDkwNDgxNTE3MTE5MjM3NDc2NjkwMDk4NzQ2MTAzMTY0MzUyMjAxNTA1OTQ4NTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiMkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzNyMsYnEqJiJlbld4SVwiZi4qXDQ3SFU/a04kPWtaSHcpNDVtSTczbEMiIiJJInhHRihGX2JtISIiKiQpRmBibSIjXUZfYm1GX2JtKiYiJG0jRl9ibSlGYGJtIiNcRl9ibUZhYm0qJiIlQFNGX2JtKUZgYm0iI1tGX2JtRl9ibSomIiY0IUdGX2JtKUZgYm0iI1pGX2JtRl9ibSJlbldcRFJqPDFqJilRIlJtWDxcakRjIVFWJVJtTmFHJ2VSRl9ibSomIickeVopRl9ibSlGYGJtIiNZRl9ibUZfYm0qJiIpYHBZUkZfYm0pRmBibSIjWEZfYm1GYWJtKiYiKmUoM15gRl9ibSlGYGJtIiNXRl9ibUZfYm0qJiIrY04mcFgpRl9ibSlGYGJtIiNWRl9ibUZfYm0qJiItW2A+MyNcI0ZfYm0pRmBibSIjVUZfYm1GX2JtKiYiLm5BZDdYPyNGX2JtKUZgYm0iI1RGX2JtRmFibSomIjBDIXBjbUNeQ0ZfYm0pRmBibSIjU0ZfYm1GYWJtKiYiMUU0MDQnXG8yJEZfYm0pRmBibSIjUkZfYm1GX2JtKiYiMlUiW20rVnUmZSNGX2JtKUZgYm0iI1FGX2JtRl9ibSomIjMzIyplYXlCJSpbP0ZfYm0pRmBibSIjUEZfYm1GYWJtKiYiNUs0VWdIVTUqXHEkRl9ibSlGYGJtIiNPRl9ibUZhYm0qJiI2UScqZVpncyp5elM/Rl9ibSlGYGJtIiNORl9ibUZfYm0qJiI3PURBRFZSJ1JARlgkRl9ibSlGYGJtIiNNRl9ibUZfYm0qJiI4JmYyVTFWWE86dlElKkZfYm0pRmBibSIjTEZfYm1GYWJtKiYiOWc1RiozayQpKjMhSCo+ISlGX2JtKUZgYm0iI0tGX2JtRmFibSomIjt1N2pbMXZCeW8oKjQjRyJGX2JtKUZgYm0iI0pGX2JtRmFibSomIjtZJSp6LCU9UTZ6ZlVGdyJGX2JtKUZgYm0iI0lGX2JtRmFibSomIj12ckM1YkJbTzdzbDEiKSoqRl9ibSlGYGJtIiNIRl9ibUZhYm0qJiI+WiRbbyk+X2JkVyR5LFpPS0ZfYm0pRmBibSIjR0ZfYm1GX2JtKiYiP2YuYnZmQCcqeTEiKlJ5KjMtKEZfYm0pRmBibSIjRkZfYm1GX2JtKiYiQTxaUUNWQytKPShIZ08oWz83Rl9ibSlGYGJtIiNFRl9ibUZfYm0qJiJCJEgpcF1WLnYkKm9qVUNZJCo0KyZGX2JtKUZgYm0iI0RGX2JtRl9ibSomIkNfLVE7PycqRy55Z21FLSo9IjRoRl9ibSlGYGJtIiNDRl9ibUZfYm0qJiJFZm5hciEpSEZeUyNveT4hcFc7VUdGX2JtKUZgYm0iI0JGX2JtRmFibSomIkZSOmV3UWwnKVIsbC9ZJSpILm5eLiJGX2JtKUZgYm0iI0FGX2JtRmFibSomIkd6NT9objdVdVclUjUoKSlmeEZMLUxGX2JtKUZgYm0iI0BGX2JtRl9ibSomIkhxRUJqUyIzOjNPMk5tT15xLiVbKyJGX2JtKUZgYm0iIz9GX2JtRmFibSomIklzIj0jZm08ZCJSJVtIc1tXeihSYF8nKSlGX2JtKUZgYm0iIz5GX2JtRmFibSomIkpVcHJMJz5VJCpSXCdwWlooM3hFKTNHKyNGX2JtKUZgYm0iIz1GX2JtRl9ibSomIktQWkN1NHZmUi0hZXklSHozQiY0b2BdJUZfYm0pRmBibSIjPEZfYm1GX2JtKiYiTXdjXnZdKkdxKlI5clUnW0E8ZSwkKj4hUjlGX2JtKUZgYm0iIztGX2JtRmFibSomIk1KWTVOXTRLcWhSKGZAdm1pOz1sMyRHckZfYm0pRmBibSIjOkZfYm1GYWJtKiYiTltedWxIKUdlZCVlInpAWiFwR0opSE1bJVEkRl9ibSlGYGJtIiM5Rl9ibUZhYm0qJiJQTXJEIVtqJj53akRscykqKio+JSkpNDlmZFJvNkZfYm0pRmBibSIjOEZfYm1GYWJtKiYiUGwnKSp5JXpJOyM9ekRAITNAIVs1WngwUzw1NkZfYm0pRmBibSIjN0ZfYm1GX2JtKiYiUWMqeiJbR3MwJ2ZLXmBsa3BVbkdQLCxYdmQoRl9ibSlGYGJtIiM2Rl9ibUZhYm0qJiJSK1BxUl5qSSw4USEpZWlIKTRIaEppOicpKVEkZkZfYm0pRmBibSIjNUZfYm1GYWJtKiYiU1dIZ1RpI1FKWClvRDs6WFZKKFF2IT0wKVIrVSVGX2JtKUZgYm0iIipGX2JtRl9ibSomIlRncUpZKD14KClwKlFFXTlEXCk0IilvVy1udTUtQkZfYm0pRmBibSIiKUZfYm1GX2JtKiYiVDJyUiEqPVtPYykqKkhtZjBkI1FNRXRiJnBgTVUkKUZfYm0pRmBibSIiKEZfYm1GYWJtKiYiVj87RWVMKzEsO09BL0smW0A4IW9NPih5YUN5Mm9GX2JtKUZgYm0iIidGX2JtRmFibSomIld2JnBlaChmOztzKlEzWEAmZVJhdGBHXXUqMzZdSCVGX2JtKUZgYm0iIiZGX2JtRl9ibSomIldSJSo+bitaZmlHTj4/PS47KjN6SnZsYFRIN1xuIkZfYm0pRmBibSIiJUZfYm1GX2JtKiYiWUYwJEcmW3ZYQ1pDNWwtU2Umb04iUSc0M2tPO1xILSdGX2JtKUZgYm0iIiRGX2JtRl9ibSomIllhW2ZdLEFOa0o1WSgpNCFwd3VCPnJeIlshNDMobypwKUZfYm0pRmBibSIiI0ZfYm1GX2Jt lbCharpoly(B,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAwNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIiJyEiJA== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNmJxLUkjbW9HRiU2M1EqJnVtaW51czA7RigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJmZhbHNlRigvJSpzZXBhcmF0b3JHRjUvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGOi8lKXN0cmV0Y2h5R0Y1LyUqc3ltbWV0cmljR0Y1LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGNS8lLm1vdmFibGVsaW1pdHNHRjUvJSdhY2NlbnRHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lJXNpemVHUSMxMkYoLyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC1GJDYlLUkjbW5HRiU2OVFlbjI0NjUwODEyMzA2NjEwMDk4NzYyOTQ3NjQxODMzNTY0MjA0MjI5MTIwOTQ5OTAzNTkxNDkzMDc3NDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUi8lJWJvbGRHRjUvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHRlUvJStiYWNrZ3JvdW5kR0ZYLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHRk8vJSptYXRoY29sb3JHRlUvJS9tYXRoYmFja2dyb3VuZEdGWC8lK2ZvbnRmYW1pbHlHRltvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZSLUYtNjNRMSZJbnZpc2libGVUaW1lcztGKC9GMVEmaW5maXhGKEYzRjZGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZQRlNGVi1JI21pR0YlNjlRInhGKEZpbkZcb0Zeby9GYW9GYnBGYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXEvRmRxUSdpdGFsaWNGKEZmcS1GLTYzUSIrRihGW3JGM0Y2L0Y5UTBtZWRpdW1tYXRoc3BhY2VGKC9GPEZockY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2Iy1JJW1zdXBHRiU2JUZdci1GZm42OVEjNTBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcS8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRi02M1EoJm1pbnVzO0YoRltyRjNGNkZnckZpckY9Rj9GQUZERkdGSUZLRk1GUEZTRlYtRiQ2JS1GZm42OVEkMjY2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVElNDAyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0OEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRJjI4MDA5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRmZuNjlRZW4zOTU4NjI4NTQzNTY2Mzk0NDMzODA1NjI1NjM0OTE3NDU2NjM5MTM4ODU2MzA2MTc2MzM5MjU0OTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGZHItRiQ2JS1GZm42OVEnODQ3NzgzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQ2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEpMzk0NjY5NTNGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USo1MzUxMDg3NThGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjNDRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5USs4NDU2OTUzNTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVEtMjQ5MjA4MTk1MzQ4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzQyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVEuMjIwNDUxMjU3MjI2N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMDI0NTEyNDY2NTY2OTAyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USM0MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRMTMwNzY4NDk2MDkwNTA5MjZGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UTIyNTg1NzQ0MzAwNjY0ODE0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRMzIwNDg5NDIzNzg1NDU4OTIwOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRNTM3MDQ5OTEwNDIyOTYwNDIwOTMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE2MjA0MDc5Nzg5NzI2MDQ3NTg5NjM4RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzM1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVE3MzQ1MjcyMTM5NjM5NDMyNTIyMjUxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRODk0Mzg3NTE1MzY0NTQzMDY0MjA3NTk1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE5ODAxOTkyOTAwODk4MzY0MDg5MjcxMDYwRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzMyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVE7MTI4MjA5OTc2ODc4MjM3NTA2NDg2MzEyNzRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UTsxNzYyNzQyNTk3OTExMzgxODQwMTc5OTQ0NkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMzMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRPTk5ODEwNjY1NzIxMjM2NDgyMzU1MTAyNDcxNzVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UT4zMjM2NDcwMTc4MzQ0NTc1NTUyMTk4Njg0ODM0N0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRPzcwMjA4OTc4Mzk5MTA2Nzg5NjIxNTk3NTU1MDM1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRQTEyMjA0ODczNjYwMjk3MTgzMTAwMjQ0MzI0Mzg0NzE3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFCNTAwMDk5MzQ2MjQ0MjYzNjg5Mzc1MDM0MzUwNjk4MjkzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFDNjEwOTExODkwMjI2NjY2MDc4MDMyODk2MjAxNjM4MDI1MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRTI4NDIxNjQ0NjkwMTk3ODY4MjQwNTEyNzI5ODA3MTU0Njc1OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRRjEwMzUxNjcwMzI5OTQ0NjA0NjUwMTM5ODY2NTM4NzY1ODE1MzlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMjJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUczMzAyMzMyNzc3NTk4ODcxMDM5NDQ0NzQ0MjEyNjc2MTIwMTA3OUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSDEwMDQ4NDAzNzA1MTM2NjYzNTA3MzYwODE1MDgxNDA2MzIzMjY3MEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMyMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRSTg4NjUyNTMzOTc3OTQ0NDg3MjI5NDg0MzkxNTcxNzY2NTkyMTgxNzJGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UUoyMDAyODA4ODI2NzcwODc0NzQ3Njk2NDkzOTkzNDIxOTYzMzcxNjk0MkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRSzQ1MDUzNjgwOTUyMzA4NzkyOTQ3ODU4MDAyMzk1OTc1MDk3NDI0NDczN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRTTE0MzkwMTk5MzAxNTgxNzIyNDg2NDI3MTE0Mzk5NzAyODk1MDc1NTE1Njc2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzE2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFNNzEyODMwODY1MTgxNjYyNjY3NTIxNTk3Mzk2MTcwMzIwOTUwMzUxMDQ2MzFGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTVGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UU4zMzg0NDgzNDI5ODMxMjg2OTA0NzIxNzkxNTg0NTc1ODI4ODI5NjU3NDUxNDhGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEjMTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zlcy1GJDYlLUZmbjY5UVAxMTY4Mzk1NzU5MTQwOTg4NDE5OTk5ODcyNjUyNTYzNzYxOTU2MzQ4MDI1NzEzNEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxM0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUDExMTAxNzQwMDU3NzQ3MTA0ODAyMTA4MDIxMjU3OTE4MjE2MzA3OTQ3ODk4NjY1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzEyRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFRNzU3NzU0NTAxMDEzNzI4Njc0MjY5NjQ2NTUzNTEzMjU5NjA1NzIyODQ4MTc5OTU2RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIzExRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFSNTkzMzg4ODYxNTYyMzE2MTI5MDk4Mjk2MjU4ODAzODEzMDEzMDYzNTEzOTcwMzcwMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USMxMEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRUzQ0MjAwMzk4MDUxODA3NTM4NzMxNDM0NTE1MTYyNTY4ODQ1MzEzODI2MjQxNjAyOTQ0RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjlGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVQyMzAyMTA3NDY3MDI0NDY4ODEwOTg0OTI1MTQ1MDI2Mzg5Njk4Nzc3MTg3NDYzMTcwNjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiOEYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmVzLUYkNiUtRmZuNjlRVDgzNDIzNDUzNjk1NTU3MzI2MzQzODI1NzA1NTk2NjI5OTk4NTYzNjQ4MTg5MDM5NzEwN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI3RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZXMtRiQ2JS1GZm42OVFWNjgwNzc4MjQ1NDc4NzE5MzQ2ODAxMzIxNDg1MzIwNDIyMzYxNjAxMDYwMDMzNTgyNjE2MjBGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiNkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzRmRyLUYkNiUtRmZuNjlRVzQyOTUwMTEwODk3NDUwMjg1MzczNTQzOTU4NTIxNDUwODM4OTcyMTYxNjU5NzYxNTg2OTU3NUYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USI1RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFXMTY3NDkxMjI5NDE1MzY1NzUzMTc5MDg5MTYwMzE4MjAxOTM1Mjg2MjU5NDcwMDY3MTk5NDM5RihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRl1zNiVGXXItRmZuNjlRIjRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZic0Zkci1GJDYlLUZmbjY5UVk2MDIyOTQ5MTYzNjY0MDgwOTYzODEzNTY4NTU4NDAwMjY1MTAyNDQ3MjQ0NTc1NDg1MjgzMDUyN0YoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZdczYlRl1yLUZmbjY5USIzRihGaW5GXG9GXm9GYG9GYm9GZG9GZm9GaG9Gam9GXHBGXnBGYHBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGYnNGZHItRiQ2JS1GZm42OVFZODY5OTY4NzA4MDkwNDgxNTE3MTE5MjM3NDc2NjkwMDk4NzQ2MTAzMTY0MzUyMjAxNTA1OTQ4NTRGKEZpbkZcb0Zeb0Zgb0Zib0Zkb0Zmb0Zob0Zqb0ZccEZecEZgcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GXXM2JUZdci1GZm42OVEiMkYoRmluRlxvRl5vRmBvRmJvRmRvRmZvRmhvRmpvRlxwRl5wRmBwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmJzNyMsYnEqJiJlbld4SVwiZi4qXDQ3SFU/a04kPWtaSHcpNDVtSTczbEMiIiJJInhHRihGX2JtISIiKiQpRmBibSIjXUZfYm1GX2JtKiYiJG0jRl9ibSlGYGJtIiNcRl9ibUZhYm0qJiIlQFNGX2JtKUZgYm0iI1tGX2JtRl9ibSomIiY0IUdGX2JtKUZgYm0iI1pGX2JtRl9ibSJlbldcRFJqPDFqJilRIlJtWDxcakRjIVFWJVJtTmFHJ2VSRl9ibSomIickeVopRl9ibSlGYGJtIiNZRl9ibUZfYm0qJiIpYHBZUkZfYm0pRmBibSIjWEZfYm1GYWJtKiYiKmUoM15gRl9ibSlGYGJtIiNXRl9ibUZfYm0qJiIrY04mcFgpRl9ibSlGYGJtIiNWRl9ibUZfYm0qJiItW2A+MyNcI0ZfYm0pRmBibSIjVUZfYm1GX2JtKiYiLm5BZDdYPyNGX2JtKUZgYm0iI1RGX2JtRmFibSomIjBDIXBjbUNeQ0ZfYm0pRmBibSIjU0ZfYm1GYWJtKiYiMUU0MDQnXG8yJEZfYm0pRmBibSIjUkZfYm1GX2JtKiYiMlUiW20rVnUmZSNGX2JtKUZgYm0iI1FGX2JtRl9ibSomIjMzIyplYXlCJSpbP0ZfYm0pRmBibSIjUEZfYm1GYWJtKiYiNUs0VWdIVTUqXHEkRl9ibSlGYGJtIiNPRl9ibUZhYm0qJiI2UScqZVpncyp5elM/Rl9ibSlGYGJtIiNORl9ibUZfYm0qJiI3PURBRFZSJ1JARlgkRl9ibSlGYGJtIiNNRl9ibUZfYm0qJiI4JmYyVTFWWE86dlElKkZfYm0pRmBibSIjTEZfYm1GYWJtKiYiOWc1RiozayQpKjMhSCo+ISlGX2JtKUZgYm0iI0tGX2JtRmFibSomIjt1N2pbMXZCeW8oKjQjRyJGX2JtKUZgYm0iI0pGX2JtRmFibSomIjtZJSp6LCU9UTZ6ZlVGdyJGX2JtKUZgYm0iI0lGX2JtRmFibSomIj12ckM1YkJbTzdzbDEiKSoqRl9ibSlGYGJtIiNIRl9ibUZhYm0qJiI+WiRbbyk+X2JkVyR5LFpPS0ZfYm0pRmBibSIjR0ZfYm1GX2JtKiYiP2YuYnZmQCcqeTEiKlJ5KjMtKEZfYm0pRmBibSIjRkZfYm1GX2JtKiYiQTxaUUNWQytKPShIZ08oWz83Rl9ibSlGYGJtIiNFRl9ibUZfYm0qJiJCJEgpcF1WLnYkKm9qVUNZJCo0KyZGX2JtKUZgYm0iI0RGX2JtRl9ibSomIkNfLVE7PycqRy55Z21FLSo9IjRoRl9ibSlGYGJtIiNDRl9ibUZfYm0qJiJFZm5hciEpSEZeUyNveT4hcFc7VUdGX2JtKUZgYm0iI0JGX2JtRmFibSomIkZSOmV3UWwnKVIsbC9ZJSpILm5eLiJGX2JtKUZgYm0iI0FGX2JtRmFibSomIkd6NT9objdVdVclUjUoKSlmeEZMLUxGX2JtKUZgYm0iI0BGX2JtRl9ibSomIkhxRUJqUyIzOjNPMk5tT15xLiVbKyJGX2JtKUZgYm0iIz9GX2JtRmFibSomIklzIj0jZm08ZCJSJVtIc1tXeihSYF8nKSlGX2JtKUZgYm0iIz5GX2JtRmFibSomIkpVcHJMJz5VJCpSXCdwWlooM3hFKTNHKyNGX2JtKUZgYm0iIz1GX2JtRl9ibSomIktQWkN1NHZmUi0hZXklSHozQiY0b2BdJUZfYm0pRmBibSIjPEZfYm1GX2JtKiYiTXdjXnZdKkdxKlI5clUnW0E8ZSwkKj4hUjlGX2JtKUZgYm0iIztGX2JtRmFibSomIk1KWTVOXTRLcWhSKGZAdm1pOz1sMyRHckZfYm0pRmBibSIjOkZfYm1GYWJtKiYiTltedWxIKUdlZCVlInpAWiFwR0opSE1bJVEkRl9ibSlGYGJtIiM5Rl9ibUZhYm0qJiJQTXJEIVtqJj53akRscykqKio+JSkpNDlmZFJvNkZfYm0pRmBibSIjOEZfYm1GYWJtKiYiUGwnKSp5JXpJOyM9ekRAITNAIVs1WngwUzw1NkZfYm0pRmBibSIjN0ZfYm1GX2JtKiYiUWMqeiJbR3MwJ2ZLXmBsa3BVbkdQLCxYdmQoRl9ibSlGYGJtIiM2Rl9ibUZhYm0qJiJSK1BxUl5qSSw4USEpZWlIKTRIaEppOicpKVEkZkZfYm0pRmBibSIjNUZfYm1GYWJtKiYiU1dIZ1RpI1FKWClvRDs6WFZKKFF2IT0wKVIrVSVGX2JtKUZgYm0iIipGX2JtRl9ibSomIlRncUpZKD14KClwKlFFXTlEXCk0IilvVy1udTUtQkZfYm0pRmBibSIiKUZfYm1GX2JtKiYiVDJyUiEqPVtPYykqKkhtZjBkI1FNRXRiJnBgTVUkKUZfYm0pRmBibSIiKEZfYm1GYWJtKiYiVj87RWVMKzEsO09BL0smW0A4IW9NPih5YUN5Mm9GX2JtKUZgYm0iIidGX2JtRmFibSomIld2JnBlaChmOztzKlEzWEAmZVJhdGBHXXUqMzZdSCVGX2JtKUZgYm0iIiZGX2JtRl9ibSomIldSJSo+bitaZmlHTj4/PS47KjN6SnZsYFRIN1xuIkZfYm0pRmBibSIiJUZfYm1GX2JtKiYiWUYwJEcmW3ZYQ1pDNWwtU2Umb04iUSc0M2tPO1xILSdGX2JtKUZgYm0iIiRGX2JtRl9ibSomIllhW2ZdLEFOa0o1WSgpNCFwd3VCPnJeIlshNDMobypwKUZfYm0pRmBibSIiI0ZfYm1GX2Jt t1:=time(CharacteristicPolynomial(B,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmNC42NTlGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJWZZISIkNyNGZXI= t2:time(lbCharpoly(B,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA0N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjWiEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjA4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIjIykhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw3NzYuNTAwMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrbHghIig=
<Text-field style="Heading 3" layout="Heading 3">Linear System Solving</Text-field> n:=200;gen:=rand(0..10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQyMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIzcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzExRihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI0RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM2IiIlRihGKEYoNyNGXXk= A:=Matrix(n,gen);b:=Vector(n,gen); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Maple linear system solving x1:=LinearSolve(A,b, method=modular);x1[1]; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjeDFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== NiQtSSZtZnJhY0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDYqLUkjbW5HRiU2OVFhXWwmbWludXM7NTI3NDE2MTU0NzUxOTUxMDIzMTE3MTU1OTY4NjczNTQ2NDg0MjE2MzA0MTM3MTk5MjE2OTM0MDkxODcxNTUxMTg3Mjg4MjA0MDg4NjE5MjIwNDczNjMxNDQ1NTEwOTI5ODE4MDU0NzM3MDg3Mjc4NTk3MDUzNzYxNzg3MTQ3ODU1MjQxNTM2NzU0NDYxMTE1MTE1OTgxOTMxNzM5NzU4MTk3MTkwNDYxNjAzNDAxMDA4MzEzNjI4MDkyNTQzOTg0MjY0MzY3NTEyNjA0Mzg4NDk5NDM4ODU0Mjc5MzY4NDExNDU0NzM5MTAxODA1MjYyMzgxNjI0Mjk5NDYyMTI2NzA4NjQ1MDQxMjU0NDgzNzE2MTk0MTg2NzU3NDEwNjlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtRi02OVFpXGwzOTc3OTY3NDIxODI4ODU1MzcwNDAwODQ3NDkyMzA2MDk1OTYyMjczNTkwMTYwMjM2NDAyNzcwMTM4NzU4NjY0MTcyOTQyMTQzNTI2MjkxMjM4MzgzNjI3MTk5NjcxMDY3MzU3ODE2ODUyNjUyMTkzMTM5MDc0OTA1MTAyNzg2OTg0ODY0NTA2NTY0OTc3MzU2NjM3MzgzOTIyNjU3Nzk2NzMwNzY4ODExNTgwMDQ2OTMzMTg4MTQ2MjI2OTg3NTY0MzI2MDE5MDk4MjIwMjQwOTIzNDU0Mzg5NjQwMDI1NjAwNDY3MTMxOTM2NjA5NzY2MTkyNzY5MzY5MjQyMDQ5NDI3NzIyNTczODkyMDk3NDYwMTM3ODU0Njk5OTAzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJS5saW5ldGhpY2tuZXNzR1EiMUYoLyUrZGVub21hbGlnbkdRJ2NlbnRlckYoLyUpbnVtYWxpZ25HRmZvLyUpYmV2ZWxsZWRHRjgvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRjcjIyFqXGxwNXV2Jz0lPjtQW2E3L1gnM243aSUqSEM7UWlfIT01UlpYNiVvJHpVJilRJSpcKVEvRV5uVkUlKVJhIzRHT0ozNVMuO1khPig+ZShSPCQ+KWY2OjZZYW5gVF8meTkoeWhQMChmeXMzUFowPSlINF5YOWp0L0E+JykzLyMpRyg9XjooPTRNcEAqPlBUSTtVW1lObm9mOjxKLV4+dmFoVEYmImlcbC4qKnBheThndTQjKlFkQXhVXD9DcCRwRj5tKDRtJD44bi9nRCtrKlFhTSM0Qz8jKTQ+Z0trdilwQVkiKT1McC8hZTYpbzJ0J3pkRSNSUVBtTnhcYzFYJ1spcHktXiFcMlJKPl9FJm8ieU5uNW4qPkZPUVE3SEVOOVVIPGsnZShRLHgta0JnLGZ0QSdmNDFCXFozU3FgJilHPVVueihS LinBox linear system solving x2:=lbSolve(A,b);x2[1]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkbyMhIiQ= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjeDJGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== NiQtSSZtZnJhY0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDYqLUkjbW5HRiU2OVFhXWwmbWludXM7NTI3NDE2MTU0NzUxOTUxMDIzMTE3MTU1OTY4NjczNTQ2NDg0MjE2MzA0MTM3MTk5MjE2OTM0MDkxODcxNTUxMTg3Mjg4MjA0MDg4NjE5MjIwNDczNjMxNDQ1NTEwOTI5ODE4MDU0NzM3MDg3Mjc4NTk3MDUzNzYxNzg3MTQ3ODU1MjQxNTM2NzU0NDYxMTE1MTE1OTgxOTMxNzM5NzU4MTk3MTkwNDYxNjAzNDAxMDA4MzEzNjI4MDkyNTQzOTg0MjY0MzY3NTEyNjA0Mzg4NDk5NDM4ODU0Mjc5MzY4NDExNDU0NzM5MTAxODA1MjYyMzgxNjI0Mjk5NDYyMTI2NzA4NjQ1MDQxMjU0NDgzNzE2MTk0MTg2NzU3NDEwNjlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtRi02OVFpXGwzOTc3OTY3NDIxODI4ODU1MzcwNDAwODQ3NDkyMzA2MDk1OTYyMjczNTkwMTYwMjM2NDAyNzcwMTM4NzU4NjY0MTcyOTQyMTQzNTI2MjkxMjM4MzgzNjI3MTk5NjcxMDY3MzU3ODE2ODUyNjUyMTkzMTM5MDc0OTA1MTAyNzg2OTg0ODY0NTA2NTY0OTc3MzU2NjM3MzgzOTIyNjU3Nzk2NzMwNzY4ODExNTgwMDQ2OTMzMTg4MTQ2MjI2OTg3NTY0MzI2MDE5MDk4MjIwMjQwOTIzNDU0Mzg5NjQwMDI1NjAwNDY3MTMxOTM2NjA5NzY2MTkyNzY5MzY5MjQyMDQ5NDI3NzIyNTczODkyMDk3NDYwMTM3ODU0Njk5OTAzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJS5saW5ldGhpY2tuZXNzR1EiMUYoLyUrZGVub21hbGlnbkdRJ2NlbnRlckYoLyUpbnVtYWxpZ25HRmZvLyUpYmV2ZWxsZWRHRjgvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRjcjIyFqXGxwNXV2Jz0lPjtQW2E3L1gnM243aSUqSEM7UWlfIT01UlpYNiVvJHpVJilRJSpcKVEvRV5uVkUlKVJhIzRHT0ozNVMuO1khPig+ZShSPCQ+KWY2OjZZYW5gVF8meTkoeWhQMChmeXMzUFowPSlINF5YOWp0L0E+JykzLyMpRyg9XjooPTRNcEAqPlBUSTtVW1lObm9mOjxKLV4+dmFoVEYmImlcbC4qKnBheThndTQjKlFkQXhVXD9DcCRwRj5tKDRtJD44bi9nRCtrKlFhTSM0Qz8jKTQ+Z0trdilwQVkiKT1McC8hZTYpbzJ0J3pkRSNSUVBtTnhcYzFYJ1spcHktXiFcMlJKPl9FJm8ieU5uNW4qPkZPUVE3SEVOOVVIPGsnZShRLHgta0JnLGZ0QSdmNDFCXFozU3FgJilHPVVueihS Timing comparison t1:=time(LinearSolve(A,b,method=modular)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmNC42MTNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJThZISIkNyNGZXI= t2:=time(lbSolve(A,b)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjE2OEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkbyIhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4zMjNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJEIkISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxNC4yODE3MzM3NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrdkw8RzkhIik= n:=300;B:=Matrix(n,gen);b1:=Vector(n,gen); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQzMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJDcjRmVy LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4zMDB+eH4zMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjYjFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn4zMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEpYW55dGhpbmdGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== t1:=time(LinearSolve(B,b1, method=modular)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEnMTQuMDEwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjdDFHRigkIiY1UyIhIiQ3I0Zlcg== t2:time(lbSolve(B,b1)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjMxOUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkPiQhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjgwNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMCkhIiQ= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USw0My4zNzQ2MTMwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKzhZUFYhIik=
<Text-field style="Heading 2" layout="Heading 2">Computation over finite fields</Text-field> restart():with(LinBox):with(LinearAlgebra):
<Text-field style="Heading 3" layout="Heading 3">Determinant</Text-field> n:=1000;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USUxMDAwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkibkdGKCIlKzU3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);B:=Modular:-Mod(p,A, integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5UShDX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== Maple determinant Modular:-Determinant(p,B); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 Determinant(A,method=modular[p]); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 LinBox determinant lbDeterminant(p, A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjk5MEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkISoqISIk NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM3 Timing comparison t1:=time(Modular:-Determinant(p,B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMi4xMDZGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJTFAISIkNyNGZXI= t2:=time(Determinant(A,method=modular[p])); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMy4xODRGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJSU9JCEiJDcjRmVy t3:=time(lbDeterminant(p,A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjA0OUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlXDUhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS41MjBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0M0dGKCQiJT86ISIkNyNGZXI= t1/t3;t2/t3; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxLjM4NTUyNjMxNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrO2pfJlEiISIq NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwyLjA5NDczNjg0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrVW90JTQjISIq
<Text-field style="Heading 3" layout="Heading 3">Rank</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=1000;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USUxMDAwRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkibkdGKCIlKzU3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);B:=Modular:-Mod(p,A, integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLn4xMDAwfnh+MTAwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRJ01hdHJpeEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tSSVtc3ViR0YkNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5UShDX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== Maple rank Modular:-Rank(p,B); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USUxMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiJSs1 LinBox rank lbRank(p, A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjA2NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlbDUhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USUxMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiJSs1 Timing comparison t1:=time(Modular:-Rank(p,B)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMS44MDhGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJTM9ISIkNyNGZXI= t2:=time(lbRank(p,A)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYxLjIzNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIlTzchIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMi4wOTNGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJSQ0IyEiJDcjRmVy t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5US0wLjg2MzgzMTgyMDRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyQiKy8jPSRRJykhIzU=
<Text-field style="Heading 3" layout="Heading 3">Minimal Polynomial</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple minimal polynomial doesn't exist in Givaro::Modular Package LinBox minimal polynomial lbMinpoly(p,A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI4MEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkIUchIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNl9mbi1GJDYlLUkjbW5HRiU2OVEiNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y6LyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRS8lL21hdGhiYWNrZ3JvdW5kR0ZILyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNy1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjovJSpzZXBhcmF0b3JHRjovJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGXXAvJSlzdHJldGNoeUdGOi8lKnN5bW1ldHJpY0dGOi8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkUvJStiYWNrZ3JvdW5kR0ZILUklbXN1cEdGJTYlLUkjbWlHRiU2OVEieEYoRjJGNUY4L0Y8Rk9GPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbi9GXG9RJ2l0YWxpY0YoRl5vLUYvNjlRJDI0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRmFvNjNRIitGKEZkb0Znb0Zpby9GXHBRMG1lZGl1bW1hdGhzcGFjZUYoL0ZfcEZcc0ZgcEZicEZkcEZncEZqcEZccUZecUZgcUZicUZkcUZmcS1GJDYlLUYvNjlRIjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDI0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMjQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQyNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMzg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQzODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQzODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQzOTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM5MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDM5MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDM5M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDQyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDIzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDI0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USM0OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDExOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQxMjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTIzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRIzcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USMxM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQxNTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQzNDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQ0MTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQ0MTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkNDEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzMDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzEyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDMxNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQzOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMzk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQ0NTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQ0NTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkNDU4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyRlx2RmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3JGaVxsRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3JGZ3dGZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyRl1gbEZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyRmNnbEZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbckZqc0ZlckZoci1GJDYjLUZpcTYlRltyRmN6RmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEjMTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USMxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USMxOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRIzIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEjMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEjMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USMyNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USMyNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEjMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USMzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USMzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USMzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USMzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDM3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxNDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRIzY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyRmR0RmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQ4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvRltyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNTAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ5OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDQ5OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQ5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQ0OTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkNDk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0ODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkNDg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzQ4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQ0NTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkNDUxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkNDUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjOTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDEwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDEwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDMwMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDMwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMzA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzA3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMzA4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USM5MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxNDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQyODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQyODJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USQyODNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQyODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQyODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDI4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzE2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHNGYG8tRmlxNiVGW3ItRi82OVEkMzE3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDE5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDE5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDM1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDE0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDE0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDQ3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDIyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDIyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDIyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQyMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQyMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQyMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDIyNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMjE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDExMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMTE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDExNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDExN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkNDc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDQ3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQ0NzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQxNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQxNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkNDE2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDE3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkNDIwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMjA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjEwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQyMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMjEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDIxNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQyMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDIxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDIxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDIxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDMzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQzMzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzMzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMjMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyMzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDIzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMjM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMjk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyOTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDMwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRIzUyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEjNTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USM1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRIzU5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkNDExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDMyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDMzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDMzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDMzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDQwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQwN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmR0RmBvLUZpcTYlRltyLUYvNjlRJDQwOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzQ0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDM1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQzNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxNDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQzNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkNDQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkNDQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDQ2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQzNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMzY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMTgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMTgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDE4NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkNDAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDAzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDE3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxNzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USQxNzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMTc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkMTgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXWBsRmBvLUZpcTYlRltyLUYvNjlRJDEyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDEyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQxMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRIzQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQxNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxNzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDE3MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDE3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDE3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDE3NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDQzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQ0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQ0NDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQzMzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQ0MzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQzM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMjcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMjc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMjc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQyODBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkNDI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkNDI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDQyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDQzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDI2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDI2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDI2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQyNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQyNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRIzgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEjODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM4NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEjODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEjODhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USM4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDEwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQxMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqc0Zgby1GaXE2JUZbci1GLzY5USQxMDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQxMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQxMDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEjNDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpXGxGYG8tRmlxNiVGW3ItRi82OVEkMzgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEkMzgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMzgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRJDQ2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDQ2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDQ2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USQ0NjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQ0NzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZkdEZgby1GaXE2JUZbci1GLzY5USQ0NzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpeUZgby1GaXE2JUZbci1GLzY5USQ0NzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZcdkZgby1GaXE2JUZbci1GLzY5USM2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRIzYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRIzYzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDI4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmN6RmBvLUZpcTYlRltyLUYvNjlRJDI5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMjkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMjU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDI1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDI1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDI1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRJDI1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQyNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl9kbEZgby1GaXE2JUZbci1GLzY5USQyNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoeEZgby1GaXE2JUZbci1GLzY5USQyNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQyNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USQzNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjekZgby1GaXE2JUZbci1GLzY5USQzNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDEzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDEzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDEzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlx2RmBvLUZpcTYlRltyLUYvNjlRJDM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDM3OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDM3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USQzODBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3ItRi82OVEkMzIxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZmdkZgby1GaXE2JUZbci1GLzY5USQzMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQzMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMTQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaVxsRmBvLUZpcTYlRltyLUYvNjlRJDE0OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDE1MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml5RmBvLUZpcTYlRltyLUYvNjlRIzc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYGpsRmBvLUZpcTYlRltyLUYvNjlRIzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRIzc3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEjNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnd0Zgby1GaXE2JUZbci1GLzY5USM3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USM4MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmNnbEZgby1GaXE2JUZbci1GLzY5USM4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbci1GLzY5USM4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRIzQ2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXHZGYG8tRmlxNiVGW3ItRi82OVEjNDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEjNDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZjZ2xGYG8tRmlxNiVGW3ItRi82OVEkMzI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMzI4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkNDYwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkNDYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyLUYvNjlRJDQ2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDQ2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmpzRmBvLUZpcTYlRltyLUYvNjlRJDQ2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyRl9kbEZlckZoci1GJDYlRmlcbEZgby1GaXE2JUZbckZmdkZlckZoci1GJDYjLUZpcTYlRltyRmh4RmVyRmhyLUYkNiVGZHRGYG8tRmlxNiVGW3JGLkZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbckZgc0ZlckZoci1GJDYlRmh4RmBvLUZpcTYlRltyRmBqbEZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbckZpeUZlckZoci1GJDYlRmd3RmBvLUZpcTYlRltyLUYvNjlRJDM0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBzRmBvLUZpcTYlRltyLUYvNjlRJDM0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmZ2RmBvLUZpcTYlRltyLUYvNjlRJDM1MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQzNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgamxGYG8tRmlxNiVGW3ItRi82OVEkMTYxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaHhGYG8tRmlxNiVGW3ItRi82OVEkMTYyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanNGYG8tRmlxNiVGW3ItRi82OVEkMTY0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZnZGYG8tRmlxNiVGW3ItRi82OVEkMTY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXlGYG8tRmlxNiVGW3ItRi82OVEkMTY2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDE2N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQxOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZdYGxGYG8tRmlxNiVGW3ItRi82OVEkMjAwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX2RsRmBvLUZpcTYlRltyLUYvNjlRJDIwMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmBqbEZgby1GaXE2JUZbci1GLzY5USQyMDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgc0Zgby1GaXE2JUZbci1GLzY5USQyMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfZGxGYG8tRmlxNiVGW3ItRi82OVEkMjA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY3pGYG8tRmlxNiVGW3ItRi82OVEkMjA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3dGYG8tRmlxNiVGW3ItRi82OVEkMjA3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGY2dsRmBvLUZpcTYlRltyLUYvNjlRJDIwOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl1gbEZgby1GaXE2JUZbci1GLzY5USQ0MDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXI3IyxgZm4qJiIiJiIiIilJInhHRigiJFMjRmVheEZlYXgqJiIiJ0ZlYXgpRmdheCIkVCNGZWF4RmVheComIiM5RmVheClGZ2F4IiRVI0ZlYXhGZWF4KiYiIzpGZWF4KUZnYXgiJFYjRmVheEZlYXgqJClGZ2F4IiRYI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRaI0ZlYXhGZWF4KiYiIipGZWF4KUZnYXgiJFsjRmVheEZlYXgqJiIiJEZlYXgpRmdheCIkXCNGZWF4RmVheComRmRheEZlYXgpRmdheCIkXSNGZWF4RmVheComIiM2RmVheClGZ2F4IiReI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRfI0ZlYXhGZWF4KiYiIiVGZWF4KUZnYXgiJCZRRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCdRRmVheEZlYXgqJiIiKUZlYXgpRmdheCIkKFFGZWF4RmVheComIiM7RmVheClGZ2F4IiQpUUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQhUkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQiUkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQjUkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQkUkZlYXhGZWF4KiYiIzVGZWF4KUZnYXgiJCVSRmVheEZlYXgqJClGZ2F4IiRAJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRBJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRCJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRDJUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiREJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRWJEZlYXhGZWF4KiYiIzdGZWF4KUZnYXgiI1xGZWF4RmVheComRmRheEZlYXgpRmdheCIjXUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiNeRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJD4iRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJD8iRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEEiRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJEIiRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJEMiRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEQiRmVheEZlYXgqJiIiI0ZlYXgpRmdheCIkRiJGZWF4RmVheComRmlkeEZlYXgpRmdheCIjcUZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiNyRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiI3NGZWF4RmVheComRmRheEZlYXgpRmdheCIkZCJGZWF4RmVheComRl5ieEZlYXgpRmdheCIkZSJGZWF4RmVheComRmlkeEZlYXgpRmdheCIkZiJGZWF4RmVheComIiM4RmVheClGZ2F4IiRnIkZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRjIkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRUJEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRVJEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRTJEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ0JUZlYXhGZWF4KiYiIihGZWF4KUZnYXgiJDUlRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJDclRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJDglRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJF8kRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGAkRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJDQkRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJDUkRmVheEZlYXgqJClGZ2F4IiQ2JEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQ3JEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ4JEZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQ6JEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQmUkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQnUkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQoUkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQpUkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRiJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRjJUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRkJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRlJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRmJUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRhJUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiRcJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4RlxjeEZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4RmlleEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4RmdjeEZlYXhGZWF4KiZGZGF4RmVheClGZ2F4Rl9neEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4RmFqeEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4Rl5ieEZlYXhGZWF4KiQpRmdheEZpZHhGZWF4RmVheComRmBjeEZlYXgpRmdheCIjPEZlYXhGZWF4KiQpRmdheCIjPUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiM+RmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiIz9GZWF4RmVheComRmlleEZlYXgpRmdheCIjQEZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiNBRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiI0JGZWF4RmVheComRmFqeEZlYXgpRmdheCIjQ0ZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiNERmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI0VGZWF4RmVheComRl5ieEZlYXgpRmdheCIjRkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiNHRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI0hGZWF4RmVheComRlxjeEZlYXgpRmdheCIjSUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiNKRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiI0tGZWF4RmVheComRmJieEZlYXgpRmdheCIjTUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiNORmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiI09GZWF4RmVheComRlxjeEZlYXgpRmdheCIjUEZlYXhGZWF4KiQpRmdheCIjUkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiNTRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJHMkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJHUkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJHYkRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJFUiRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI2tGZWF4RmVheComRmRbeUZlYXgpRmdheCIjbEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiNtRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiI25GZWF4RmVheComRmJieEZlYXgpRmdheCIjb0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiNwRmVheEZlYXhGYmJ4RmVheComRmJieEZlYXgpRmdheCIkIVtGZWF4RmVheComRmRbeUZlYXgpRmdheCIkI1tGZWF4RmVheComRmBjeEZlYXgpRmdheCIkIltGZWF4RmVheComRmJieEZlYXhGZ2F4RmVheEZlYXgqJClGZ2F4IiQrJkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQqXEZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQpXEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQoXEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQnXEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQmXEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQlXEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQkXEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQjXEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQiXEZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQqW0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQpW0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQoW0ZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQnW0ZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQmW0ZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQlW0ZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQkW0ZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRaJEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRbJEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRcJEZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQhXEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRMJEZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRNJEZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRbJUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiRdJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiReJUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRfJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRgJUZlYXhGZWF4KiQpRmdheCIjJypGZWF4RmVheComRmVkeEZlYXgpRmdheCIjKCpGZWF4RmVheCokKUZnYXgiIykqRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiIyoqRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCsiRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCwiRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJC0kRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJC4kRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJC8kRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJDAkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJDEkRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJDIkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJDMkRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiIyIqRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiIyMqRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiIyQqRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFciRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCJHRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCNHRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJCRHRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCVHRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCZHRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCdHRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJClHRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJDskRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJDwkRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJD0kRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiJD4kRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJD8kRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCE+RmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCI+RmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJCM+RmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCU+RmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJCY+RmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCc+RmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCg+RmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCk+RmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJCo9RmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJGYkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJGckRmVheEZlYXgqJClGZ2F4IiRoJEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRpJEZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRYIkZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiRZIkZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRwJEZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRxJEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRyJEZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiR6JUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQ/I0ZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRAI0ZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRBI0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRCI0ZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRDI0ZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiREI0ZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiRFI0ZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRGI0ZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiRHI0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQ+I0ZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQ2IkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiQ3IkZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiQ4IkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ5IkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQ6IkZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQ7IkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiQ8IkZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiQ9IkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ0IkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiR0JUZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiR1JUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiR2JUZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiR3JUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiR4JUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiR5JUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiReIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRfIkZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiRgIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRhIkZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiQ7JUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiQ8JUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQ9JUZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQ+JUZlYXhGZWF4KiZGYmJ4RmVheClGZ2F4IiQ/JUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4IiQ0I0ZlYXhGZWF4KiQpRmdheCIkNSNGZWF4RmVheComRmRheEZlYXgpRmdheCIkNiNGZWF4RmVheComRmVkeEZlYXgpRmdheCIkNyNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkOCNGZWF4RmVheComRmFqeEZlYXgpRmdheCIkOSNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkOiNGZWF4RmVheComRmRheEZlYXgpRmdheCIkOyNGZWF4RmVheComRmBjeEZlYXgpRmdheCIkPCNGZWF4RmVheComRl5ieEZlYXgpRmdheCIkPSNGZWF4RmVheComRmJieEZlYXgpRmdheCIkTiRGZWF4RmVheComRltpeEZlYXgpRmdheCIkTyRGZWF4RmVheComRmdjeEZlYXgpRmdheCIkUCRGZWF4RmVheComRmlkeEZlYXgpRmdheCIkSCNGZWF4RmVheComRltpeEZlYXgpRmdheCIkSSNGZWF4RmVheComRmVkeEZlYXgpRmdheCIkSiNGZWF4RmVheComRmlkeEZlYXgpRmdheCIkSyNGZWF4RmVheComRmRheEZlYXgpRmdheCIkTCNGZWF4RmVheCokKUZnYXgiJE0jRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJE4jRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJE8jRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFAjRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJFEjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJFIjRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJCZIRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJCdIRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJChIRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJClIRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJCpIRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJCskRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJCwkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiI19GZWF4RmVheComRlxjeEZlYXgpRmdheCIjYUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiNiRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiI2RGZWF4RmVheComRltpeEZlYXgpRmdheCIjZUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiNmRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJDYlRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJEgkRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJEkkRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJEokRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJEskRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJDElRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJDIlRmVheEZlYXgqJkZiYnhGZWF4KUZnYXgiJDMlRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiI3VGZWF4RmVheComRl5keEZlYXgpRmdheCIkVyRGZWF4RmVheComRl9neEZlYXgpRmdheCIkYiRGZWF4RmVheComRmlleEZlYXgpRmdheCIkYyRGZWF4RmVheComRl5ieEZlYXgpRmdheCIkYSRGZWF4RmVheComRmlkeEZlYXgpRmdheCIkUyJGZWF4RmVheComRltpeEZlYXgpRmdheCIkVCJGZWF4RmVheComRmRheEZlYXgpRmdheCIkbSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkbiRGZWF4RmVheComRmdjeEZlYXgpRmdheCIkbyRGZWF4RmVheComRmlleEZlYXgpRmdheCIkVSVGZWF4RmVheComRmBjeEZlYXgpRmdheCIkViVGZWF4RmVheComRmRheEZlYXgpRmdheCIkVyVGZWF4RmVheComRmlleEZlYXgpRmdheCIkWCVGZWF4RmVheComRl5ieEZlYXgpRmdheCIkWSVGZWF4RmVheComRltpeEZlYXgpRmdheCIkWiVGZWF4RmVheComRmlleEZlYXgpRmdheCIkaiRGZWF4RmVheComRmpheEZlYXgpRmdheCIkayRGZWF4RmVheComRl9neEZlYXgpRmdheCIkbCRGZWF4RmVheComRmVkeEZlYXgpRmdheCIkIz1GZWF4RmVheComRmdjeEZlYXgpRmdheCIkJD1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkJT1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkJj1GZWF4RmVheComRmVkeEZlYXgpRmdheCIkJz1GZWF4RmVheComRmRbeUZlYXgpRmdheCIkKD1GZWF4RmVheComRl5ieEZlYXgpRmdheCIkKT1GZWF4RmVheCokKUZnYXgiJCpSRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJCslRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCwlRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJC0lRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJC4lRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJE4lRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJHYiRmVheEZlYXgqJkZkW3lGZWF4KUZnYXgiJHciRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJHgiRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJHkiRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHoiRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJCE9RmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJCI9RmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJEciRmVheEZlYXgqJClGZ2F4IiRIIkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRJIkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRKIkZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRLIkZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiRMIkZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRNIkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiNWRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI1dGZWF4RmVheComRlxjeEZlYXgpRmdheCIjWEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiRvIkZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRwIkZlYXhGZWF4KiQpRmdheCIkcSJGZWF4RmVheComRmRheEZlYXgpRmdheCIkciJGZWF4RmVheComRlxjeEZlYXgpRmdheCIkcyJGZWF4RmVheComRmpheEZlYXgpRmdheCIkdCJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkdSJGZWF4RmVheComRmpheEZlYXgpRmdheCIkUCVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkUSVGZWF4RmVheComRl5ieEZlYXgpRmdheCIkUiVGZWF4RmVheComRmpheEZlYXgpRmdheCIkUyVGZWF4RmVheComRltpeEZlYXgpRmdheCIkVCVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkUSRGZWF4RmVheComRmlleEZlYXgpRmdheCIkUiRGZWF4RmVheComRmRbeUZlYXgpRmdheCIkSiVGZWF4RmVheComRmlleEZlYXgpRmdheCIkSyVGZWF4RmVheComRmRheEZlYXgpRmdheCIkTCVGZWF4RmVheComRmpheEZlYXgpRmdheCIkTSVGZWF4RmVheComRmRheEZlYXgpRmdheCIkTyVGZWF4RmVheCokKUZnYXgiJHMjRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJHUjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHYjRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJHgjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJHkjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJHojRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJCFHRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJHQjRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJEUlRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJEYlRmVheEZlYXgqJkZhanhGZWF4KUZnYXgiJEclRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJEglRmVheEZlYXgqJkZgY3hGZWF4KUZnYXgiJEklRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJGsjRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiJGwjRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJG0jRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJG4jRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJG8jRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJHAjRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJHEjRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJHIjRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiIyYqRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiIyUqRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiIyQpRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiIyUpRmVheEZlYXgqJClGZ2F4IiMmKUZlYXhGZWF4KiZGZGF4RmVheClGZ2F4IiMnKUZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiMoKUZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiMpKUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiMqKUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiMhKkZlYXhGZWF4KiZGaWR4RmVheClGZ2F4IiQuIkZlYXhGZWF4KiZGX2d4RmVheClGZ2F4IiQvIkZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiQwIkZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiQxIkZlYXhGZWF4KiQpRmdheCIkMiJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkMyJGZWF4RmVheComRmlkeEZlYXgpRmdheCIkLSJGZWF4RmVheComRltpeEZlYXgpRmdheCIjVEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiQiUUZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiQjUUZlYXhGZWF4KiQpRmdheCIkJFFGZWF4RmVheComRl5keEZlYXgpRmdheCIkJVFGZWF4RmVheComRmRbeUZlYXgpRmdheCIkbSVGZWF4RmVheComRlxjeEZlYXgpRmdheCIkbiVGZWF4RmVheComRlxjeEZlYXgpRmdheCIkbyVGZWF4RmVheComRmFqeEZlYXgpRmdheCIkcCVGZWF4RmVheComRmBjeEZlYXgpRmdheCIkcSVGZWF4RmVheComRmJieEZlYXgpRmdheCIkciVGZWF4RmVheComRmVkeEZlYXgpRmdheCIkcyVGZWF4RmVheComRlxjeEZlYXgpRmdheCIjZ0ZlYXhGZWF4KiQpRmdheCIjaEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiNpRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiI2pGZWF4RmVheComRmlleEZlYXgpRmdheCIkKkdGZWF4RmVheComRmlkeEZlYXgpRmdheCIkIUhGZWF4RmVheComRltpeEZlYXgpRmdheCIkIkhGZWF4RmVheComRmRbeUZlYXgpRmdheCIkI0hGZWF4RmVheComRmlkeEZlYXgpRmdheCIkJEhGZWF4RmVheComRl5keEZlYXgpRmdheCIkJUhGZWF4RmVheComRl5keEZlYXgpRmdheCIkYSNGZWF4RmVheComRmlleEZlYXgpRmdheCIkYiNGZWF4RmVheComRmBjeEZlYXgpRmdheCIkYyNGZWF4RmVheCokKUZnYXgiJGQjRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiJGUjRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGYjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJGcjRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJGgjRmVheEZlYXgqJkZeZHhGZWF4KUZnYXgiJGkjRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJGojRmVheEZlYXgqJkZfZ3hGZWF4KUZnYXgiJGAjRmVheEZlYXgqJkZnY3hGZWF4KUZnYXgiJGQkRmVheEZlYXgqJkZpZHhGZWF4KUZnYXgiJGUkRmVheEZlYXgqJkZkYXhGZWF4KUZnYXgiJE4iRmVheEZlYXgqJClGZ2F4IiRPIkZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRRIkZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRSIkZlYXhGZWF4KiZGXGN4RmVheClGZ2F4IiR4JEZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiR5JEZlYXhGZWF4KiQpRmdheCIkeiRGZWF4RmVheComRmlleEZlYXgpRmdheCIkIVFGZWF4RmVheComRltpeEZlYXgpRmdheCIkdyRGZWF4RmVheComRmJieEZlYXgpRmdheCIkQCRGZWF4RmVheComRmRheEZlYXgpRmdheCIkQSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkQiRGZWF4RmVheCokKUZnYXgiJEMkRmVheEZlYXgqJkZqYXhGZWF4KUZnYXgiJEQkRmVheEZlYXgqJkZbaXhGZWF4KUZnYXgiJFoiRmVheEZlYXgqJkZpZXhGZWF4KUZnYXgiJFwiRmVheEZlYXgqJkZeYnhGZWF4KUZnYXgiJF0iRmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI3ZGZWF4RmVheComRmRbeUZlYXgpRmdheCIjd0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiN4RmVheEZlYXgqJkZlZHhGZWF4KUZnYXgiI3lGZWF4RmVheComRmdjeEZlYXgpRmdheCIjekZlYXhGZWF4KiZGZFt5RmVheClGZ2F4IiMhKUZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiMiKUZlYXhGZWF4KiZGaWV4RmVheClGZ2F4IiMjKUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiNZRmVheEZlYXgqJkZcY3hGZWF4KUZnYXgiI1pGZWF4RmVheComRl9neEZlYXgpRmdheCIjW0ZlYXhGZWF4KiZGYWp4RmVheClGZ2F4IiRFJEZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRGJEZlYXhGZWF4KiZGZWR4RmVheClGZ2F4IiRHJEZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRnJUZlYXhGZWF4KiZGZ2N4RmVheClGZ2F4IiRoJUZlYXhGZWF4KiZGW2l4RmVheClGZ2F4IiRpJUZlYXhGZWF4KiZGXmR4RmVheClGZ2F4IiRqJUZlYXhGZWF4KiZGamF4RmVheClGZ2F4IiRrJUZlYXhGZWF4KiZGXmJ4RmVheClGZ2F4IiRsJUZlYXhGZWF4KiZGYGN4RmVheClGZ2F4RltpeEZlYXhGZWF4KiZGaWV4RmVheClGZ2F4RmBjeEZlYXhGZWF4KiQpRmdheEZeZHhGZWF4RmVheComRmJieEZlYXgpRmdheEZkYXhGZWF4RmVheComRmRbeUZlYXgpRmdheEZqYXhGZWF4RmVheComRl5keEZlYXgpRmdheEZkW3lGZWF4RmVheComRmRbeUZlYXgpRmdheEZlZHhGZWF4RmVheComRmdjeEZlYXgpRmdheCIkWCRGZWF4RmVheComRmpheEZlYXgpRmdheCIkWSRGZWF4RmVheComRmBjeEZlYXgpRmdheCIkXSRGZWF4RmVheComRl9neEZlYXgpRmdheCIkXiRGZWF4RmVheComRmRbeUZlYXgpRmdheCIkaCJGZWF4RmVheComRl5keEZlYXgpRmdheCIkaSJGZWF4RmVheComRl5ieEZlYXgpRmdheCIkayJGZWF4RmVheComRmBjeEZlYXgpRmdheCIkbCJGZWF4RmVheComRmVkeEZlYXgpRmdheCIkbSJGZWF4RmVheComRmFqeEZlYXgpRmdheCIkbiJGZWF4RmVheComRl9neEZlYXgpRmdheCIkKj5GZWF4RmVheComRl9neEZlYXgpRmdheCIkKyNGZWF4RmVheComRltpeEZlYXgpRmdheCIkLSNGZWF4RmVheComRmRbeUZlYXgpRmdheCIkLiNGZWF4RmVheComRmpheEZlYXgpRmdheCIkLyNGZWF4RmVheComRltpeEZlYXgpRmdheCIkMCNGZWF4RmVheComRmlkeEZlYXgpRmdheCIkMSNGZWF4RmVheComRmdjeEZlYXgpRmdheCIkMiNGZWF4RmVheComRmFqeEZlYXgpRmdheCIkMyNGZWF4RmVheComRl9neEZlYXgpRmdheCIkLyVGZWF4RmVheA== Timing time(lbMinpoly(p,A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjIyN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkRiMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjcwNkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMSghIiQ=
<Text-field style="Heading 3" layout="Heading 3">Characteristic Polynomial</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple Characteristic polynomial doesn't exist in Givaro::Modular package LinBox Characteristic polynomial lbCharpoly(p,A,'x'); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjQ1M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkYCUhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNl1nbi1GJDYlLUkjbW5HRiU2OVEiN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y6LyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRS8lL21hdGhiYWNrZ3JvdW5kR0ZILyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNy1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjovJSpzZXBhcmF0b3JHRjovJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGXXAvJSlzdHJldGNoeUdGOi8lKnN5bW1ldHJpY0dGOi8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkUvJStiYWNrZ3JvdW5kR0ZILUklbXN1cEdGJTYlLUkjbWlHRiU2OVEieEYoRjJGNUY4L0Y8Rk9GPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbi9GXG9RJ2l0YWxpY0YoRl5vLUYvNjlRJDM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRigtRmFvNjNRIitGKEZkb0Znb0Zpby9GXHBRMG1lZGl1bW1hdGhzcGFjZUYoL0ZfcEZcc0ZgcEZicEZkcEZncEZqcEZccUZecUZgcUZicUZkcUZmcS1GJDYjLUZpcTYlRltyLUYvNjlRJDM5MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMzkzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQxMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDEwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDM4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDM4OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEkMTAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTAzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JS1GLzY5USI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDEwMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzEyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRJDQzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQzNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRIzk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEjOTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USM5OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjOTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM5NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRIzk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USM5MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRIzkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEjOTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDgzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkNDg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEiM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0Zgby1GaXE2JUZbci1GLzY5USQ0ODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzODZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDExRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkNDEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiUtRi82OVEjMTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GYG8tRmlxNiVGW3ItRi82OVEjODdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USM4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRIzg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRIzg1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRIzg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEjODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USM4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzODFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDM4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlLUYvNjlRIzE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmBvLUZpcTYlRltyLUYvNjlRIzc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM4MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USM3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzc2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRIzcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjNzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEjNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQ0MzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEjNjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMzc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRIzY3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM2OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZockZpdkZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQ4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDQ4OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0ODlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQ0OTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkNDkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDk0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDQzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0OTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgb0ZbckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxMTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQxMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQxMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQxMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMTA4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMTA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkMTM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMTM3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDEzOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQxMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEzM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDEzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQxMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQ0OTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMTMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkMTMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQxMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQ1MDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQxMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxMjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxMjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDEyMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDEyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDExOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDExOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDExN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0OTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ5NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQxMTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxMTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQxMTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxMTZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMTcyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMTczRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDE3NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE2OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQxNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQxNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQxNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQxNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQxNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMTY1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE2MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDM5N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMzk4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDM5OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE1OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE1NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxNTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USM0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDE0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTUwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDE0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDE0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE0M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQxNDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMTM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMjEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDIxNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDIxNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIxMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDIxMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDIxMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDQxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQyMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMjA5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyMDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyMDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyMDFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMjAyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDIwM0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQxOThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMTk5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDIwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDE5M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQxOTVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxOTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQxOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQxOTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQxOTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMTkyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTg3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMTg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMTg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkMTg0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE4NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDE4NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDE4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDE4MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDE4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMTc4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMTc5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMTgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMTc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDE3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDE3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0NDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDIyNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQyMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQyMjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQyMjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjE4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDIxOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDIxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI0MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDI0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDI0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQyMzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyMzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyMzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMjMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRJDIzNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQyMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQ0MDBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDIzMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDIzMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIzMkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDIyOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQyNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjY0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDQ0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkNDQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQyNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQyNThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjU3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjU1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDI1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI1NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyNTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0MThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQ0MTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQ0NDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQ0NDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0NDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQyNDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjQ3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDI0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDI0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI0NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkMjgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEkMjgxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRJDI3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQyNzhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyNzlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDI3NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDI3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDI3MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDI3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDI3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQ0MDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkNDA0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMjY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjg5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjkwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMjkxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMjg2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDI4N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEkMjg4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW1xsRmBvLUZpcTYlRltyLUYvNjlRJDI4M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQyODRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyODVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzMjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQ4MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDQwNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQ0MDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQyOTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQyOTNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQyOTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQ0MjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMjI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMjk1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMjk2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkMjk3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDMwMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQzMDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQyOTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQ0NTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQ0NTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQyMjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMzA2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMDdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzMDRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzA1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDMwOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDMxMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzMTFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQzMTJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzE0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzE1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzEzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkNDUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkNDU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEkNDU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkMzE5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzIwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkMzIxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNDU3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQ0NTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbckZnc0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbckZldUZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyRi5GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3JGaF5sRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3JGXmFsRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbckZbdUZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDMyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQzMjlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqd0Zgby1GaXE2JUZbci1GLzY5USQzMjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbckZqd0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbckZhdEZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbckZgekZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQ0MjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0MjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3JGW1xsRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMzAxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyRmp6RmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3JGaXZGZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzMzJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQzMzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDQ2MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRJDQ2MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRJDQ2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRml2RmBvLUZpcTYlRltyLUYvNjlRJDM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNDVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNDZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkMzQxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDM0MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNDNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkMzM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGanpGYG8tRmlxNiVGW3ItRi82OVEkMzM5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzQwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzM1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkMzM2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQzMzdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MDJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USMyMEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USMyMUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzIyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMzU1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkMzU2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkMzU0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USQ0NjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZoXmxGYG8tRmlxNiVGW3ItRi82OVEkNDY4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEkNDY5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDcwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjMTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USMxOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbckZbaWxGZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbckZfdkZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyRltkbEZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRJDQ2M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDQ2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDQ2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USQ0NjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbaWxGYG8tRmlxNiVGW3ItRi82OVEkMzUwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDM1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDM1M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRJDM0N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDM0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQzNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNjBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzNTdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkNDI2RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjMjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRIzI3RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEjMjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USMyNEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USMyNUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDMxN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USQzMThGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USMyOEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmdzRmBvLUZpcTYlRltyLUYvNjlRIzI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEjMzBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbdUZgby1GaXE2JUZbci1GLzY5USQzNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USQzNjJGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzNjNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZeYWxGYG8tRmlxNiVGW3ItRi82OVEkNDI4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDI5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW3VGYG8tRmlxNiVGW3ItRi82OVEkNDMwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRIzM0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEjMzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEjMzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRIzMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaXZGYG8tRmlxNiVGW3ItRi82OVEjMzNGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbZGxGYG8tRmlxNiVGW3ItRi82OVEkMzMxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGandGYG8tRmlxNiVGW3ItRi82OVEkNDI1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2lsRmBvLUZpcTYlRltyLUYvNjlRJDM2NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USQzNjVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZpdkZgby1GaXE2JUZbci1GLzY5USQzNjZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USMzNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USMzN0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRIzM4RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDcxRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGW2RsRmBvLUZpcTYlRltyLUYvNjlRJDQ3MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRJDQ3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQ0MTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USQzNjdGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQzNjhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM3MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USMzOUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM0MEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USM0MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDM3M0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltcbEZgby1GaXE2JUZbci1GLzY5USQzNzRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzNzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZnc0Zgby1GaXE2JUZbci1GLzY5USQ0MDhGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USQ0MDlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZhdEZgby1GaXE2JUZbci1GLzY5USQ0MTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USQzNzVGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZfdkZgby1GaXE2JUZbci1GLzY5USQzNzZGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUYuRmBvLUZpcTYlRltyLUYvNjlRJDM3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmB6RmBvLUZpcTYlRltyLUYvNjlRIzQyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGXmFsRmBvLUZpcTYlRltyLUYvNjlRIzQzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEkNDc0RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYXRGYG8tRmlxNiVGW3ItRi82OVEkNDc1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGaF5sRmBvLUZpcTYlRltyLUYvNjlRJDQ3NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM0NEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzQ1RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGLkZgby1GaXE2JUZbci1GLzY5USM0NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRJDMxNkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USM0OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYjLUZpcTYlRltyLUYvNjlRIzQ5RihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjNTBGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZldUZgby1GaXE2JUZbci1GLzY5USM1MUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USM1MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp6RmBvLUZpcTYlRltyLUYvNjlRIzUzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZ3NGYG8tRmlxNiVGW3ItRi82OVEjNTRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USM1N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl5hbEZgby1GaXE2JUZbci1GLzY5USM1OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRi5GYG8tRmlxNiVGW3ItRi82OVEjNTlGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZqekZgby1GaXE2JUZbci1GLzY5USM1NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltpbEZgby1GaXE2JUZbci1GLzY5USM1NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRl92RmBvLUZpcTYlRltyLUYvNjlRJDQ3N0YoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmF0RmBvLUZpcTYlRltyLUYvNjlRJDQ3OEYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmp3RmBvLUZpcTYlRltyLUYvNjlRJDQ3OUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmV1RmBvLUZpcTYlRltyLUYvNjlRIzYwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiMtRmlxNiVGW3ItRi82OVEjNjFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZgekZgby1GaXE2JUZbci1GLzY5USM2MkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRlt1RmBvLUZpcTYlRltyLUYvNjlRIzYzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEjNjRGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2Iy1GaXE2JUZbci1GLzY5USM2NUYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRmhebEZgby1GaXE2JUZbci1GLzY5USM2NkYoRjJGNUY4RjtGPUY/RkFGQ0ZGRklGS0ZNRlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeb0ZlckZoci1GJDYlRltkbEZgby1GaXE2JUZbci1GLzY5USQ0MzFGKEYyRjVGOEY7Rj1GP0ZBRkNGRkZJRktGTUZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GZXJGaHItRiQ2JUZbXGxGYG8tRmlxNiVGW3ItRi82OVEkNDMyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGYHpGYG8tRmlxNiVGW3ItRi82OVEkNDMzRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGX3ZGYG8tRmlxNiVGW3ItRi82OVEkNDgwRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyRmhyLUYkNiVGZXVGYG8tRmlxNiVGW3ItRi82OVEkNDgyRihGMkY1RjhGO0Y9Rj9GQUZDRkZGSUZLRk1GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vRmVyNyMsXmduKiYiIigiIiIpSSJ4R0YoIiQhUkZjZHhGY2R4KiQpRmVkeCIkIlJGY2R4RmNkeComIiImRmNkeClGZWR4IiQjUkZjZHhGY2R4KiYiIzVGY2R4KUZlZHgiJCRSRmNkeEZjZHgqJiIiJUZjZHgpRmVkeCIkMCJGY2R4RmNkeComIiInRmNkeClGZWR4IiQxIkZjZHhGY2R4KiYiIzpGY2R4KUZlZHgiJChRRmNkeEZjZHgqJiIjOEZjZHgpRmVkeCIkKVFGY2R4RmNkeComRltleEZjZHgpRmVkeCIkKlFGY2R4RmNkeComIiIpRmNkeClGZWR4IiQtIkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQuIkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQvIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiMqKkZjZHhGY2R4KiQpRmVkeCIkKyJGY2R4RmNkeComIiIqRmNkeClGZWR4IiQsIkZjZHhGY2R4KiYiIzdGY2R4KUZlZHgiJE0lRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJE4lRmNkeEZjZHgqJiIjNkZjZHgpRmVkeCIjJypGY2R4RmNkeComRl9meEZjZHgpRmVkeCIjKCpGY2R4RmNkeComRmNleEZjZHgpRmVkeCIjKSpGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjJCpGY2R4RmNkeCokKUZlZHgiIyUqRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiIyYqRmNkeEZjZHgqJiIiI0ZjZHgpRmVkeCIjISpGY2R4RmNkeComRltleEZjZHgpRmVkeCIjIipGY2R4RmNkeComRmdleEZjZHgpRmVkeCIjIypGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkJFtGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkJVtGY2R4RmNkeComIiIkRmNkeClGZWR4IiQmW0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQlUUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQmUUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQnUUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQ2JUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQ4JUZjZHhGY2R4KiYiIztGY2R4KUZlZHgiIygpRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiIykpRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiIyUpRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiIyYpRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiIycpRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiIyIpRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiIyQpRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJCJRRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJCNRRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJCRRRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI3hGY2R4RmNkeComIiM5RmNkeClGZWR4IiN5RmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiIyEpRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiI3ZGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjd0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiNzRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiI3RGY2R4RmNkeComRmldeUZjZHgpRmVkeCIjdUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiREJEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRSJUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNwRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiI3FGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjckZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiR5JEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiR6JEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQhUUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNuRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI29GY2R4RmNkeEZfZnhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoW0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQpW0ZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiQqW0ZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiQkXEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQjXEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQlXEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRPJUZjZHhGY2R4KiQpRmVkeCIkUCVGY2R4RmNkeComRltleEZjZHgpRmVkeCIkUSVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkIVxGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkJVJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkJlJGY2R4RmNkeComRltleEZjZHhGZWR4RmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJDUiRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJDYiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDciRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDIiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJDMiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJDQiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJE8iRmNkeEZjZHgqJClGZWR4IiRQIkZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRRIkZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiROIkZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRMIkZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRNIkZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRLIkZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQqXEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRJIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRKIkZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRIIkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRGIkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRHIkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRFIkZjZHhGY2R4KiQpRmVkeCIkKyZGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkQyJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkRCJGY2R4RmNkeComRltleEZjZHgpRmVkeCIkQiJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkQCJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkQSJGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkPyJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkJ1xGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkPSJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkPiJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkPCJGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkKFxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkKVxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkJlxGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkOCJGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkOSJGY2R4RmNkeCokKUZlZHgiJDoiRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJDsiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJHMiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHQiRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJHUiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJHAiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHEiRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJHIiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJG0iRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJG4iRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJG8iRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGoiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGsiRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJGwiRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJGciRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGgiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGkiRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJChSRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJClSRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJCpSRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGQiRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJGUiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGYiRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGEiRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGIiRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGMiRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJF4iRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJF8iRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJGAiRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiI1pGY2R4RmNkeComRl9meEZjZHgpRmVkeCIkWyJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkXCJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkXSJGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkWCJGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkWSJGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkWiJGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkVSJGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkViJGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkVyJGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkUiJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkUyJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkVCJGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkOCNGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkOSNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkOiNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkNSNGY2R4RmNkeComRltleEZjZHgpRmVkeCIkNiNGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkNyNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkOiVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkOyVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkMiNGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkMyNGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkNCNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkLyNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkMCNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkMSNGY2R4RmNkeCokKUZlZHgiJCwjRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJC0jRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJC4jRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJCk+RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJCo+RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJCsjRmNkeEZjZHgqJClGZWR4IiQkPkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQmPkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQoPkZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQlPkZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhPkZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQiPkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQjPkZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoPUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQpPUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQqPUZjZHhGY2R4KiQpRmVkeCIkJT1GY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkJj1GY2R4RmNkeComRltleEZjZHgpRmVkeCIkJz1GY2R4RmNkeComRmNleEZjZHgpRmVkeCIkIj1GY2R4RmNkeComRl9leEZjZHgpRmVkeCIkIz1GY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkJD1GY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkeSJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkeiJGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkIT1GY2R4RmNkeComRmpneEZjZHgpRmVkeCIkdiJGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkdyJGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkeCJGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkUyVGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkVCVGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkVSVGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkQyNGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkQiNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkQCNGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkQSNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkPyNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkPSNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkPiNGY2R4RmNkeComRmNleEZjZHgpRmVkeCIkPCNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkVCNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkVSNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkUyNGY2R4RmNkeComRmRqeEZjZHgpRmVkeCIkTyNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkUSNGY2R4RmNkeComRmpneEZjZHgpRmVkeCIkUiNGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIkTCNGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkTSNGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkTiNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkKyVGY2R4RmNkeComRmFoeEZjZHgpRmVkeCIkLCVGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkSSNGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkSiNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkSyNGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkSCNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkRiNGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkbCNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkbSNGY2R4RmNkeComRltleEZjZHgpRmVkeCIkbiNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkaSNGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkaiNGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkayNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkWiVGY2R4RmNkeComRmldeUZjZHgpRmVkeCIkWyVGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkXCVGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkZyNGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkaCNGY2R4RmNkeCokKUZlZHgiJGUjRmNkeEZjZHgqJkZhaHhGY2R4KUZlZHgiJGMjRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGQjRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJGIjRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJGAjRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGEjRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJF8jRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiJDwlRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJD0lRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJD4lRmNkeEZjZHgqJClGZWR4IiRWJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRXJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRYJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRZJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRdI0ZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiReI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRcI0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiRaI0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRbI0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRZI0ZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRXI0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRYI0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRWI0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQhR0ZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiQiR0ZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQjR0ZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiR4I0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiR5I0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiR6I0ZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiR1I0ZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiR2I0ZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiR3I0ZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRyI0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRzI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiR0I0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQuJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiQvJUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQwJUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRvI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRwI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRxI0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQqR0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhSEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQiSEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQnR0ZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiQoR0ZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQpR0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQkR0ZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiQlR0ZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQmR0ZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRBJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQiW0ZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiQxJUZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQyJUZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiQjSEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQkSEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiQlSEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQ/JUZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRAJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRBJUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiREI0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQmSEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQnSEZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQoSEZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiQrJEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQtJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQqSEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRdJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiReJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRfJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRHI0ZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiQxJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiQyJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQzJEZjZHhGY2R4KiQpRmVkeCIkLiRGY2R4RmNkeComRmZneEZjZHgpRmVkeCIkLyRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkMCRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkNCRGY2R4RmNkeCokKUZlZHgiJDUkRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJDYkRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJDckRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHgiJDkkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDokRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJDgkRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiJGAlRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJGElRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiJGMlRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJD4kRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJD8kRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJEAkRmNkeEZjZHgqJClGZWR4IiRkJUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRlJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRmJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRDJEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRFJEZjZHhGY2R4KiQpRmVkeCIkQiRGY2R4RmNkeComRmZmeEZjZHgpRmVkeEZbZXhGY2R4RmNkeComRmdbeUZjZHgpRmVkeEZnZXhGY2R4RmNkeComRltmeEZjZHgpRmVkeEZiZHhGY2R4RmNkeComRmldeUZjZHgpRmVkeEZkaXhGY2R4RmNkeComRmZneEZjZHgpRmVkeEZkanhGY2R4RmNkeComRmJkeEZjZHgpRmVkeEZjZXhGY2R4RmNkeCokKUZlZHgiJEckRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJEgkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJEkkRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJEYkRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHhGZmZ4RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHhGX2V4RmNkeEZjZHgqJkZnW3lGY2R4KUZlZHhGZmd4RmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJEIlRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJEMlRmNkeEZjZHgqJkZkanhGY2R4KUZlZHhGYWh4RmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJCwkRmNkeEZjZHgqJkZnW3lGY2R4KUZlZHhGamd4RmNkeEZjZHgqJkZbZXhGY2R4KUZlZHhGX2Z4RmNkeEZjZHgqJClGZWR4IiRLJEZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiRMJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRNJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRnJUZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiRoJUZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRpJUZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRXJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRYJEZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRZJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRUJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRVJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRWJEZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRRJEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRSJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRTJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiROJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRPJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRQJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQtJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiM/RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI0BGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjQUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRiJEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRjJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiRhJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRuJUZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRvJUZjZHhGY2R4KiQpRmVkeCIkcCVGY2R4RmNkeComRl9leEZjZHgpRmVkeCIkcSVGY2R4RmNkeComRltleEZjZHgpRmVkeCIjPEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiM9RmNkeEZjZHgqJkZkaXhGY2R4KUZlZHhGaV15RmNkeEZjZHgqJkZbZnhGY2R4KUZlZHhGW2Z4RmNkeEZjZHgqJkZbZXhGY2R4KUZlZHhGZ1t5RmNkeEZjZHgqJClGZWR4IiRqJUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRrJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRsJUZjZHhGY2R4KiZGZGl4RmNkeClGZWR4IiRtJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiRdJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRfJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRgJEZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRaJEZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiRbJEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRmJEZjZHhGY2R4KiQpRmVkeCIkZyRGY2R4RmNkeComRmdleEZjZHgpRmVkeCIkZCRGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIkRSVGY2R4RmNkeComRmZmeEZjZHgpRmVkeCIkRiVGY2R4RmNkeComRltleEZjZHgpRmVkeCIjRUZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiNGRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiI0JGY2R4RmNkeComRltmeEZjZHgpRmVkeCIjQ0ZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNERmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJDwkRmNkeEZjZHgqJkZpXXlGY2R4KUZlZHgiJD0kRmNkeEZjZHgqJkZfZnhGY2R4KUZlZHgiI0dGY2R4RmNkeComRltleEZjZHgpRmVkeCIjSEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiNJRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJGgkRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiJGkkRmNkeEZjZHgqJkZqZ3hGY2R4KUZlZHgiJGokRmNkeEZjZHgqJkZkanhGY2R4KUZlZHgiJEclRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJEglRmNkeEZjZHgqJkZjZXhGY2R4KUZlZHgiJEklRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI01GY2R4RmNkeComRl9leEZjZHgpRmVkeCIjTkZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiNKRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI0tGY2R4RmNkeComRl9meEZjZHgpRmVkeCIjTEZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRKJEZjZHhGY2R4KiZGZmZ4RmNkeClGZWR4IiREJUZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiRrJEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiRsJEZjZHhGY2R4KiZGX2Z4RmNkeClGZWR4IiRtJEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiNPRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1BGY2R4RmNkeComRltmeEZjZHgpRmVkeCIjUUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRyJUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRzJUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiR0JUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiQ5JUZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiRuJEZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiRvJEZjZHhGY2R4KiZGYmR4RmNkeClGZWR4IiRxJEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiNSRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1NGY2R4RmNkeComRmdbeUZjZHgpRmVkeCIjVEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiR0JEZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiR1JEZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiRyJEZjZHhGY2R4KiZGW2V4RmNkeClGZWR4IiQzJUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQ0JUZjZHhGY2R4KiZGX2V4RmNkeClGZWR4IiQ1JUZjZHhGY2R4KiQpRmVkeCIkdiRGY2R4RmNkeComRltmeEZjZHgpRmVkeCIkdyRGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIkeCRGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjVUZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNWRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiJHUlRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJHYlRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiJHclRmNkeEZjZHgqJkZkaXhGY2R4KUZlZHgiI1dGY2R4RmNkeCokKUZlZHgiI1hGY2R4RmNkeComRmJkeEZjZHgpRmVkeCIjWUZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiQ7JEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNbRmNkeEZjZHgqJClGZWR4IiNcRmNkeEZjZHgqJClGZWR4IiNdRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiI15GY2R4RmNkeComRmdbeUZjZHgpRmVkeCIjX0ZjZHhGY2R4KiZGamd4RmNkeClGZWR4IiNgRmNkeEZjZHgqJkZbZXhGY2R4KUZlZHgiI2FGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjZEZjZHhGY2R4KiZGZGp4RmNkeClGZWR4IiNlRmNkeEZjZHgqJkZiZHhGY2R4KUZlZHgiI2ZGY2R4RmNkeComRmpneEZjZHgpRmVkeCIjYkZjZHhGY2R4KiZGaV15RmNkeClGZWR4IiNjRmNkeEZjZHgqJkZbZnhGY2R4KUZlZHgiJHglRmNkeEZjZHgqJkZfZXhGY2R4KUZlZHgiJHklRmNkeEZjZHgqJkZmZnhGY2R4KUZlZHgiJHolRmNkeEZjZHgqJkZnZXhGY2R4KUZlZHgiI2dGY2R4RmNkeCokKUZlZHgiI2hGY2R4RmNkeComRmZneEZjZHgpRmVkeCIjaUZjZHhGY2R4KiZGY2V4RmNkeClGZWR4IiNqRmNkeEZjZHgqJkZmZ3hGY2R4KUZlZHgiI2tGY2R4RmNkeCokKUZlZHgiI2xGY2R4RmNkeComRmRpeEZjZHgpRmVkeCIjbUZjZHhGY2R4KiZGZ1t5RmNkeClGZWR4IiRKJUZjZHhGY2R4KiZGYWh4RmNkeClGZWR4IiRLJUZjZHhGY2R4KiZGZmd4RmNkeClGZWR4IiRMJUZjZHhGY2R4KiZGW2Z4RmNkeClGZWR4IiQhW0ZjZHhGY2R4KiZGZ2V4RmNkeClGZWR4IiQjW0ZjZHhGY2R4 Timing time(lbCharpoly(p,A,'x')); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI2M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkaiMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjY1N0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkZCchIiQ=
<Text-field style="Heading 3" layout="Heading 3">Linear System Solving</Text-field> restart():with(LinBox):with(LinearAlgebra): n:=500;p:=17;gen:=rand(0..p-1); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQ1MDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrJjcjRmVy NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg== NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRnZW5GKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GJDYoLUZfbzYzUSVwcm9jRigvRmNvUSFGKEZlb0Znby9Gam9RJDBlbUYoL0ZdcEZeckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYlLUZfbzYzUSIoRigvRmNvUSdwcmVmaXhGKC9GZm9GO0Znby9Gam9RLnRoaW5tYXRoc3BhY2VGKC9GXXBGaXIvRl9wRjtGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Iy1GLTY5RlxyRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIpRigvRmNvUShwb3N0Zml4RihGZ3JGZ29GaHIvRl1wUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRltzRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUknbXNwYWNlR0YlNiYvJSdoZWlnaHRHUScwLjB+ZXhGKC8lJndpZHRoR1EnMC4zfmVtRigvJSZkZXB0aEdGXHQvJSpsaW5lYnJlYWtHUTFmaXJzdHByb2NuZXdsaW5lRigtRiQ2JS1GJDYlRmJyLUYkNilGaHFGYHItRmhzNiZGanNGXXRGYHQvRmN0UTZpbmNyZWFzZWluZGVudG5ld2xpbmVGKC1GJDYmLUZfbzYzUSdvcHRpb25GKEZbckZlb0Znby9Gam9RMG1lZGl1bW1hdGhzcGFjZUYoL0ZdcEZldUZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GJDYjLUYtNjlRKGJ1aWx0aW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GX282M1EiO0YoRmJvRmVvL0Zob0Y7Rl1yRlxwRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmdzLUkjbW5HRiU2OVEkMzkxRihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcby1GaHM2JkZqcy9GXnRRJzAuMH5lbUYoRmB0L0ZjdFE2ZGVjcmVhc2VpbmRlbnRuZXdsaW5lRigtRl9vNjNRKWVuZH5wcm9jRihGW3JGZW9GZ29GZHVGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHFGYHMtRl9vNjNRMCZBcHBseUZ1bmN0aW9uO0YoRmJvRmVvRmdvRl1yRl9yRl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiVGYnItRiQ2Jy1GYXY2OVEiNkYoRjBGM0Y2RmR2RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZldkZcby1GX282M1EiLEYoRmJvRmVvRl92Rl1yL0ZdcFEzdmVyeXRoaWNrbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRmF2NjlRIzE3RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmp3LUZhdjY5USI1RihGMEYzRjZGZHZGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmV2RlxvRmBzRmd2Rl13NyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSRnZW5HRihmKkYoRihGKEYoLWYqRihGKDYjSShidWlsdGluR0YoRigiJCJSRihGKEYoSSVGQUlMRyUqcHJvdGVjdGVkRzYlIiInIiM8IiImRihGKEYoNyNGXXk= A:=Matrix(n,gen,datatype=integer[4]);b:=Vector(n,gen,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjUwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5UShpbnRlZ2VyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GIzYjLUkjbW5HRiQ2OVEiNEYnRi9GMkY1L0Y5RjdGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm4vRmluUSdub3JtYWxGJ0Zbb0ZddEZgdC1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Maple linear system solving no native solution available B:=Modular:-Mod(p,A,integer[4]);b1:=Modular:-Mod(p,b,integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH41MDB+eH41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEoQ19vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjYjFGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USt+MX4uLn41MDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USdWZWN0b3JGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtRiw2OVEnY29sdW1uRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby8lL3N1YnNjcmlwdHNoaWZ0R1EiMEYnLyUscGxhY2Vob2xkZXJHRjctRmhyNiMtRltzNiMtRiM2JC1GLDY5USxEYXRhflR5cGU6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmNzNiYtRiw2OVEoaW50ZWdlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjRGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW29GXXRGYHQtRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKENfb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn pv:=Vector(n-1):Modular:-LUDecomposition(p,B,pv,0); Modular:-LUApply(p,B,pv,b1);b1[1..10]; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OVEiMEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxMkYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxNUYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI0RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIzExRidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnJGZ3ItRmluNiMtRlxvNiMtRl9vNjlRIjlGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZcdC1GaW42Iy1GXG82Iy1GX282OVEiN0YnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== LinBox linear system solving x:=lbSolve(p,A,b);x[1..10]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI5M0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkJEghIiQ= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEieEYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjUwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USlhbnl0aGluZ0YnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OVEiMEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxMkYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USMxNUYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI0RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIzExRidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnJGZ3ItRmluNiMtRlxvNiMtRl9vNjlRIjlGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZcdC1GaW42Iy1GXG82Iy1GX282OVEiN0YnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== Timing comparison B:=Modular:-Mod(p,A,integer[4]):b1:=Modular:-Mod(p,b,integer[4]):pv:=Vector(n-1): t1:=time(Modular:-LUDecomposition(p,B,pv,0))+time(Modular:-LUApply(p,B,pv,b1)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC4yNThGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MUdGKCQiJGUjISIkNyNGZXI= t2:=time(lbSolve(p,A,b)); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjI3NEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkdSMhIiQ= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN0MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUkjbW5HRiU2OVEmMC40MzVGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN0MkdGKCQiJE4lISIkNyNGZXI= t1/t2; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5US0wLjU5MzEwMzQ0ODNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyQiKyRbTTUkZiEjNQ== Singular system n:=100; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQxMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIjcjRmVy A:=Matrix(n,n,gen,datatype=integer[4]):c:=Vector(n,gen,datatype=integer[4]):c[n]:=0: A[1..n,n]:=A.c; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUklbXN1YkdGJDYmLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y6LyUqc3Vic2NyaXB0R0Y6LyUsc3VwZXJzY3JpcHRHRjovJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y6LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y9LyUpY29tcG9zZWRHRjovJSpjb252ZXJ0ZWRHRjovJStpbXNlbGVjdGVkR0Y6LyUscGxhY2Vob2xkZXJHRjovJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGRi8lL21hdGhiYWNrZ3JvdW5kR0ZJLyUrZm9udGZhbWlseUdGNC8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNy1GIzYlLUYjNiUtSSNtbkdGJDY5USIxRidGMkY1RjgvRjxGOkY+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluL0Zcb1Enbm9ybWFsRidGXm8tSSNtb0dGJDYzUSMuLkYnLyUlZm9ybUdRKHBvc3RmaXhGJy8lJmZlbmNlR0Y6LyUqc2VwYXJhdG9yR0Y6LyUnbHNwYWNlR1EwbWVkaXVtbWF0aHNwYWNlRicvJSdyc3BhY2VHUSQwZW1GJy8lKXN0cmV0Y2h5R0Y6LyUqc3ltbWV0cmljR0Y6LyUobWF4c2l6ZUdRKWluZmluaXR5RicvJShtaW5zaXplR0Znby8lKGxhcmdlb3BHRjovJS5tb3ZhYmxlbGltaXRzR0Y6LyUnYWNjZW50R0Y6LyUwZm9udF9zdHlsZV9uYW1lR0ZaLyUlc2l6ZUdGNy8lK2ZvcmVncm91bmRHRkYvJStiYWNrZ3JvdW5kR0ZJLUZlbzY5USQxMDBGJ0YyRjVGOEZob0Y+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluRmlvRl5vLUZccDYzUSIsRicvRmBwUSZpbmZpeEYnRmJwL0ZlcEY9L0ZncEZbcS9GanBRM3Zlcnl0aGlja21hdGhzcGFjZUYnRlxxRl5xRmBxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmFyRmNyLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGOi1GXHA2M1EjOj1GJ0ZpckZicEZkcC9GZ3BRL3RoaWNrbWF0aHNwYWNlRicvRmpwRmhzRlxxRl5xRmBxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmFyLUkobWFjdGlvbkdGJDYkLUYjNiUtRlxwNjNRIltGJy9GYHBRJ3ByZWZpeEYnL0ZjcEY9RmRwL0ZncFEudGhpbm1hdGhzcGFjZUYnL0ZqcEZmdC9GXXFGPUZecUZgcUZjcUZlcUZncUZpcUZbckZdckZfckZhci1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYvNjlRK34xfi4ufjEwMH5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiw2Ji1GLzY5USdWZWN0b3JGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiM2Iy1GLzY5USdjb2x1bW5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm9GX3NGYnMtRl11NiMtRmB1NiMtRiM2JC1GLzY5USxEYXRhflR5cGU6fkYnRjJGNUY4RjtGPkZARkJGREZHRkpGTEZORlBGUkZURlZGWEZlbkZnbkZpbkZbb0Zeby1GLDYmLUYvNjlRKGludGVnZXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRiM2Iy1GZW82OVEiNEYnRjJGNUY4RmhvRj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GaW9GXm9GX3NGYnMtRl11NiMtRmB1NiMtRiM2JC1GLzY5USpTdG9yYWdlOn5GJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRi82OVEscmVjdGFuZ3VsYXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRl11NiMtRmB1NiMtRiM2JC1GLzY5UShPcmRlcjp+RidGMkY1RjhGO0Y+RkBGQkZERkdGSkZMRk5GUEZSRlRGVkZYRmVuRmduRmluRltvRl5vLUYvNjlRLkZvcnRyYW5fb3JkZXJGJ0YyRjVGOEY7Rj5GQEZCRkRGR0ZKRkxGTkZQRlJGVEZWRlhGZW5GZ25GaW5GW29GXm8tRlxwNjNRIl1GJ0ZfcEZkdEZkcEZldC9GanBRMnZlcnl0aGlubWF0aHNwYWNlRidGaHRGXnFGYHFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYXIvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= lbRank(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAxMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjNSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USM5OUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiMqKg== pv:=Vector(n-1):Modular:-LUDecomposition(p,A,pv,0); Error, (in LinearAlgebra:-Modular:-LUDecomposition) matrix is singular x:=lbSolve(p,A,c):x[1..10]; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjAxNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjOSEiJA== LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbW9HRiQ2M1EiW0YnLyUlZm9ybUdRJ3ByZWZpeEYnLyUmZmVuY2VHUSV0cnVlRicvJSpzZXBhcmF0b3JHUSZmYWxzZUYnLyUnbHNwYWNlR1EudGhpbm1hdGhzcGFjZUYnLyUncnNwYWNlR0Y6LyUpc3RyZXRjaHlHRjQvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYnLyUlc2l6ZUdRIzEyRicvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLUYjNiMtSSdtdGFibGVHRiQ2LC1JJG10ckdGJDYjLUkkbXRkR0YkNiMtSSNtbkdGJDY5USIzRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHRlIvJSVib2xkR0Y3LyUnaXRhbGljR0Y3LyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR0ZVLyUrYmFja2dyb3VuZEdGWC8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGNC8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZPLyUqbWF0aGNvbG9yR0ZVLyUvbWF0aGJhY2tncm91bmRHRlgvJStmb250ZmFtaWx5R0Zkby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRicvJSltYXRoc2l6ZUdGUi1GaW42Iy1GXG82Iy1GX282OUZGRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yLUZpbjYjLUZcbzYjLUZfbzY5USI3RidGYm9GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXnItRmluNiMtRlxvNiMtRl9vNjlRIjBGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZdcy1GaW42Iy1GXG82Iy1GX282OVEjMTFGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeci1GaW42Iy1GXG82Iy1GX282OVEjMTVGJ0Zib0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZeckZbdC1GaW42Iy1GXG82Iy1GX282OVEiOEYnRmJvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl5yRmJ0LUYsNjNRIl1GJy9GMFEocG9zdGZpeEYnRjJGNUY4L0Y8UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj1GP0ZBRkRGR0ZJRktGTUZQRlNGVg== Norm(map(modp,A.x-c,p)); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYjLUkjbWlHRiQ2OVEhRicvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GJy8lJXNpemVHUSMxMkYnLyUlYm9sZEdRJmZhbHNlRicvJSdpdGFsaWNHUSV0cnVlRicvJSp1bmRlcmxpbmVHRjcvJSpzdWJzY3JpcHRHRjcvJSxzdXBlcnNjcmlwdEdGNy8lK2ZvcmVncm91bmRHUShbMCwwLDBdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGOi8lKXJlYWRvbmx5R0Y3LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSkyRH5JbnB1dEYnLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YxLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGJy8lKW1hdGhzaXplR0Y0
<Text-field style="Heading 2" layout="Heading 2">Benefits in practice</Text-field> Sometime numerical computation is not satisfying and exact computation becomes mandatory with(LinearAlgebra):
<Text-field style="Heading 3" layout="Heading 3">Very bad conditionned matrix</Text-field> Moler:=proc(n) local i,j,Moler; Moler:=Matrix(n); for i from 1 to n do for j from 1 to (i-1) do Moler[i,j]:=j-2; end do; Moler[i,i]:=i; for j from (i+1) to n do Moler[i,j]:=i-2; end do; end do; return Moler; end proc: Redheffer:=proc(n) local i,j,Redheffer; Redheffer:=Matrix(n); for i from 1 to n do Redheffer[i,1]:=1; for j from 2 to n do if (j mod i = 0) then Redheffer[i,j]:=1; else Redheffer[i,j]:=0; end if; end do; end do: return Redheffer; end proc: Moler(10),Redheffer(10); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUYjNiUtSSNtb0dGJDYzUSJbRicvJSVmb3JtR1EncHJlZml4RicvJSZmZW5jZUdRJXRydWVGJy8lKnNlcGFyYXRvckdRJmZhbHNlRicvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRicvJSdyc3BhY2VHRjwvJSlzdHJldGNoeUdGNi8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSVzaXplR1EjMTJGJy8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GJy8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRictRiM2Iy1JJ210YWJsZUdGJDYsLUkkbXRyR0YkNiwtSSRtdGRHRiQ2Iy1JI21uR0YkNjlGSC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdGVC8lJWJvbGRHRjkvJSdpdGFsaWNHRjkvJSp1bmRlcmxpbmVHRjkvJSpzdWJzY3JpcHRHRjkvJSxzdXBlcnNjcmlwdEdGOS8lK2ZvcmVncm91bmRHRlcvJStiYWNrZ3JvdW5kR0ZaLyUnb3BhcXVlR0Y5LyUrZXhlY3V0YWJsZUdGOS8lKXJlYWRvbmx5R0Y2LyUpY29tcG9zZWRHRjkvJSpjb252ZXJ0ZWRHRjkvJStpbXNlbGVjdGVkR0Y5LyUscGxhY2Vob2xkZXJHRjkvJTBmb250X3N0eWxlX25hbWVHRlEvJSptYXRoY29sb3JHRlcvJS9tYXRoYmFja2dyb3VuZEdGWi8lK2ZvbnRmYW1pbHlHRmVvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGJy8lKW1hdGhzaXplR0ZULUZebzYjLUZhbzY5USkmbWludXM7MUYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRmFyRmFyRmFyRmFyRmFyRmFyRmFyRmFyLUZbbzYsRmFyLUZebzYjLUZhbzY5USIyRidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3ItRl5vNiMtRmFvNjlRIjBGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZdc0Zdc0Zdc0Zdc0Zdc0Zdc0Zdcy1GW282LEZhckZdcy1GXm82Iy1GYW82OVEiM0YnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRl1vRl1vRl1vRl1vRl1vRl1vRl1vLUZbbzYsRmFyRl1zRl1vLUZebzYjLUZhbzY5USI0RidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3JGaHJGaHJGaHJGaHJGaHJGaHItRltvNixGYXJGXXNGXW9GaHItRl5vNiMtRmFvNjlRIjVGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZkc0Zkc0Zkc0Zkc0Zkcy1GW282LEZhckZdc0Zdb0ZockZkcy1GXm82Iy1GYW82OVEiNkYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRlt0Rlt0Rlt0Rlt0LUZbbzYsRmFyRl1zRl1vRmhyRmRzRlt0LUZebzYjLUZhbzY5USI3RidGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3JGYnRGYnRGYnQtRltvNixGYXJGXXNGXW9GaHJGZHNGW3RGYnQtRl5vNiMtRmFvNjlRIjhGJ0Zjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZpdEZpdC1GW282LEZhckZdc0Zdb0ZockZkc0ZbdEZidEZpdC1GXm82Iy1GYW82OVEiOUYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yRmB1LUZbbzYsRmFyRl1zRl1vRmhyRmRzRlt0RmJ0Rml0RmB1LUZebzYjLUZhbzY5USMxMEYnRmNvRmZvRmhvRmpvRlxwRl5wRmBwRmJwRmRwRmZwRmhwRmpwRlxxRl5xRmBxRmJxRmRxRmZxRmhxRmpxRlxyRl9yLUYuNjNRIl1GJy9GMlEocG9zdGZpeEYnRjRGN0Y6L0Y+UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRj9GQUZDRkZGSUZLRk1GT0ZSRlVGWC1GLjYzUSIsRicvRjJRJmluZml4RicvRjVGOS9GOEY2L0Y7USQwZW1GJy9GPlEzdmVyeXRoaWNrbWF0aHNwYWNlRicvRkBGOUZBRkNGRkZJRktGTUZPRlJGVUZYLUYjNiVGLS1GIzYjLUZobjYsLUZbbzYsRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vRl1vLUZbbzYsRl1vRl1vRl1zRl1vRl1zRl1vRl1zRl1vRl1zRl1vLUZbbzYsRl1vRl1zRl1vRl1zRl1zRl1vRl1zRl1zRl1vRl1zLUZbbzYsRl1vRl1zRl1zRl1vRl1zRl1zRl1zRl1vRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1vRl1zRl1zRl1zRl1zRl1vLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1vRl1zRl1zRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1vRl1zRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1vRl1zRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1vRl1zLUZbbzYsRl1vRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1zRl1vRmp2 n:=200; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJuRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USQyMDBGKEYwRjNGNi9GOkY4RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbi9Gam5RJ25vcm1hbEYoRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJuR0YoIiQrIzcjRmVy M:=1.*Moler(n):R:=1.*Redheffer(n):MR:=M.R; LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEjTVJGJy8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYnLyUlc2l6ZUdRIzEyRicvJSVib2xkR1EmZmFsc2VGJy8lJ2l0YWxpY0dRJXRydWVGJy8lKnVuZGVybGluZUdGNy8lKnN1YnNjcmlwdEdGNy8lLHN1cGVyc2NyaXB0R0Y3LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYnLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GJy8lJ29wYXF1ZUdGNy8lK2V4ZWN1dGFibGVHRjcvJSlyZWFkb25seUdGOi8lKWNvbXBvc2VkR0Y3LyUqY29udmVydGVkR0Y3LyUraW1zZWxlY3RlZEdGNy8lLHBsYWNlaG9sZGVyR0Y3LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RicvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjEvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YnLyUpbWF0aHNpemVHRjQtSSNtb0dGJDYzUSM6PUYnLyUlZm9ybUdRJmluZml4RicvJSZmZW5jZUdGNy8lKnNlcGFyYXRvckdGNy8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRicvJSdyc3BhY2VHRmpvLyUpc3RyZXRjaHlHRjcvJSpzeW1tZXRyaWNHRjcvJShtYXhzaXplR1EpaW5maW5pdHlGJy8lKG1pbnNpemVHUSIxRicvJShsYXJnZW9wR0Y3LyUubW92YWJsZWxpbWl0c0dGNy8lJ2FjY2VudEdGNy8lMGZvbnRfc3R5bGVfbmFtZUdGVy8lJXNpemVHRjQvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JKG1hY3Rpb25HRiQ2JC1GIzYlLUZebzYzUSJbRicvRmJvUSdwcmVmaXhGJy9GZW9GOkZmby9GaW9RLnRoaW5tYXRoc3BhY2VGJy9GXHBGYXIvRl5wRjpGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EtSSdtdGFibGVHRiQ2Ji1JJG10ckdGJDYjLUkkbXRkR0YkNiMtRiM2JC1GLDY5USx+MjAwfnh+MjAwfkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnTWF0cml4RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1JJW1zdWJHRiQ2Ji1GLDY5USZmbG9hdEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjhGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW28vJS9zdWJzY3JpcHRzaGlmdEdRIjBGJy8lLHBsYWNlaG9sZGVyR0Y3LUZocjYjLUZbczYjLUYjNiQtRiw2OVEqU3RvcmFnZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USxyZWN0YW5ndWxhckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRmhyNiMtRltzNiMtRiM2JC1GLDY5UShPcmRlcjp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5US5Gb3J0cmFuX29yZGVyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GXm82M1EiXUYnL0Zib1EocG9zdGZpeEYnRl9yRmZvRmByL0ZccFEydmVyeXRoaW5tYXRoc3BhY2VGJ0ZjckZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS8lK2FjdGlvbnR5cGVHUS1icm93c2VydGFibGVGJw== ConditionNumber(M); ConditionNumber(R); ConditionNumber(MR); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5USw4LjQ4MDEwODYwMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUklbXN1cEdGJTYlLUYtNjlRIzEwRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRi02OVEkMTIzRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8vJTFzdXBlcnNjcmlwdHNoaWZ0R1EiMEYoNyMkIissJzMsWykiJDki NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USwxMTI1MC4wMDAwMEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIrKysrRDYhIiY= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5USwyLjUyNzg2NTk5MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRMSZJbnZpc2libGVUaW1lcztGKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUSQwZW1GKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUklbXN1cEdGJTYlLUYtNjlRIzEwRihGMEYzRjZGOUY7Rj1GP0ZBRkRGR0ZJRktGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRi02OVEjMjBGKEYwRjNGNkY5RjtGPUY/RkFGREZHRklGS0ZORlBGUkZURlZGWUZlbkZnbkZpbkZcby8lMXN1cGVyc2NyaXB0c2hpZnRHUSIwRig3IyQiKyMqZid5XyMiIzY= Solving a linear system b:=1.*Vector(n,rand(-1..1)); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5USZmbG9hdEYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1JI21uR0YkNjlRIjhGJ0YvRjJGNS9GOUY3RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuL0ZpblEnbm9ybWFsRidGW29GXXRGYHQtRmhyNiMtRltzNiMtRiM2JC1GLDY5USpTdG9yYWdlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLHJlY3Rhbmd1bGFyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= t:=time():x:=LinearSolve(MR,b,method=hybrid):time()-t; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjAwOUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiKiEiJA== Norm(MR.x-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UTQyMzcuMTE3MTg3NTAwMDAwMDAwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMkIjMrKysrdj08ckIhIzo= A:=Matrix(MR,datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiQUYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRKGludGVnZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYjNiMtSSNtbkdGJDY5USI0RidGL0YyRjUvRjlGN0Y7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbi9GaW5RJ25vcm1hbEYnRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= t:=time():y:=lbSolve(A,b):time()-t; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjA2MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIjaSEiJA== NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjMwN0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkMiQhIiQ= Norm(A.y-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMwLkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIiIUZdbw==
<Text-field style="Heading 3" layout="Heading 3">High precision results</Text-field> Tref:=ImportMatrix("tref200.dat",format=entries); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVElVHJlZkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRLH4yMDB+eH4yMDB+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GLDY5USdNYXRyaXhGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEsRGF0YX5UeXBlOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRKWFueXRoaW5nRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEnc3BhcnNlRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKE9yZGVyOn5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUYsNjlRLkZvcnRyYW5fb3JkZXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZebzYzUSJdRicvRmJvUShwb3N0Zml4RidGX3JGZm9GYHIvRlxwUTJ2ZXJ5dGhpbm1hdGhzcGFjZUYnRmNyRl9wRmFwRmRwRmdwRmlwRltxRl1xRl9xRmFxRmNxLyUrYWN0aW9udHlwZUdRLWJyb3dzZXJ0YWJsZUYn b:=Vector(200,rand(-1..1),datatype=integer[4]); LUklbXJvd0c2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGJzYlLUkjbWlHRiQ2OVEiYkYnLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRicvJSVzaXplR1EjMTJGJy8lJWJvbGRHUSZmYWxzZUYnLyUnaXRhbGljR1EldHJ1ZUYnLyUqdW5kZXJsaW5lR0Y3LyUqc3Vic2NyaXB0R0Y3LyUsc3VwZXJzY3JpcHRHRjcvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRicvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYnLyUnb3BhcXVlR0Y3LyUrZXhlY3V0YWJsZUdGNy8lKXJlYWRvbmx5R0Y6LyUpY29tcG9zZWRHRjcvJSpjb252ZXJ0ZWRHRjcvJStpbXNlbGVjdGVkR0Y3LyUscGxhY2Vob2xkZXJHRjcvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGJy8lKm1hdGhjb2xvckdGQy8lL21hdGhiYWNrZ3JvdW5kR0ZGLyUrZm9udGZhbWlseUdGMS8lLG1hdGh2YXJpYW50R1EnaXRhbGljRicvJSltYXRoc2l6ZUdGNC1JI21vR0YkNjNRIzo9RicvJSVmb3JtR1EmaW5maXhGJy8lJmZlbmNlR0Y3LyUqc2VwYXJhdG9yR0Y3LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGJy8lJ3JzcGFjZUdGam8vJSlzdHJldGNoeUdGNy8lKnN5bW1ldHJpY0dGNy8lKG1heHNpemVHUSlpbmZpbml0eUYnLyUobWluc2l6ZUdRIjFGJy8lKGxhcmdlb3BHRjcvJS5tb3ZhYmxlbGltaXRzR0Y3LyUnYWNjZW50R0Y3LyUwZm9udF9zdHlsZV9uYW1lR0ZXLyUlc2l6ZUdGNC8lK2ZvcmVncm91bmRHRkMvJStiYWNrZ3JvdW5kR0ZGLUkobWFjdGlvbkdGJDYkLUYjNiUtRl5vNjNRIltGJy9GYm9RJ3ByZWZpeEYnL0Zlb0Y6RmZvL0Zpb1EudGhpbm1hdGhzcGFjZUYnL0ZccEZhci9GXnBGOkZfcEZhcEZkcEZncEZpcEZbcUZdcUZfcUZhcUZjcS1JJ210YWJsZUdGJDYmLUkkbXRyR0YkNiMtSSRtdGRHRiQ2Iy1GIzYkLUYsNjlRK34xfi4ufjIwMH5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUklbXN1YkdGJDYmLUYsNjlRJ1ZlY3RvckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiM2Iy1GLDY5USdjb2x1bW5GJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLyUvc3Vic2NyaXB0c2hpZnRHUSIwRicvJSxwbGFjZWhvbGRlckdGNy1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRLERhdGF+VHlwZTp+RidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GY3M2Ji1GLDY5UShpbnRlZ2VyRidGL0YyRjVGOEY7Rj1GP0ZBRkRGR0ZJRktGTUZPRlFGU0ZVRlhGWkZmbkZobkZbby1GIzYjLUkjbW5HRiQ2OVEiNEYnRi9GMkY1L0Y5RjdGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm4vRmluUSdub3JtYWxGJ0Zbb0ZddEZgdC1GaHI2Iy1GW3M2Iy1GIzYkLUYsNjlRKlN0b3JhZ2U6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEscmVjdGFuZ3VsYXJGJ0YvRjJGNUY4RjtGPUY/RkFGREZHRklGS0ZNRk9GUUZTRlVGWEZaRmZuRmhuRltvLUZocjYjLUZbczYjLUYjNiQtRiw2OVEoT3JkZXI6fkYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRiw2OVEuRm9ydHJhbl9vcmRlckYnRi9GMkY1RjhGO0Y9Rj9GQUZERkdGSUZLRk1GT0ZRRlNGVUZYRlpGZm5GaG5GW28tRl5vNjNRIl1GJy9GYm9RKHBvc3RmaXhGJ0ZfckZmb0Zgci9GXHBRMnZlcnl0aGlubWF0aHNwYWNlRidGY3JGX3BGYXBGZHBGZ3BGaXBGW3FGXXFGX3FGYXFGY3EvJSthY3Rpb250eXBlR1EtYnJvd3NlcnRhYmxlRic= Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= t:=time():x:=LinearSolve(1.*Tref,1.*b):time()-t; NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjA2NUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIjbCEiJA== Norm(Tref.x-b); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5UTQyLjMxNzMxMzQzNjQ2MDc1NzgyRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjgvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZDLyUvbWF0aGJhY2tncm91bmRHRkYvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1ExJkludmlzaWJsZVRpbWVzO0YoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGQy8lK2JhY2tncm91bmRHRkYtSSVtc3VwR0YlNiUtRi02OVEjMTBGKEYwRjNGNkY5RjtGPUY/RkFGREZHRklGS0ZORlBGUkZURlZGWUZlbkZnbkZpbkZcby1GLTY5USMtN0YoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGKDcjJCIzI3l2Z2tWOHRKIyEjQw== t:=time():y:=lbSolve(Tref,b):time()-t; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjEyNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkRCIhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USYwLjM3MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjJCIkcyQhIiQ= Norm(Tref.y-b); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= Bug in Maple Determinant(Tref);Rank(Tref); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USIwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiIiE= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQxOTlGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKj4= Digits:=14; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USdEaWdpdHNGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1JI21uR0YlNjlRIzE0RihGMEYzRjYvRjpGOEY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ24vRmpuUSdub3JtYWxGKEZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkknRGlnaXRzR0YoIiM5NyNGZXI= Determinant(1.*Tref);Rank(1.*Tref); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtbkdGJTY5UTAyLjQwODQ1MTkyNTQ4MDVGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGOC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkMvJS9tYXRoYmFja2dyb3VuZEdGRi8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUTEmSW52aXNpYmxlVGltZXM7RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EkMGVtRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZDLyUrYmFja2dyb3VuZEdGRi1JJW1zdXBHRiU2JS1GLTY5USMxMEYoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUYtNjlRJDUxMkYoRjBGM0Y2RjlGO0Y9Rj9GQUZERkdGSUZLRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLyUxc3VwZXJzY3JpcHRzaGlmdEdRIjBGKDcjJCIvMFtEPlgzQyIkKlw= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQyMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyM= lbDeterminant(Tref);lbRank(Tref); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjEzNUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkTiIhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtc0dGJTYjUTFjb252ZXJzaW9ufnRpbWU6RigtSSNtb0dGJTYzUSIsRigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR1EmZmFsc2VGKC8lKnNlcGFyYXRvckdRJXRydWVGKC8lJ2xzcGFjZUdRJDBlbUYoLyUncnNwYWNlR1EzdmVyeXRoaWNrbWF0aHNwYWNlRigvJSlzdHJldGNoeUdGOS8lKnN5bW1ldHJpY0dGOS8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjkvJS5tb3ZhYmxlbGltaXRzR0Y5LyUnYWNjZW50R0Y5LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtSSNtbkdGJTY5USYwLjIzNEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR0ZYLyUlYm9sZEdGOS8lJ2l0YWxpY0dGOS8lKnVuZGVybGluZUdGOS8lKnN1YnNjcmlwdEdGOS8lLHN1cGVyc2NyaXB0R0Y5LyUrZm9yZWdyb3VuZEdGZW4vJStiYWNrZ3JvdW5kR0Zobi8lJ29wYXF1ZUdGOS8lK2V4ZWN1dGFibGVHRjkvJSlyZWFkb25seUdGPC8lKWNvbXBvc2VkR0Y5LyUqY29udmVydGVkR0Y5LyUraW1zZWxlY3RlZEdGOS8lLHBsYWNlaG9sZGVyR0Y5LyUwZm9udF9zdHlsZV9uYW1lR0ZVLyUqbWF0aGNvbG9yR0Zlbi8lL21hdGhiYWNrZ3JvdW5kR0Zobi8lK2ZvbnRmYW1pbHlHRl9vLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZYNyM2JEYvJCIkTSMhIiQ= NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQyMDBGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkKyM= Determinant(Matrix(Tref,storage=rectangular)); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M=
<Text-field style="Heading 1" layout="Heading 1">Low level of the interface</Text-field> restart; p:=17; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJwRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctSSNtbkdGJTY5USMxN0YoRjBGM0Y2L0Y6RjhGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduL0ZqblEnbm9ybWFsRihGXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JInBHRigiIzw3I0Zlcg==
<Text-field style="Heading 2" layout="Heading 2">Submodule of module LinBox</Text-field> with(LinBox:-Dev); LinBox/Maple Interface Package beta version 0.1 by Pascal Giorgi (pgiorgi@uwaterloo.ca) NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2ZW8tSSNtaUdGJTY5UStsYkJsYWNrYm94RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHRlMvJSVib2xkR0Y4LyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR0ZWLyUrYmFja2dyb3VuZEdGWS8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGNS8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZQLyUqbWF0aGNvbG9yR0ZWLyUvbWF0aGJhY2tncm91bmRHRlkvJStmb250ZmFtaWx5R0Zcby8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGUy1GLTYzUSIsRigvRjFRJmluZml4RigvRjRGOC9GN0Y1L0Y6USQwZW1GKC9GPVEzdmVyeXRoaWNrbWF0aHNwYWNlRigvRj9GOEZARkJGRUZIRkpGTEZORlFGVEZXLUZnbjY5UTRsYkJsYWNrYm94RGltZW5zaW9uRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK2xiQ2hhcnBvbHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJDb252ZXJ0QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVExbGJDb252ZXJ0RWxlbWVudEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTRsYkNvbnZlcnRQb2x5bm9taWFsRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMGxiQ29udmVydFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYkNvcHlGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEvbGJDb3B5QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEtbGJDb3B5VmVjdG9yRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRK2xiRGF0YUluZm9GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEubGJEZXRlcm1pbmFudEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxsYkRpbWVuc2lvbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USlsYkRvbWFpbkYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USpsYkVsZW1lbnRGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEqbGJNaW5wb2x5RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKWxiUmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRJ2xiUmFua0YoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USlsYlJlYmluZEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTFsYlJlYmluZEJsYWNrYm94RihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRL2xiUmViaW5kVmVjdG9yRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRLmxiU2V0QmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVE2bGJTZXRCbGFja2JveEF0UmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRMWxiU2V0SW50ZWdlclJpbmdGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEwbGJTZXRQcmltZUZpZWxkRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRM2xiU2V0UmF0aW9uYWxGaWVsZEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USxsYlNldFZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTRsYlNldFZlY3RvckF0UmFuZG9tRihGam5GXW9GX29GYW9GY29GZW9GZ29GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZnFGaHEtRmduNjlRKGxiU29sdmVGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJTdGFydEYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5USdsYlN0b3BGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEpbGJWZWN0b3JGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJWZWN0b3JEaW1lbnNpb25GKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEobGJXcml0ZUYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxRmhxLUZnbjY5UTBsYldyaXRlQmxhY2tib3hGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEybGJXcml0ZVBvbHlub21pYWxGKEZqbkZdb0Zfb0Zhb0Zjb0Zlb0Znb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZmcUZocS1GZ242OVEubGJXcml0ZVZlY3RvckYoRmpuRl1vRl9vRmFvRmNvRmVvRmdvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmZxLUYtNjNRIl1GKC9GMVEocG9zdGZpeEYoRjNGNkY5L0Y9UTJ2ZXJ5dGhpbm1hdGhzcGFjZUYoRj5GQEZCRkVGSEZKRkxGTkZRRlRGVzcjN0dJK2xiQmxhY2tib3hHRihJNGxiQmxhY2tib3hEaW1lbnNpb25HRihJK2xiQ2hhcnBvbHlHRihJMmxiQ29udmVydEJsYWNrYm94R0YoSTFsYkNvbnZlcnRFbGVtZW50R0YoSTRsYkNvbnZlcnRQb2x5bm9taWFsR0YoSTBsYkNvbnZlcnRWZWN0b3JHRihJJ2xiQ29weUdGKEkvbGJDb3B5QmxhY2tib3hHRihJLWxiQ29weVZlY3RvckdGKEkrbGJEYXRhSW5mb0dGKEkubGJEZXRlcm1pbmFudEdGKEksbGJEaW1lbnNpb25HRihJKWxiRG9tYWluR0YoSSpsYkVsZW1lbnRHRihJKmxiTWlucG9seUdGKEkpbGJSYW5kb21HRihJJ2xiUmFua0dGKEkpbGJSZWJpbmRHRihJMWxiUmViaW5kQmxhY2tib3hHRihJL2xiUmViaW5kVmVjdG9yR0YoSS5sYlNldEJsYWNrYm94R0YoSTZsYlNldEJsYWNrYm94QXRSYW5kb21HRihJMWxiU2V0SW50ZWdlclJpbmdHRihJMGxiU2V0UHJpbWVGaWVsZEdGKEkzbGJTZXRSYXRpb25hbEZpZWxkR0YoSSxsYlNldFZlY3RvckdGKEk0bGJTZXRWZWN0b3JBdFJhbmRvbUdGKEkobGJTb2x2ZUdGKEkobGJTdGFydEdGKEknbGJTdG9wR0YoSSlsYlZlY3RvckdGKEkybGJWZWN0b3JEaW1lbnNpb25HRihJKGxiV3JpdGVHRihJMGxiV3JpdGVCbGFja2JveEdGKEkybGJXcml0ZVBvbHlub21pYWxHRihJLmxiV3JpdGVWZWN0b3JHRig=
<Text-field style="Heading 2" layout="Heading 2">Creation of Domain</Text-field> Integers Domain Z:=lbDomain(0,"linbox_ring_integer"); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJaRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFlbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIlpHRihJZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0dGKDcjRmFy Z:=lbDomain(); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJaRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFlbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JIlpHRihJZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0dGKDcjRmFy Finite fields domain Zp:=lbDomain(p,"linbox_field_dbl"); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNacEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRWVtMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNacEdGKElZW0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXXwrR0YoNyNGYXI= Zp:=lbDomain(p); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNacEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRWVtMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNacEdGKElZW0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXXwrR0YoNyNGYXI= Use of global default type lbSetIntegerRing("linbox_ring_integer"); lbSetPrimeField("linbox_field_dbl"); Z1:=lbDomain(); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNaMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRZW5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNaMUdGKEllbltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXXwrR0YoNyNGYXI= Zp2:=lbDomain(p); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USRacDJGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGOC8lKnN1YnNjcmlwdEdGOC8lLHN1cGVyc2NyaXB0R0Y4LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGOy8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkQvJS9tYXRoYmFja2dyb3VuZEdGRy8lK2ZvbnRmYW1pbHlHRjIvJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjUtSSNtb0dGJTYzUSM6PUYoLyUlZm9ybUdRJmluZml4RigvJSZmZW5jZUdGOC8lKnNlcGFyYXRvckdGOC8lJ2xzcGFjZUdRL3RoaWNrbWF0aHNwYWNlRigvJSdyc3BhY2VHRltwLyUpc3RyZXRjaHlHRjgvJSpzeW1tZXRyaWNHRjgvJShtYXhzaXplR1EpaW5maW5pdHlGKC8lKG1pbnNpemVHUSIxRigvJShsYXJnZW9wR0Y4LyUubW92YWJsZWxpbWl0c0dGOC8lJ2FjY2VudEdGOC8lMGZvbnRfc3R5bGVfbmFtZUdGWC8lJXNpemVHRjUvJStmb3JlZ3JvdW5kR0ZELyUrYmFja2dyb3VuZEdGRy1GLTY5UVlbTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkkWnAyR0YoSVlbTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfCtHRig3I0Zhcg==
<Text-field style="Heading 2" layout="Heading 2">Using Blackbox (Matrix)</Text-field> A:=lbBlackbox(Z,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJBRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFcclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSJBR0YoSVxyW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X3JpbmdfaW50ZWdlcix+Y2hhcmFjdH49fjApXX4pXXwrR0YoNyNGYXI= Ap:=lbBlackbox(Zp,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNBcEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRanFbfkxpbkJveH5CbGFja2JveH4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG83Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iz5JI0FwR0YoSWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0dGKDcjRmFy Use of global default type lbSetBlackbox("linbox_sparse"); A:=lbBlackbox(Z,10,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJBRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFdclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X3NwYXJzZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkiQUdGKEldclt+TGluQm94fkJsYWNrYm94fihzdG9yYWdlfj1+bGluYm94X3NwYXJzZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== Set entries at random over the domain lbRandom(A); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UV1yW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfc3BhcnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSV1yW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfc3BhcnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0dGKA== lbRandom(Ap); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSWpxW35MaW5Cb3h+QmxhY2tib3h+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0dGKA== Computation without specifying the domain Over the integers d1:=lbDeterminant(A); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNkMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaXAzMTE2Mjc5NjIyMjgzNDUzMDgyMjk4NjI2NDEyNzc2NjE2NzM5NDcwODUwOTA5NDU4ODgyODI3NjcxNDMyNjI5MDAwOTI1MTE3MjU0MjAwNzQ4MTM1MjMyNjU0OTZ8K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNkMUdGKElpcDMxMTYyNzk2MjIyODM0NTMwODIyOTg2MjY0MTI3NzY2MTY3Mzk0NzA4NTA5MDk0NTg4ODI4Mjc2NzE0MzI2MjkwMDA5MjUxMTcyNTQyMDA3NDgxMzUyMzI2NTQ5NnwrR0YoNyNGYXI= Over a finite field d2:=lbDeterminant(Ap); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNkMkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRJDExfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjZDJHRihJJDExfCtHRig3I0Zhcg== Converting data lbConvertElement(d1); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWhwMzExNjI3OTYyMjI4MzQ1MzA4MjI5ODYyNjQxMjc3NjYxNjczOTQ3MDg1MDkwOTQ1ODg4MjgyNzY3MTQzMjYyOTAwMDkyNTExNzI1NDIwMDc0ODEzNTIzMjY1NDk2RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHRjUvJSp1bmRlcmxpbmVHRjUvJSpzdWJzY3JpcHRHRjUvJSxzdXBlcnNjcmlwdEdGNS8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjUvJStleGVjdXRhYmxlR0Y1LyUpcmVhZG9ubHlHUSV0cnVlRigvJSljb21wb3NlZEdGNS8lKmNvbnZlcnRlZEdGNS8lK2ltc2VsZWN0ZWRHRjUvJSxwbGFjZWhvbGRlckdGNS8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZALyUvbWF0aGJhY2tncm91bmRHRkMvJStmb250ZmFtaWx5R0YvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0YyNyMiaHAnXGxLXzhbMj9hczZENCtIRVZydyNHKSllJTQ0JjNaUm5od0ZURScpSCMzYE1HQSd6aTYk lbConvertElement(d2); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USMxMUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIiM2
<Text-field style="Heading 2" layout="Heading 2">using Vector</Text-field> construction over the integers V:=lbVector(Z,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USJWRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRi02OVFqcVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkiVkdGKElqcVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfcmluZ19pbnRlZ2VyLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== construction over finite field Vp:=lbVector(Zp,10); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USNWcEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaHFbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSNWcEdGKElocVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0YoNyNGYXI= Use of global default type lbSetVector("linbox_dense"); Set entries at random over the domain lbRandom(V); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWpxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0YoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R0Y4LyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQS8lL21hdGhiYWNrZ3JvdW5kR0ZELyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGMjcjSWpxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9yaW5nX2ludGVnZXIsfmNoYXJhY3R+PX4wKV1+KV18K0dGKA== lbRandom(Vp); NiQtSSNtaUc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UWhxW35MaW5Cb3h+VmVjdG9yfihzdG9yYWdlfj1+bGluYm94X2RlbnNlLH5kb21haW5+PX5bTGluQm94fkRvbWFpbn4odHlwZX49fmxpbmJveF9maWVsZF9kYmwsfmNoYXJhY3R+PX4xNyldfildfCtGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dRJXRydWVGKC8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdGOC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkEvJS9tYXRoYmFja2dyb3VuZEdGRC8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ2l0YWxpY0YoLyUpbWF0aHNpemVHRjI3I0locVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0Yo Computation without specifying the domain Over the integers x1:=lbSolve(A,V); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN4MUYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRXHJbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX3JhdGlvbmFsLH5jaGFyYWN0fj1+MCldfildfCtGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcbzcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkjeDFHRihJXHJbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX3JhdGlvbmFsLH5jaGFyYWN0fj1+MCldfildfCtHRig3I0Zhcg== x2:=lbSolve(Ap,Vp); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5USN4MkYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR1EldHJ1ZUYoLyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y7LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGRC8lL21hdGhiYWNrZ3JvdW5kR0ZHLyUrZm9udGZhbWlseUdGMi8lLG1hdGh2YXJpYW50R1EnaXRhbGljRigvJSltYXRoc2l6ZUdGNS1JI21vR0YlNjNRIzo9RigvJSVmb3JtR1EmaW5maXhGKC8lJmZlbmNlR0Y4LyUqc2VwYXJhdG9yR0Y4LyUnbHNwYWNlR1EvdGhpY2ttYXRoc3BhY2VGKC8lJ3JzcGFjZUdGW3AvJSlzdHJldGNoeUdGOC8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZYLyUlc2l6ZUdGNS8lK2ZvcmVncm91bmRHRkQvJStiYWNrZ3JvdW5kR0ZHLUYtNjlRaHFbfkxpbkJveH5WZWN0b3J+KHN0b3JhZ2V+PX5saW5ib3hfZGVuc2UsfmRvbWFpbn49fltMaW5Cb3h+RG9tYWlufih0eXBlfj1+bGluYm94X2ZpZWxkX2RibCx+Y2hhcmFjdH49fjE3KV1+KV18K0YoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvNyMtX0YpSSxtcHJpbnRzbGFzaEdGKDYkNyM+SSN4MkdGKElocVt+TGluQm94flZlY3Rvcn4oc3RvcmFnZX49fmxpbmJveF9kZW5zZSx+ZG9tYWlufj1+W0xpbkJveH5Eb21haW5+KHR5cGV+PX5saW5ib3hfZmllbGRfZGJsLH5jaGFyYWN0fj1+MTcpXX4pXXwrR0YoNyNGYXI= Converting data lbConvertVector(x1);lbConvertVector(x2); NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Iy1JJ210YWJsZUdGJTYsLUkkbXRyR0YlNiMtSSRtdGRHRiU2Iy1JJm1mcmFjR0YlNiotSSNtbkdGJTY5UV5xJm1pbnVzOzg3NzQxNTkzMDY1NTUyMTYyMDA1MjQzNDAwNDI3Nzg2ODc3NDE4NDk0MDU0ODI1MzUwNTA0OTc5NjA1OTg3MjYxMzA3Mzg3Mjk0NDM0MzYwNTY3NzA3OTU5NDIzRigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHRlMvJSVib2xkR0Y4LyUnaXRhbGljR0Y4LyUqdW5kZXJsaW5lR0Y4LyUqc3Vic2NyaXB0R0Y4LyUsc3VwZXJzY3JpcHRHRjgvJStmb3JlZ3JvdW5kR0ZWLyUrYmFja2dyb3VuZEdGWS8lJ29wYXF1ZUdGOC8lK2V4ZWN1dGFibGVHRjgvJSlyZWFkb25seUdGNS8lKWNvbXBvc2VkR0Y4LyUqY29udmVydGVkR0Y4LyUraW1zZWxlY3RlZEdGOC8lLHBsYWNlaG9sZGVyR0Y4LyUwZm9udF9zdHlsZV9uYW1lR0ZQLyUqbWF0aGNvbG9yR0ZWLyUvbWF0aGJhY2tncm91bmRHRlkvJStmb250ZmFtaWx5R0Zoby8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGUy1GY282OVFocDE1NTgxMzk4MTExNDE3MjY1NDExNDkzMTMyMDYzODgzMDgzNjk3MzU0MjU0NTQ3Mjk0NDE0MTM4MzU3MTYzMTQ1MDA0NjI1NTg2MjcxMDAzNzQwNjc2MTYzMjc0OEYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyLyUubGluZXRoaWNrbmVzc0dRIjFGKC8lK2Rlbm9tYWxpZ25HUSdjZW50ZXJGKC8lKW51bWFsaWduR0Zccy8lKWJldmVsbGVkR0Y4RlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFfcSZtaW51czsxMDUwMTA3NDMwMjE2NTM2Mjc0NTA4NzE0MzkwODg5NzczMzY0NzE4NDc0MzQzNDM1ODc2MTc0NjkwMjUyNzU4MzA5MjU1OTU0Njg1NTQ5MDE3NjM2NzE2NTE4OTVGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRXXEmbWludXM7NDM2MTM1MjEzNTA1NTczMTI3MjA4ODY5MTE4MDYyOTg5ODAxNzkxMjUxODEzNzU2OTE5OTI3NDMzMTgyODU3NzQzMzczNzE0MTMzNDU2MTg0MDUzMzE5NjYyOUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyLUZjbzY5UWdwNzc5MDY5OTA1NTcwODYzMjcwNTc0NjU2NjAzMTk0MTU0MTg0ODY3NzEyNzI3MzY0NzIwNzA2OTE3ODU4MTU3MjUwMjMxMjc5MzEzNTUwMTg3MDMzODA4MTYzNzRGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRXnEmbWludXM7NDAwNTI3NzA3NDI1NTU0MDg5OTM0NDU1MDczNDc1MTUyMzAxNzMxODU4MjA4MzU3NTM1NzI5Mzg2MjgyMTQ4MjQyODM1NzI5MDcwODg2MTE0MjY3ODE1NjQ0MTlGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRaHAxNDc0NDk4NDgwODIwOTczNzU3MTA5NTI5NTg3Nzc2MTkxMzg2NDQ0NjY4NTE4NTE2MTQxNTM5OTQ2MTU0MDI1NTgyMzc1MjkzMjc2OTQ0MDQ1ODQ0MTk2MzU4MzFGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZkckZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRZ3AxMzkxMzY5MjQ0MTgwMzMzNDIwMzE1Nzc4NzY0MDM3OTk5NTY3MjQwNDI0NjIwNDEzMDg5MjE1ODA0MjUxMDMzNTkwMjIwOTY2NzM5OTQ3OTI3NDEyMDU5MzkzOUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmN0RmdyRmpyRl1zRl9zRlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFncDgyNjUyOTU1Mjg0ODY3MTE0OTMxMjgyMTgxODQ2NDkxMDA0MTU4NTg0MjM0NzY4OTIzODUyODIzMTM3NzIxODg2NzQyMjA4ODUyODY2ODk4Mjc0MDAwMzk5MjA1RihGZm9GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYnJGZHJGZ3JGanJGXXNGX3NGVEZXLUZqbjYjLUZdbzYjLUZgbzYqLUZjbzY5UWdwMjg0NTcxODMyMDk2MDExMTk5OTAzMjM0Mjg2NTY1MDUxNTA1Njk4MzQ5NTIyMjYxNDIzMjkzMDQ0MjY1MTA4OTI3NDM2NDAzMjYxNjEwNjEwNDkxMzkxOTE2NDlGKEZmb0Zpb0ZbcEZdcEZfcEZhcEZjcEZlcEZncEZpcEZbcUZdcUZfcUZhcUZjcUZlcUZncUZpcUZbckZdckZfckZickZjdEZnckZqckZdc0Zfc0ZURlctRmpuNiMtRl1vNiMtRmBvNiotRmNvNjlRZ3A4NzEyMzcyNDgwNjAwMDA3NDEzMTQ5MzE2MzA3OTc2ODY0OTIyNjkxNDAyMTI1MzAyNzk3NTUxMjg2NDAwOTU3MjYzMjUzODQxOTczMDg2NzgwMTY5NTMzMTkxMUYoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmRyRmdyRmpyRl1zRl9zRlRGVy1Gam42Iy1GXW82Iy1GYG82Ki1GY282OVFncDI3NTMzMjc4OTY5MTU2Njc3MjgxMTEzMTY1Njg1Mzc4MTM3NjI0MDYxOTczMzg4NjI3MDcyNzQzNzEyNTUzMjYyNTk2ODUyMDU5MzU1NjE2OTAzOTc2MjU3NTQ5RihGZm9GaW9GW3BGXXBGX3BGYXBGY3BGZXBGZ3BGaXBGW3FGXXFGX3FGYXFGY3FGZXFGZ3FGaXFGW3JGXXJGX3JGYnItRmNvNjlRZ3AzODk1MzQ5NTI3ODU0MzE2MzUyODczMjgzMDE1OTcwNzcwOTI0MzM4NTYzNjM2ODIzNjAzNTM0NTg5MjkwNzg2MjUxMTU2Mzk2NTY3NzUwOTM1MTY5MDQwODE4N0YoRmZvRmlvRltwRl1wRl9wRmFwRmNwRmVwRmdwRmlwRltxRl1xRl9xRmFxRmNxRmVxRmdxRmlxRltyRl1yRl9yRmJyRmdyRmpyRl1zRl9zRlRGVy1GLTYzUSJdRigvRjFRKHBvc3RmaXhGKEYzRjZGOS9GPVEydmVyeXRoaW5tYXRoc3BhY2VGKEY+RkBGQkZFRkhGSkZMRk5GUUZURlc3Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iy1JJ1JUQUJMRUdGKDYlIiorIykpcDgtSSdNQVRSSVhHRig2IzcsNyMjIWdwQiVmenFuME9NV0goUTI4RSgpZmd6XF1dYCNbMCVcPXUob3lGL1NWXytpQGJsSWZUeCkiaHBbRmpoblNQK3JpZURZK1hKO2QkUVRUJUhaWERhdHAkMyQpUTFLSlw2YUU8OTYpUiJlOjcjIyFocCYqPWxyT3csXGJvYWZENCRlRkQhcHVoKGVWVlZaPVpPdCgqKTNSOSgzWEZPbEBJdTVdNUZgejcjIyFmcEhtPkwwJT1jTTg5UFBWeCZHPUx1Iyo+cHY4PUQieiwpKilIMT0icCkzczd0Yl04XzhPJSJncHVqIjNRLig9XU5KejdCXXM6ZXkicHE/Wk9GRnJuWz1hVD4ubWx1MEZqM2QwKnAheig3IyMhZ3A+V2MieUU5aCkzMkhkJEdDW0BHJ1FIZGBkJDMjZT10LEI6dk0yYlckKiozYWJVMnhfKyVGYHo3IyMiaHBKZWo+V2UvV3BGJEh2QmVEUzpZKlI6OTsmPSZvWVcnUSI+d3hlSCY0cnZ0NCMzWylcdTlGYHo3IyMiZ3BSUmY/VEZ6JSpSbic0QSFmTDVEL2VAKjM4L2lDL0NuJioqei5rKHlkSj9NTCE9VyNwOFIiRmd6NyMjImdwMCMqUitTRikqbydHJikzQXUnKT1zUEojRyZRIypvWkIlZWVUKyJcWT09I0dKXDZuW0diSGwjKUZgejcjIyJncFw7PlIiXDUxaGhLU091IyozXkVXSUhCOUVBJlwkKXAwOjBsbEdNSyEqKj42ZzRLPWQlR0ZnejcjIyJncDY+TCZwLHknM3Q+JVFEanMmNFMnR152ei1gNy05cEFcJ28oekk7JFxKVDIrZyFbc0JyKUZgejcjIyJncFx2RHdSIXBoYiRmPyZvZmlLYjdQdXNxaSlRdD4xQ3c4eWBvbEo2Ikd4bTpwKnlLYEYiZ3AoPTMvcF4kNHZubFJjNkQneSFIKmVNTmdCb2pqJlFWIzR4cWYsJEd0R047ViZ5X1xgKlEmSSdWZWN0b3JHNiQlKnByb3RlY3RlZEdGKjYjSSdjb2x1bW5HRig3Iy1GXlxsNiMvSSQlaWRHRihGaHk= NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtb0dGJTYzUSJbRigvJSVmb3JtR1EncHJlZml4RigvJSZmZW5jZUdRJXRydWVGKC8lKnNlcGFyYXRvckdRJmZhbHNlRigvJSdsc3BhY2VHUS50aGlubWF0aHNwYWNlRigvJSdyc3BhY2VHRjsvJSlzdHJldGNoeUdGNS8lKnN5bW1ldHJpY0dGOC8lKG1heHNpemVHUSlpbmZpbml0eUYoLyUobWluc2l6ZUdRIjFGKC8lKGxhcmdlb3BHRjgvJS5tb3ZhYmxlbGltaXRzR0Y4LyUnYWNjZW50R0Y4LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSVzaXplR1EjMTJGKC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigtRiQ2Iy1JJ210YWJsZUdGJTYsLUkkbXRyR0YlNiMtSSRtdGRHRiU2Iy1JI21uR0YlNjlRIjRGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdGUy8lJWJvbGRHRjgvJSdpdGFsaWNHRjgvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHRlYvJStiYWNrZ3JvdW5kR0ZZLyUnb3BhcXVlR0Y4LyUrZXhlY3V0YWJsZUdGOC8lKXJlYWRvbmx5R0Y1LyUpY29tcG9zZWRHRjgvJSpjb252ZXJ0ZWRHRjgvJStpbXNlbGVjdGVkR0Y4LyUscGxhY2Vob2xkZXJHRjgvJTBmb250X3N0eWxlX25hbWVHRlAvJSptYXRoY29sb3JHRlYvJS9tYXRoYmFja2dyb3VuZEdGWS8lK2ZvbnRmYW1pbHlHRmVvLyUsbWF0aHZhcmlhbnRHUSdub3JtYWxGKC8lKW1hdGhzaXplR0ZTLUZqbjYjLUZdbzYjLUZgbzY5USIzRihGY29GZm9GaG9Gam9GXHBGXnBGYHBGYnBGZHBGZnBGaHBGanBGXHFGXnFGYHFGYnFGZHFGZnFGaHFGanFGXHJGX3ItRmpuNiMtRl1vNiMtRmBvNjlRIjlGKEZjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZoci1Gam42Iy1GXW82Iy1GYG82OVEjMTJGKEZjb0Zmb0Zob0Zqb0ZccEZecEZgcEZicEZkcEZmcEZocEZqcEZccUZecUZgcUZicUZkcUZmcUZocUZqcUZcckZfckZhckZfc0ZpbkZpbkZpbi1GLTYzUSJdRigvRjFRKHBvc3RmaXhGKEYzRjZGOS9GPVEydmVyeXRoaW5tYXRoc3BhY2VGKEY+RkBGQkZFRkhGSkZMRk5GUUZURlc3Iy1fRilJLG1wcmludHNsYXNoR0YoNiQ3Iy1JJ1JUQUJMRUdGKDYlIipLUkhRIi1JJ01BVFJJWEdGKDYjNyw3IyIiJTcjIiIkNyMiIipGX3U3IyIjN0ZddUZhdUZbdUZbdUZbdSZJJ1ZlY3Rvckc2JCUqcHJvdGVjdGVkR0YqNiNJJ2NvbHVtbkdGKDcjLUZjdTYjL0kkJWlkR0YoRmZ0
<Text-field style="Heading 2" layout="Heading 2">Example of use</Text-field>
<Text-field style="Heading 3" layout="Heading 3">Highly efficient user's solution</Text-field> Compute the determinant of a matrix read from a file myDeterminant:=proc(p, file) local Zp,B,d; Zp:=lbDomain(p); B:=lbBlackbox(Zp,file); d:=lbElement(Zp); lbDeterminant(d,B); return lbConvertElement(d); end; NiQtSSVtcm93RzYjL0krbW9kdWxlbmFtZUc2IkksVHlwZXNldHRpbmdHSShfc3lzbGliR0YoNiUtSSNtaUdGJTY5US5teURldGVybWluYW50RigvJSdmYW1pbHlHUTBUaW1lc35OZXd+Um9tYW5GKC8lJXNpemVHUSMxMkYoLyUlYm9sZEdRJmZhbHNlRigvJSdpdGFsaWNHUSV0cnVlRigvJSp1bmRlcmxpbmVHRjgvJSpzdWJzY3JpcHRHRjgvJSxzdXBlcnNjcmlwdEdGOC8lK2ZvcmVncm91bmRHUSpbMCwwLDI1NV1GKC8lK2JhY2tncm91bmRHUS5bMjU1LDI1NSwyNTVdRigvJSdvcGFxdWVHRjgvJStleGVjdXRhYmxlR0Y4LyUpcmVhZG9ubHlHRjsvJSljb21wb3NlZEdGOC8lKmNvbnZlcnRlZEdGOC8lK2ltc2VsZWN0ZWRHRjgvJSxwbGFjZWhvbGRlckdGOC8lMGZvbnRfc3R5bGVfbmFtZUdRKjJEfk91dHB1dEYoLyUqbWF0aGNvbG9yR0ZELyUvbWF0aGJhY2tncm91bmRHRkcvJStmb250ZmFtaWx5R0YyLyUsbWF0aHZhcmlhbnRHUSdpdGFsaWNGKC8lKW1hdGhzaXplR0Y1LUkjbW9HRiU2M1EjOj1GKC8lJWZvcm1HUSZpbmZpeEYoLyUmZmVuY2VHRjgvJSpzZXBhcmF0b3JHRjgvJSdsc3BhY2VHUS90aGlja21hdGhzcGFjZUYoLyUncnNwYWNlR0ZbcC8lKXN0cmV0Y2h5R0Y4LyUqc3ltbWV0cmljR0Y4LyUobWF4c2l6ZUdRKWluZmluaXR5RigvJShtaW5zaXplR1EiMUYoLyUobGFyZ2VvcEdGOC8lLm1vdmFibGVsaW1pdHNHRjgvJSdhY2NlbnRHRjgvJTBmb250X3N0eWxlX25hbWVHRlgvJSVzaXplR0Y1LyUrZm9yZWdyb3VuZEdGRC8lK2JhY2tncm91bmRHRkctRiQ2KS1GX282M1ElcHJvY0YoL0Zjb1EhRihGZW9GZ28vRmpvUSQwZW1GKC9GXXBGXnJGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2JS1GX282M1EiKEYoL0Zjb1EncHJlZml4RigvRmZvRjtGZ28vRmpvUS50aGlubWF0aHNwYWNlRigvRl1wRmlyL0ZfcEY7RmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiUtRi02OVEicEYoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvLUZfbzYzUSIsRihGYm9GZW8vRmhvRjtGXXIvRl1wUTN2ZXJ5dGhpY2ttYXRoc3BhY2VGKEZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcS1GLTY5USVmaWxlRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIilGKC9GY29RKHBvc3RmaXhGKEZnckZnb0Zoci9GXXBRMnZlcnl0aGlubWF0aHNwYWNlRihGW3NGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtSSdtc3BhY2VHRiU2Ji8lJ2hlaWdodEdRJzAuMH5leEYoLyUmd2lkdGhHUScwLjN+ZW1GKC8lJmRlcHRoR0ZmdC8lKmxpbmVicmVha0dRMWZpcnN0cHJvY25ld2xpbmVGKC1GJDYmLUZfbzYzUSZsb2NhbEYoRltyRmVvRmdvRl1yL0ZdcFEwbWVkaXVtbWF0aHNwYWNlRihGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2Jy1GLTY5USNacEYoRjBGM0Y2RjlGPEY+RkBGQkZFRkhGSkZMRk5GUEZSRlRGVkZZRmVuRmduRmluRlxvRmFzLUYtNjlRIkJGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zhcy1GLTY5USJkRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIjtGKEZib0Zlb0Zkc0ZdckZccEZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcUZhdC1GJDYnLUYkNiUtRiQ2JUZodUZeby1GJDYlLUYkNiVGYnItRiQ2JS1GLTY5US5gTGluQm94Oi1EZXZgRihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG8tRl9vNjNRIzotRihGW3JGZW9GZ29GXXJGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRi02OVEpbGJEb21haW5GKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqcy1GX282M1EwJkFwcGx5RnVuY3Rpb247RihGYm9GZW9GZ29GXXJGX3JGXnBGYHBGYnBGZXBGaHBGanBGXHFGXnFGYHFGYnFGZHEtRiQ2JUZici1GJDYjRl5zRmpzRmF2RmF0LUYkNiUtRiQ2JUZbdkZeby1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5UStsYkJsYWNrYm94RihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG9GanNGaXctRiQ2JUZici1GJDYlRmh1RmFzRmdzRmpzRmF2RmF0LUYkNiUtRiQ2JUZedkZeby1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5USpsYkVsZW1lbnRGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqc0Zpdy1GJDYlRmJyLUYkNiNGaHVGanNGYXZGYXQtRiQ2JS1GJDYlLUYkNiVGYnItRiQ2JUZgd0Zjdy1GLTY5US5sYkRldGVybWluYW50RihGMEYzRjZGOUY8Rj5GQEZCRkVGSEZKRkxGTkZQRlJGVEZWRllGZW5GZ25GaW5GXG9GanNGaXctRiQ2JUZici1GJDYlRl52RmFzRlt2RmpzRmF2RmF0LUYkNiQtRl9vNjNRJ3JldHVybkYoRltyRmVvRmdvRl1yRmR1Rl5wRmBwRmJwRmVwRmhwRmpwRlxxRl5xRmBxRmJxRmRxLUYkNiUtRiQ2JUZici1GJDYlRmB3RmN3LUYtNjlRMWxiQ29udmVydEVsZW1lbnRGKEYwRjNGNkY5RjxGPkZARkJGRUZIRkpGTEZORlBGUkZURlZGWUZlbkZnbkZpbkZcb0Zqc0Zpdy1GJDYlRmJyLUYkNiNGXnZGanMtRmJ0NiZGZHQvRmh0UScwLjB+ZW1GKEZqdC9GXXVRNmRlY3JlYXNlaW5kZW50bmV3bGluZUYoLUZfbzYzUSllbmR+cHJvY0YoRltyRmVvRmdvL0Zqb0ZldUZfckZecEZgcEZicEZlcEZocEZqcEZccUZecUZgcUZicUZkcTcjLV9GKUksbXByaW50c2xhc2hHRig2JDcjPkkubXlEZXRlcm1pbmFudEdGKGYqNiRJInBHRihJJWZpbGVHRig2JUkjWnBHRihJIkJHRihJImRHRihGKEYoQyc+RmpdbC1fSSREZXZHNiQlKnByb3RlY3RlZEcvRidJJ0xpbkJveEdGKEkpbGJEb21haW5HRig2I0ZnXWw+RltebC1fRmFebEkrbGJCbGFja2JveEdGKDYkRmpdbEZoXWw+RlxebC1fRmFebEkqbGJFbGVtZW50R0YoNiNGal1sLV9GYV5sSS5sYkRldGVybWluYW50R0YoNiRGXF5sRltebE8tX0ZhXmxJMWxiQ29udmVydEVsZW1lbnRHRig2I0ZcXmxGKEYoRig3I0ZlXWw= myDeterminant(1009, "trefethen_200.sms"); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5USQzNDZGKC8lJ2ZhbWlseUdRMFRpbWVzfk5ld35Sb21hbkYoLyUlc2l6ZUdRIzEyRigvJSVib2xkR1EmZmFsc2VGKC8lJ2l0YWxpY0dGNS8lKnVuZGVybGluZUdGNS8lKnN1YnNjcmlwdEdGNS8lLHN1cGVyc2NyaXB0R0Y1LyUrZm9yZWdyb3VuZEdRKlswLDAsMjU1XUYoLyUrYmFja2dyb3VuZEdRLlsyNTUsMjU1LDI1NV1GKC8lJ29wYXF1ZUdGNS8lK2V4ZWN1dGFibGVHRjUvJSlyZWFkb25seUdRJXRydWVGKC8lKWNvbXBvc2VkR0Y1LyUqY29udmVydGVkR0Y1LyUraW1zZWxlY3RlZEdGNS8lLHBsYWNlaG9sZGVyR0Y1LyUwZm9udF9zdHlsZV9uYW1lR1EqMkR+T3V0cHV0RigvJSptYXRoY29sb3JHRkAvJS9tYXRoYmFja2dyb3VuZEdGQy8lK2ZvbnRmYW1pbHlHRi8vJSxtYXRodmFyaWFudEdRJ25vcm1hbEYoLyUpbWF0aHNpemVHRjI3IyIkWSQ= myDeterminant(0, "trefethen_200.sms"); NiQtSSNtbkc2Iy9JK21vZHVsZW5hbWVHNiJJLFR5cGVzZXR0aW5nR0koX3N5c2xpYkdGKDY5UVxbbTI0MDg0NTE5MjU0ODAyNzQzMTkzNTM5MjE0MTY1NjUwNzE0MDcxODM4ODg4OTI4ODk5NjM4MDgxMzEzMjU2MjE0MjAxMDk4MTY2MDQyMzgyMTg3MDYwNDE4MDEzMTA5MzQ5NzE1NjMzNzYyNDgzNDY1ODIzMjM4NTEyNTU5ODQwNjk4OTQ4OTY0MDE1NjUwNDExMzc4MjU1NDYxMzU2OTYyODg4NzMwMjgwNjEwMzQ0MTc2MzU1NDEyMjQ4OTk4MDc1NDE0NjYzMTcxNzUxOTYyMTQyMzA3OTQ3MjE4NTE3NDkyNzAzNzI4OTg2NDMzNDU1MzAzOTc1NTM4MjczNDQ3NTc2NzY2NTQ2OTE0MDkyMTEwNzcxMzg1NTM2NDkyMzk4Mzk0OTQ1MDMxODUyMjU1NjYwMDgzOTU0NjAwODY1Mzg2OTMwMDM3Nzg4OTk4NDYwMTE4NjcwNjc2MDM5MzMwMjQzOTgxNjAyMjI5MDc3MzYxMzIzODAzNjQ0NTU2NzY0NDkxMzg4MDQzNTQyODAzNTkyOTc0NTYxMjM0MDM5NjI1ODAzNTg3OTI2OTYwNjI0ODYxOTk0NzE4OTQ4ODI3MTczMTU4Nzc2Mzg5OTAxMzUwNDUzOTMzNDM5NTE4MzA4OTgwNDQ3NzY2NDUxODE4NDg4MzcxMDE2Njg2MzQyOEYoLyUnZmFtaWx5R1EwVGltZXN+TmV3flJvbWFuRigvJSVzaXplR1EjMTJGKC8lJWJvbGRHUSZmYWxzZUYoLyUnaXRhbGljR0Y1LyUqdW5kZXJsaW5lR0Y1LyUqc3Vic2NyaXB0R0Y1LyUsc3VwZXJzY3JpcHRHRjUvJStmb3JlZ3JvdW5kR1EqWzAsMCwyNTVdRigvJStiYWNrZ3JvdW5kR1EuWzI1NSwyNTUsMjU1XUYoLyUnb3BhcXVlR0Y1LyUrZXhlY3V0YWJsZUdGNS8lKXJlYWRvbmx5R1EldHJ1ZUYoLyUpY29tcG9zZWRHRjUvJSpjb252ZXJ0ZWRHRjUvJStpbXNlbGVjdGVkR0Y1LyUscGxhY2Vob2xkZXJHRjUvJTBmb250X3N0eWxlX25hbWVHUSoyRH5PdXRwdXRGKC8lKm1hdGhjb2xvckdGQC8lL21hdGhiYWNrZ3JvdW5kR0ZDLyUrZm9udGZhbWlseUdGLy8lLG1hdGh2YXJpYW50R1Enbm9ybWFsRigvJSltYXRoc2l6ZUdGMjcjIlxbbUdNJ287NVApWz09WG14VyEpKjMkPSZSTSRSWF04ISoqUXcoZUo8RilbKj1aKj4nW2lncCN6ZS5laVJTQmhYKEhmLkdhViEpUSJca25iV08hUUtodDJIQWciKVJDSSRSZ25xJz0sWSkqKil5UCskcFFsM2dhUjNnY0RfPS5YXFIpUiNcT2JRcjI2IzQ5cGFtbmRaTUZRYihSSWJNVicpKkdQcSNcPCY9cyV6SVVAJz52ckptOWEyKSoqW0FUYmo8Vy5oIUdJKCkpRydwTmhhRHk4VF1jLGsqWyopcFMpZkReUUsjZVkkW2lQajooXCQ0Siw9LzEoPSNRVWc7KTQsVUBjS0oiM1EnKiopRyopKSlRPTI5MmxsVEBSTj5WRiFbRD5YM0M=
<Text-field style="Heading 2" layout="Heading 2">To continue ...</Text-field>
linbox-1.6.3/linbox-auto-install.sh000077500000000000000000000735031347646240000172760ustar00rootroot00000000000000#!/bin/bash - # Copyright(c) 2011 LinBox # Written by Brice Boyer (briceboyer) # Jean-Guillaume Dumas # see COPYING for more details. # TODO : create .extracted, .configured, .build, .installed and use a switch # (like --force) when you want to rebuild # TODO : manage icc/gcc # TODO : add gmp in givaro and use auto-install in givaro # TODO : use an optionnal message in die function. # TODO : put openblas and use auto-install in fflas-ffpack # TODO : rpath instead of LD_LIBRARY_PATH ? ############################# ## Only for stable fetching ############################# #### stable .tar.gz STABLE_LB=1.6.3 STABLE_FFLAS=2.4.1 STABLE_GIVARO=4.1.1 STABLE_OPENBLAS=0.3.6 STABLE_BLIS=0.5.2 MD5SUFF=md5 ############################# function decompress { #tar xf $1 gunzip -c $1 | tar xf - } #switches STABLE_VAR="false" DEBUG="" DEBUG_VAR="" WARNINGS="" WARNINGS_VAR="" OPTIM="--enable-optimization" OPTIM_VAR="" CHECK_VAR="" #options PREFIX_LOC="/tmp" PREFIX_VAR="" PREFIX="--prefix=$PREFIX_LOC" BLAS="" BLAS_VAR="false" NTL="--with-ntl" NTL_VAR="" EXTRA="" EXTRA_VAR="" IML="--with-iml" IML_VAR="" DRIV="" DRIV_VAR="false" OPENBLAS="" OPENBLAS_VAR="false" BLIS="" BLIS_VAR="false" MAKEOPT= MAKE_VAR="" DONE="\033[0;36m done !\033[0m" BEG="\033[1;32m * \033[0m" ######### # die # ######### die() { echo -ne "\n\033[1;31m * \033[0mfailed" ; if [[ -n $1 ]] ; then echo " ($1)" else echo "." fi exit -1 ; } cool() { echo -e $DONE } ############## # helper # ############## help() { echo echo " script for building and installing linbox the simple way (hopefully)" echo echo " * usage :" echo echo " --stable=[yes,no] : install latest stable versions or latest git versions." echo " Default : no, even if switch ommitted. No argument means no" echo " --prefix=MY/PATH : install all libraries under MY/PATH." echo " Default : /tmp" echo echo " >> Libraries to search for <<" echo echo " If some library cannot be linked, don't forget to export LD_LIBRARY_PATH ! " echo echo " --with-gmp=GMP/PATH : tell where gmp is." echo " Default : /usr, /usr/local. No argument is Default" echo " --with-blas-libs=BLAS/PATH : same as GMP for BLAS. (will check anyway)" echo " --with-ntl=NTL/PATH : same as GMP for NTL. (default)" echo " --with-iml=IML/PATH : same as GMP for IML. (default)" echo " --extra-flags=\"\" : give extra compiler flags." echo " Default : empty" echo " --make-flags=\"\" : give extra makefile flags." echo " Default : empty" echo echo " >> for the next switches, nothing, Y, y, yes or 1 after \"=\" <<" echo " >> means enabled. Anything else or omission means disabled <<" echo echo " --enable-openblas : fetch openblas." echo " Default : disabled (use local blas)." echo " --enable-blis : fetch flame/blis." echo " Default : disabled (use local blas)." echo " --enable-debug : build in debugging mode." echo " Default : disabled." echo " --enable-check : run make check." echo " Default : disabled." echo " --enable-warnings : build with extra compile warnings." echo " Default : disabled. May be \'full\' " echo " --enable-optimization : build with compile-time optimization." echo " Default : enabled." echo " --enable-drivers : build with drivers support." echo " Default : disabled." echo echo " >> calling helllp <<" echo echo " --help, -h, -? : print help and exit." } ############ # parser # ############ # Recover command line, with double-quotes CMDLINE="" for arg in "$@" do WHO="`echo $arg | cut -d'=' -f1`" WHAT="`echo $arg | cut -s -d'=' -f2`" if test "x$WHAT" = "x"; then CMDLINE="$CMDLINE $WHO" else CMDLINE="$CMDLINE $WHO=\"$WHAT\"" fi done echo "$0 $CMDLINE" | tee -a linbox-auto-install.log # Parse command line for i in "$@" ; do case "$i" in # switches "--help"|"-h"|"-?") help exit 0 ;; "--stable") if [ "x$STABLE_VAR" = "xfalse" ] ; then echo "stable or not ?"; help ; exit -1 ; fi STABLE_VAR=true; ;; "--enable-debug") if [ "x$DEBUG_VAR" = "xfalse" ] ; then echo "enable-debug or not ?" ; help ; exit -1 ; fi DEBUG="$i"; DEBUG_VAR="true"; ;; "--enable-check") if [ "x$CHECK_VAR" = "xfalse" ] ; then echo "enable-check or not ?"; help ; exit -1; fi CHECK_VAR="true"; ;; "--enable-warnings") if [ "x$WARNINGS_VAR" = "xfalse" ] ; then echo "enable-warnings or not ?"; help ; exit -1; fi WARNINGS="$i"; WARNINGS_VAR="true"; ;; "--enable-optimization") if [ "x$OPTIM_VAR" = "xfalse" ] ; then echo "enable-optimization or not ?"; help ; exit -1; fi OPTIM="$i"; OPTIM_VAR="true"; ;; "--enable-openblas") if [ "x$OPENBLAS_VAR" = "xfalse" ] ; then echo "enable-openblas or not ?" ; help ; exit -1 ; fi OPENBLAS="$i"; OPENBLAS_VAR="true"; ;; "--enable-blis") if [ "x$BLIS_VAR" = "xfalse" ] ; then echo "enable-blis or not ?" ; help ; exit -1 ; fi BLIS="$i"; BLIS_VAR="true"; ;; "--disable-debug") if [ "x$DEBUG_VAR" = "xtrue" ] ; then echo "enable-debug or not ?" ; help ; exit -1 ; fi DEBUG_VAR="false"; ;; "--disable-check") if [ "x$CHECK_VAR" = "xtrue" ] ; then echo "enable-check or not ?"; help ; exit -1; fi CHECK_VAR="false"; ;; "--disable-warnings") if [ "x$WARNINGS_VAR" = "xtrue" ] ; then echo "enable-warnings or not ?"; help ; exit -1; fi WARNINGS_VAR="false"; ;; "--disable-optimization") if [ "x$OPTIM_VAR" = "xtrue" ] ; then echo "enable-optimization or not ?"; help ; exit -1; fi OPTIM_VAR="false"; ;; "--disable-openblas") if [ "x$OPENBLAS_VAR" = "xtrue" ] ; then echo "enable-openblas or not ?" ; help ; exit -1 ; fi OPENBLAS_VAR="false"; ;; "--disable-blis") if [ "x$BLIS_VAR" = "xtrue" ] ; then echo "enable-blis or not ?" ; help ; exit -1 ; fi BLIS_VAR="false"; ;; "--with-ntl") if [ "x$NTL_VAR" = "xfalse" ] ; then echo "with-ntl or not ?"; help ; exit -1; fi NTL="$i"; NTL_VAR="true"; ;; "--with-gmp") if [ "x$GMP_VAR" = "xfalse" ] ; then echo "with-gmp or not ?"; help ; exit -1; fi GMP="$i" GMP_VAR="true" ;; "--with-iml") if [ "x$IML_VAR" = "xfalse" ] ; then echo "with-iml or not ?"; help ; exit -1; fi IML="$i " IML_VAR="true" ;; "--enable-drivers") if [ "x$DRIV_VAR" = "xfalse" ] ; then echo "enable-drivers or not ?" ; help ; exit -1; fi DRIV="$i" DRIV_VAR="true" ;; "--disable-drivers") if [ "x$DRIV_VAR" = "xtrue" ] ; then echo "enable-drivers or not ?" ; help ; exit -1; fi DRIV="" DRIV_VAR="false" ;; *) if [[ ! "$i" =~ --.*=.+ ]] ; then echo "bad switch : $i" help ; exit -1 ; fi # options (now we can cut) QUI="`echo $i | cut -d'=' -f1`" QUOI="`echo $i | cut -d'=' -f2`" # echo "QUIQUOI: $QUI = $QUOI" case "$QUI" in "--stable") OK=2 [[ "x$QUOI" = "xyes" ]] && OK=1 [[ "x$QUOI" = "xno" ]] && OK=0 if [[ "$OK" = "2" ]] ; then echo "stable=[yes/no] !" ; help ; exit -1 ; fi [[ "$OK" = "1" ]] && STABLE_VAR="true" || STABLE_VAR="false" ;; "--prefix") if [ "x$PREFIX_VAR" = "xtrue" ] ; then echo "prefix already set ?" ; help ; exit -1; fi PREFIX=$i PREFIX_LOC=$QUOI PREFIX_VAR="true" ;; "--extra-flags") if [ "x$EXTRA_VAR" = "xtrue" ] ; then echo "extra-flags already set ?" ; help ; exit -1; fi EXTRA="$QUOI" EXTRA_VAR="true" ;; "--make-flags") if [ "x$MAKE_VAR" = "xtrue" ] ; then echo "make-flags already set ?" ; help ; exit -1; fi MAKEOPT="$QUOI" MAKE_VAR="true" ;; "--with-gmp") if [ "x$GMP_VAR" = "xtrue" ] ; then echo "GMP path already set ?" ; help ; exit -1; fi GMP="$i" GMP_VAR="true" ;; "--with-blas-libs") if [ "x$BLAS_VAR" = "xtrue" ] ; then echo "BLAS path already set ?" ; help ; exit -1; fi BLAS=$QUI=\"$QUOI\" BLAS_VAR="true" ;; "--with-ntl") if [ "x$NTL_VAR" = "xtrue" ] ; then echo "NTL path already set ?" ; help ; exit -1; fi NTL="$i" NTL_VAR="true" ;; "--with-iml") if [ "x$IML_VAR" = "xtrue" ] ; then echo "IML path already set ?" ; help ; exit -1; fi IML="$i" IML_VAR="true" ;; "--enable-optimization") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$OPTIM_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "optim or not optim ?" ; help ; exit -1; fi if [ "x$OPTIM_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "optim or not optim ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then OPTIM=$QUI ; OPTIM_VAR="true" ; else OPTIM_VAR="false" ; fi ;; "--enable-openblas") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$OPENBLAS_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "openblas or not openblas ?" ; help ; exit -1; fi if [ "x$OPENBLAS_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "openblas or not openblas ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then OPENBLAS=$QUI ; OPENBLAS_VAR="true" ; else OPENBLAS_VAR="false" ; fi ;; "--enable-blis") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$BLIS_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "blis or not blis ?" ; help ; exit -1; fi if [ "x$BLIS_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "blis or not blis ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then BLIS=$QUI ; BLIS_VAR="true" ; else BLIS_VAR="false" ; fi ;; "--enable-warnings") [[ "$QUOI" =~ y|yes|Y|1|full ]] && OK=1 || OK=0 if [ "x$WARNING_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "warning or not warning ?" ; help ; exit -1; fi if [ "x$WARNING_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "warning or not warning ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then WARNINGS=$QUI ; WARNING_VAR="true" else WARNING_VAR="false" fi [[ "x$QUOI" = "xfull" ]] && WARNINGS=$i ;; "--enable-debug") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$DEBUG_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "debug or not debug ?" ; help ; exit -1; fi if [ "x$DEBUG_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "debug or not debug ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then DEBUG=$QUI ; DEBUG_VAR="true" else DEBUG_VAR="false" fi ;; "--enable-check") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$CHECK_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "check or not check ?" ; help ; exit -1; fi if [ "x$CHECK_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "check or not check ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then CHECK=$QUI ; CHECK_VAR="true" else CHECK_VAR="false" fi ;; "--enable-drivers") [[ "$QUOI" =~ y|yes|Y|1 ]] && OK=1 || OK=0 if [ "x$OPTIM_VAR" = "xtrue" -a "OK" = "0" ] ; then echo "drivers or not drivers ?" ; help ; exit -1; fi if [ "x$OPTIM_VAR" = "xfalse" -a "OK" = "1" ] ; then echo "drivers or not drivers ?" ; help ; exit -1; fi if [[ "x$OK" = "x1" ]] ; then DRIV=$QUI ; DRIV_VAR="true" else DRIV_VAR="false" fi ;; *) echo "unkown swith option $i" ; help ; exit -1 ; ;; esac ;; esac done MAKEPROG="make ${MAKEOPT}" export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${PREFIX_LOC}/lib/pkgconfig echo "PKG_CONFIG_PATH=$PKG_CONFIG_PATH"| tee -a linbox-auto-install.log export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$PREFIX_LOC/lib echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"| tee -a linbox-auto-install.log ################################## # check within LinBox or fetch # ################################## if [ ! \( -x autogen.sh -o -x configure \) ] ; then ### Extract LinBox sources ### echo -en "${BEG}fetching LinBox..."| tee -a linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then if [ -f linbox-${STABLE_LB}.tar.gz ] ; then echo -ne " already there!\n"| tee -a linbox-auto-install.log echo -ne "${BEG}fetching md5sum" | tee -a linbox-auto-install.log; [ -f linbox-${STABLE_FFLAS}.tar.gz.${MD5SUFF} ] && rm linbox-${STABLE_FFLAS}.tar.gz.${MD5SUFF} ; wget --no-check-certificate https://github.com/linbox-team/linbox/releases/download/v${STABLE_LB}/linbox-${STABLE_LB}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die [ -f linbox-${STABLE_LB}.tar.gz.${MD5SUFF} ] || die cool| tee -a linbox-auto-install.log echo -ne "${BEG}" md5sum -c linbox-${STABLE_LB}.tar.gz.${MD5SUFF} || die else wget https://github.com/linbox-team/linbox/releases/download/v${STABLE_LB}/linbox-${STABLE_LB}.tar.gz >/dev/null 2>&1 || die [ -f linbox-${STABLE_LB}.tar.gz ] && cool || die echo -ne "${BEG}fetching md5sum" | tee -a linbox-auto-install.log; wget --no-check-certificate https://github.com/linbox-team/linbox/releases/download/v${STABLE_LB}/linbox-${STABLE_LB}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die cool| tee -a linbox-auto-install.log echo -ne "${BEG}" md5sum -c linbox-${STABLE_LB}.tar.gz.${MD5SUFF} || die fi OK=0 echo -en "${BEG}extracting LinBox..."| tee -a linbox-auto-install.log decompress linbox-${STABLE_LB}.tar.gz && OK=1 [ "$OK" = "1" ] && cool | tee -a linbox-auto-install.log || die cd linbox-${STABLE_LB} && cool || die else OK=0 ; git clone --depth 1 https://github.com/linbox-team/linbox.git 2>&1 >/dev/null && OK=1 [ "$OK" = "1" ] && cool | tee -a linbox-auto-install.log || die cd linbox && cool || die fi mv ../linbox-auto-install.log . || die fi ###################### # create build dir # ###################### #first tee creates a new log. echo -en "${BEG}Preparing build directory..."| tee -a linbox-auto-install.log if [ -e build ] ; then if [ ! -d build ] ; then rm -rf build ; mkdir build; fi # echo -n "emptying build directory..." # rm -rf build/ # mkdir build else # echo -n "creating empty build directory..." mkdir build fi cool| tee -a linbox-auto-install.log #################### # fetch sources # #################### cd build ; ### Givaro ### echo -en "${BEG}fetching Givaro..."| tee -a ../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then if [ -f givaro-${STABLE_GIVARO}.tar.gz ] ; then echo -ne " already there!\n"| tee -a ../linbox-auto-install.log echo -ne "${BEG}fetching md5sum"| tee -a ../linbox-auto-install.log ; [ -f givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} ] && rm givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} ; wget --no-check-certificate https://github.com/linbox-team/givaro/releases/download/v${STABLE_GIVARO}/givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die [ -f givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} ] || die cool| tee -a ../linbox-auto-install.log echo -ne "${BEG}" md5sum -c givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} || die else wget --no-check-certificate https://github.com/linbox-team/givaro/releases/download/v${STABLE_GIVARO}/givaro-${STABLE_GIVARO}.tar.gz >/dev/null 2>&1 || die [ -f givaro-${STABLE_GIVARO}.tar.gz ] && cool || die echo -ne "${BEG}fetching md5sum"| tee -a ../linbox-auto-install.log ; wget --no-check-certificate https://github.com/linbox-team/givaro/releases/download/v${STABLE_GIVARO}/givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die cool| tee -a ../linbox-auto-install.log echo -ne "${BEG}" md5sum -c givaro-${STABLE_GIVARO}.tar.gz.${MD5SUFF} || die fi else OK=0 ; git clone --depth 1 https://github.com/linbox-team/givaro.git 2>&1 >/dev/null && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi ### Fflas-ffpack ### echo -en "${BEG}fetching Fflas-Ffpack..."| tee -a ../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then if [ -f fflas-ffpack-${STABLE_FFLAS}.tar.gz ] ; then echo -ne " already there!\n"| tee -a ../linbox-auto-install.log echo -ne "${BEG}fetching md5sum"| tee -a ../linbox-auto-install.log ; [ -f fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} ] && rm fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} ; wget --no-check-certificate https://github.com/linbox-team/fflas-ffpack/releases/download/v${STABLE_FFLAS}/fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die [ -f fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} ] && cool || die cool echo -ne "${BEG}" md5sum -c fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} || die else wget --no-check-certificate https://github.com/linbox-team/fflas-ffpack/releases/download/v${STABLE_FFLAS}/fflas-ffpack-${STABLE_FFLAS}.tar.gz >/dev/null 2>&1 || die [ -f fflas-ffpack-${STABLE_FFLAS}.tar.gz ] && cool || die echo -ne "${BEG}fetching md5sum"| tee -a ../linbox-auto-install.log ; wget --no-check-certificate https://github.com/linbox-team/fflas-ffpack/releases/download/v${STABLE_FFLAS}/fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} >/dev/null 2>&1 || die cool echo -ne "${BEG}" md5sum -c fflas-ffpack-${STABLE_FFLAS}.tar.gz.${MD5SUFF} || die fi else OK=0 ; git clone --depth=1 https://github.com/linbox-team/fflas-ffpack.git 2>&1 >/dev/null && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi ### OpenBlas ### if [ "$OPENBLAS_VAR" = "true" ]; then echo -en "${BEG}fetching OpenBlas..."| tee -a ../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then if [ -f v${STABLE_OPENBLAS}.tar.gz ] ; then echo -ne " already there!\n"| tee -a ../linbox-auto-install.log else wget --no-check-certificate http://github.com/xianyi/OpenBLAS/archive/v${STABLE_OPENBLAS}.tar.gz >/dev/null 2>&1 || die [ -f v${STABLE_OPENBLAS}.tar.gz ] && cool || die fi else OK=0 ; git clone --depth=1 https://github.com/xianyi/OpenBLAS.git 2>&1 >/dev/null && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi fi ### flame/blis ### if [ "$BLIS_VAR" = "true" ]; then echo -en "${BEG}fetching FLAME/Blis..."| tee -a ../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then if [ -f ${STABLE_BLIS}.tar.gz ] ; then echo -ne " already there!\n"| tee -a ../linbox-auto-install.log else wget --no-check-certificate https://github.com/flame/blis/archive/${STABLE_BLIS}.tar.gz >/dev/null 2>&1 || die [ -f ${STABLE_BLIS}.tar.gz ] && cool || die fi else OK=0 ; git clone --depth=1 https://github.com/flame/blis.git 2>&1 >/dev/null && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi fi ##################### # extract sources # ##################### ### Givaro ### OK=0 if [ "$STABLE_VAR" = "true" ]; then echo -en "${BEG}extracting Givaro..."| tee -a ../linbox-auto-install.log decompress givaro-${STABLE_GIVARO}.tar.gz && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi ### Fflas-ffpack ### OK=0 if [ "$STABLE_VAR" = "true" ]; then echo -en "${BEG}extracting Fflas-Ffpack..."| tee -a ../linbox-auto-install.log decompress fflas-ffpack-${STABLE_FFLAS}.tar.gz && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi ### OpenBlas ### if [ "$OPENBLAS_VAR" = "true" ]; then OK=0 if [ "$STABLE_VAR" = "true" ]; then echo -en "${BEG}extracting OpenBlas..."| tee -a ../linbox-auto-install.log decompress v${STABLE_OPENBLAS}.tar.gz && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi fi ### BLIS ### if [ "$BLIS_VAR" = "true" ]; then OK=0 if [ "$STABLE_VAR" = "true" ]; then echo -en "${BEG}extracting Blis..."| tee -a ../linbox-auto-install.log decompress ${STABLE_BLIS}.tar.gz && OK=1 [ "$OK" = "1" ] && cool | tee -a ../linbox-auto-install.log || die fi fi #################### # install Givaro # #################### if [ "$STABLE_VAR" = "true" ]; then cd givaro-${STABLE_GIVARO} || die else cd givaro/ || die fi if [ -f Makefile ] ; then echo -e "${BEG}cleaning Givaro..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} clean | tee -a ../../linbox-auto-install.log|| die ${MAKEPROG} distclean | tee -a ../../linbox-auto-install.log|| die # ${MAKEPROG} unistall || die cool fi echo -e "${BEG}configuring Givaro..."| tee -a ../../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then echo "./configure $PREFIX $DEBUG $OPTIM $GMP $WARNINGS "| tee -a ../../linbox-auto-install.log echo "./configure $PREFIX $DEBUG $OPTIM $GMP $WARNINGS " > configure.givaro.exe chmod +x configure.givaro.exe ./configure.givaro.exe | tee -a ../../linbox-auto-install.log rm -rf configure.givaro.exe #./configure $PREFIX $DEBUG $OPTIM $GMP $WARNINGS || die else echo "./autogen.sh $PREFIX $DEBUG $OPTIM $GMP $WARNINGS"| tee -a ../../linbox-auto-install.log echo "./autogen.sh $PREFIX $DEBUG $OPTIM $GMP $WARNINGS" > autogen.givaro.exe chmod +x autogen.givaro.exe ./autogen.givaro.exe| tee -a ../../linbox-auto-install.log rm -rf autogen.givaro.exe #./autogen.sh $PREFIX $DEBUG $OPTIM $GMP $WARNINGS || die fi echo -e "${BEG}building Givaro..."| tee -a ../../linbox-auto-install.log echo "${MAKEPROG} CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\""| tee -a ../../linbox-auto-install.log if [ -n "$EXTRA" ] ; then ${MAKEPROG} "CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\"" | tee -a ../../linbox-auto-install.log|| die else ${MAKEPROG} | tee -a ../../linbox-auto-install.log|| die fi if [ "$CHECK_VAR" = "true" ] ; then echo -e "${BEG}checking Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} check | tee -a ../../linbox-auto-install.log|| die fi echo -e "${BEG}installing Givaro..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} install | tee -a ../../linbox-auto-install.log|| die #return in build cd .. cool| tee -a ../linbox-auto-install.log ###################### # install OpenBlas # ###################### if [ "$OPENBLAS_VAR" = "true" ]; then if [ "$STABLE_VAR" = "true" ]; then cd OpenBLAS-${STABLE_OPENBLAS} || die else cd OpenBLAS/ || die fi if [ -f Makefile ] ; then echo -e "${BEG}cleaning OpenBLAS..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} clean | tee -a ../../linbox-auto-install.log|| die ${MAKEPROG} distclean | tee -a ../../linbox-auto-install.log|| die # ${MAKEPROG} unistall || die cool fi OPENBLAS_FLAGS="USE_THREADS=0 USE_THREAD=0 CC=gcc FC=gfortran PREFIX=$PREFIX_LOC" echo -e "${BEG}building OpenBLAS..."| tee -a ../../linbox-auto-install.log echo "${MAKEPROG} ${OPENBLAS_FLAGS} CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\""| tee -a ../../linbox-auto-install.log if [ -n "$EXTRA" ] ; then ${MAKEPROG} ${OPENBLAS_FLAGS} "CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\"" | tee -a ../../linbox-auto-install.log|| die else ${MAKEPROG} ${OPENBLAS_FLAGS} | tee -a ../../linbox-auto-install.log|| die fi echo -e "${BEG}installing OpenBLAS..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} ${OPENBLAS_FLAGS} install | tee -a ../../linbox-auto-install.log|| die #return in build cd .. cool| tee -a ../linbox-auto-install.log if [ "$BLAS_VAR" = "false" ]; then BLAS="--with-blas-libs="\""-L${PREFIX_LOC}/lib -lopenblas -lpthread -lgfortran"\" BLAS_VAR=true fi fi ###################### # install Blis # ###################### if [ "$BLIS_VAR" = "true" ]; then if [ "$STABLE_VAR" = "true" ]; then cd blis-${STABLE_BLIS} || die else cd blis/ || die fi if [ -f Makefile ] ; then echo -e "${BEG}cleaning Blis..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} clean | tee -a ../../linbox-auto-install.log|| die ${MAKEPROG} distclean | tee -a ../../linbox-auto-install.log|| die # ${MAKEPROG} unistall || die cool fi echo -e "${BEG}configuring Blis..."| tee -a ../../linbox-auto-install.log echo "./configure $PREFIX $DEBUG $WARNINGS --enable-cblas auto"| tee -a ../../linbox-auto-install.log echo "./configure $PREFIX $DEBUG $WARNINGS --enable-cblas auto " > configure.blis.exe chmod +x configure.blis.exe ./configure.blis.exe | tee -a ../../linbox-auto-install.log rm -rf configure.blis.exe echo -e "${BEG}building Blis..."| tee -a ../../linbox-auto-install.log BLIS_FLAGS="" echo "${MAKEPROG} ${BLIS_FLAGS} CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\""| tee -a ../../linbox-auto-install.log if [ -n "$EXTRA" ] ; then ${MAKEPROG} ${BLIS_FLAGS} "CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\"" | tee -a ../../linbox-auto-install.log|| die else ${MAKEPROG} ${BLIS_FLAGS} | tee -a ../../linbox-auto-install.log|| die fi echo -e "${BEG}installing Blis..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} ${BLIS_FLAGS} install | tee -a ../../linbox-auto-install.log|| die #return in build cd .. cool| tee -a ../linbox-auto-install.log if [ "$BLAS_VAR" = "false" ]; then BLAS="--with-blas-libs="\""-L${PREFIX_LOC}/lib -lblis -lpthread"\" BLAS_VAR=true fi fi ########################## # install fflas-ffpack # ########################## if [ "$STABLE_VAR" = "true" ]; then cd fflas-ffpack-${STABLE_FFLAS}/ || die else cd fflas-ffpack/ || die fi if [ -f Makefile ] ; then echo -e "${BEG}cleaning Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} clean | tee -a ../../linbox-auto-install.log|| die ${MAKEPROG} distclean | tee -a ../../linbox-auto-install.log|| die # ${MAKEPROG} unistall || die cool| tee -a ../../linbox-auto-install.log fi echo -e "${BEG}configuring Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log if [ "$STABLE_VAR" = "true" ]; then echo "./configure $PREFIX $DEBUG $OPTIM $BLAS $WARNINGS"| tee -a ../../linbox-auto-install.log echo "./configure $PREFIX $DEBUG $OPTIM $BLAS $WARNINGS" > configure.fflas.exe chmod +x configure.fflas.exe ./configure.fflas.exe| tee -a ../../linbox-auto-install.log rm -rf configure.fflas.exe #./configure "$PREFIX" "$DEBUG" "$OPTIM" "$BLAS" "$WARNINGS" || die else echo "./autogen.sh $PREFIX $DEBUG $OPTIM $BLAS $WARNINGS"| tee -a ../../linbox-auto-install.log echo "./autogen.sh $PREFIX $DEBUG $OPTIM $BLAS $WARNINGS" > configure.fflas.exe chmod +x configure.fflas.exe ./configure.fflas.exe| tee -a ../../linbox-auto-install.log rm -rf configure.fflas.exe #./autogen.sh "$PREFIX" "$DEBUG" "$OPTIM" "$BLAS" "$WARNINGS" || die fi echo -e "${BEG}building Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log echo "${MAKEPROG} CXXFLAGS+=\"$EXTRA\""| tee -a ../../linbox-auto-install.log if [ -n "$EXTRA" ] ; then ${MAKEPROG} "CXXFLAGS+=\"$EXTRA\"" | tee -a ../../linbox-auto-install.log|| die else ${MAKEPROG} | tee -a ../../linbox-auto-install.log|| die fi if [ "$CHECK_VAR" = "true" ] ; then echo -e "${BEG}checking Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} check | tee -a ../../linbox-auto-install.log|| die fi echo -e "${BEG}installing Fflas-Ffpack..."| tee -a ../../linbox-auto-install.log ${MAKEPROG} install | tee -a ../../linbox-auto-install.log|| die cool| tee -a ../../linbox-auto-install.log #return in build cd .. #return in linbox cd .. ##################### # cleaning LinBox # ##################### if [ -f Makefile ] ; then echo -e "${BEG}cleaning LinBox..."| tee -a ./linbox-auto-install.log ${MAKEPROG} clean | tee -a ./linbox-auto-install.log|| die ${MAKEPROG} distclean | tee -a ./linbox-auto-install.log|| die # ${MAKEPROG} unistall || die cool| tee -a ./linbox-auto-install.log fi echo -e "${BEG}configuring LinBox..."| tee -a ./linbox-auto-install.log echo ""| tee -a ./linbox-auto-install.log echo -e "${BEG}Don't forget to run something like"| tee -a ./linbox-auto-install.log echo -e " * 'export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$PREFIX_LOC/lib'"| tee -a ./linbox-auto-install.log echo -e " * to ensure you don't get undefined symbols !"| tee -a ./linbox-auto-install.log echo ""| tee -a ./linbox-auto-install.log if [ -x autogen.sh ] ; then echo "./autogen.sh $PREFIX $DEBUG $OPTIM $GMP $BLAS $NTL $WARNINGS $IML $DRIV"| tee -a ./linbox-auto-install.log ./autogen.sh "$PREFIX" "$DEBUG" "$OPTIM" "$GMP" "$BLAS" "$NTL" "$WARNINGS" "$IML" "$DRIV" | tee -a ./linbox-auto-install.log|| die else echo "./configure $PREFIX $DEBUG $OPTIM $GMP $BLAS $NTL $WARNINGS $IML $DRIV"| tee -a ./linbox-auto-install.log # ./configure $PREFIX $DEBUG $OPTIM $GMP $BLAS $NTL $WARNINGS $IML $DRIV || die ./configure "$PREFIX" "$DEBUG" "$OPTIM" "$GMP" "$BLAS" "$NTL" "$WARNINGS" "$IML" "$DRIV" | tee -a ./linbox-auto-install.log|| die fi echo -e "${BEG}building LinBox..."| tee -a ./linbox-auto-install.log echo "${MAKEPROG} CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\""| tee -a ./linbox-auto-install.log if [ -n "$EXTRA" ] ; then ${MAKEPROG} "CXXFLAGS+=\"$EXTRA\" LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\"" | tee -a ./linbox-auto-install.log|| die else ${MAKEPROG} "LDFLAGS+=\"-Wl,-rpath,$PREFIX_LOC\""| tee -a ./linbox-auto-install.log|| die fi if [ "$CHECK_VAR" = "true" ] ; then echo -e "${BEG}checking LinBox..."| tee -a linbox-auto-install.log ${MAKEPROG} check | tee -a linbox-auto-install.log|| die fi echo -e "${BEG}installing LinBox..."| tee -a linbox-auto-install.log ${MAKEPROG} install | tee -a linbox-auto-install.log|| die cool| tee -a linbox-auto-install.log echo " " | tee -a linbox-auto-install.log echo -e "${BEG}Don't forget to run something like"| tee -a linbox-auto-install.log echo -e " * 'export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:$PREFIX_LOC/lib'"| tee -a linbox-auto-install.log echo -e " * to ensure you don't get undefined symbols !"| tee -a linbox-auto-install.log echo "" | tee -a linbox-auto-install.log echo -e " * Happy LinBoxing ! (installed in $PREFIX_LOC)"| tee -a linbox-auto-install.log echo " "| tee -a linbox-auto-install.log cool| tee -a linbox-auto-install.log linbox-1.6.3/linbox-config.in000066400000000000000000000032301347646240000161060ustar00rootroot00000000000000#! /bin/bash # Copyright (c) the LinBox group # This file is part of LinBox (and probably stolen here and there) # see COPYING for licence prefix=@prefix@ exec_prefix=@exec_prefix@ includedir=@includedir@ libdir=@libdir@ major=`echo @VERSION@ | cut -d'.' -f1` minor=`echo @VERSION@ | cut -d'.' -f2` micro=`echo @VERSION@ | cut -d'.' -f3` decvr=$((((($major*100)+$minor)*100)+$micro)) cflags=false libs=false usage() { cat <= 2.4.0, givaro >= 4.1.0 Libs: -L${libdir} -llinbox @LINBOXSAGE_LIBS@ @NTL_LIBS@ @MPFR_LIBS@ @FPLLL_LIBS@ @IML_LIBS@ @FLINT_LIBS@ @OCL_LIBS@ Cflags: @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR -I${includedir} @NTL_CFLAGS@ @MPFR_CFLAGS@ @FPLLL_CFLAGS@ @IML_CFLAGS@ @FLINT_CFLAGS@ \------------------------------------------------------- linbox-1.6.3/linbox/000077500000000000000000000000001347646240000143155ustar00rootroot00000000000000linbox-1.6.3/linbox/Makefile.am000066400000000000000000000041351347646240000163540ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # This file is part of LinBox # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== #/ AM_CPPFLAGS= -I$(top_srcdir)/linbox $(DEPS_CFLAGS) $(DEFAULT_CFLAGS) LDADD = $(DEPS_LIBS) $(LDFLAGS) #AM_CPPFLAGS = -I@includedir@ -I$(top_srcdir)/linbox -I$(top_srcdir) $(DEFCPPFLAGS) $(OPTFLAGS) $(FFLAS_FFPACK_CFLAGS) $(NTL_CFLAGS) $(MPFR_CFLAGS) $(FPLLL_CFLAGS) $(IML_CFLAGS) $(FLINT_CFLAGS) $(PARFLAGS) #LDADD = $(FFLAS_FFPACK_LIBS) $(NTL_LIBS) $(MPFR_LIBS) $(FPLLL_LIBS) $(IML_LIBS) $(FLINT_LIBS) $(OCL_LIBS) SUBDIRS=util element field randiter vector matrix blackbox algorithms solutions ring polynomial BASIC_HDRS = \ linbox-config.h \ config.h \ config-blas.h \ integer.h \ linbox-tags.h NTL_HDRS = if LINBOX_HAVE_NTL USE_NTL_HDRS = $(NTL_HDRS) endif pkginclude_HEADERS = \ $(BASIC_HDRS) \ $(USE_NTL_HDRS) EXTRA_DIST = \ $(NTL_HDRS) \ linbox.doxy \ archetypes.doxy lib_LTLIBRARIES=liblinbox.la liblinbox_la_SOURCES = dummy.C liblinbox_la_LIBADD = \ util/libutil.la \ randiter/libranditer.la \ algorithms/libalgorithms.la \ $(MPFR_LIBS) $(IML_LIBS) $(OCL_LIBS) #Cygwin ? liblinbox_la_LDFLAGS = $(DEPS_LIBS) $(LDFLAGS) -no-undefined # $(top_srcdir)/benchmarks/libbenchmarks.la \ # linbox-1.6.3/linbox/algorithms/000077500000000000000000000000001347646240000164665ustar00rootroot00000000000000linbox-1.6.3/linbox/algorithms/Makefile.am000066400000000000000000000142271347646240000205300ustar00rootroot00000000000000# Copyright (c) 2010 the LinBox group # ========LICENCE======== # This file is part of the library LinBox. # # LinBox is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA # ========LICENCE======== pkgincludesubdir=$(pkgincludedir)/algorithms SUBDIRS=gauss opencl-kernels matrix-blas3 polynomial-matrix # IML noinst_LTLIBRARIES=libalgorithms.la libalgorithms_la_SOURCES= diophantine-solver.C # AM_CPPFLAGS= $(CBLAS_FLAG) $(GMP_CFLAGS) $(NTL_CFLAGS) AM_CPPFLAGS= -I$(top_srcdir) $(DEPS_CFLAGS) $(DEFAULT_CFLAGS) LDADD = $(DEPS_LIBS) $(LDFLAGS) #AM_CXXFLAGS = @DEFAULT_CFLAGS@ -DDISABLE_COMMENTATOR $(NTL_CFLAGS) $(ATLAS_CFLAGS) $(FPLLL_CFLAGS) $(OCL_CFLAGS) $(OMPFLAGS) OCL_HDRS = \ opencl-resource-controller.h \ opencl-environ.h # if LINBOX_HAVE_OCL // we include them anyway. (for make dist when OCL not available) USE_OCL_HDRS = $(OCL_HDRS) # endif pkgincludesub_HEADERS = \ alt-blackbox-block-container.h \ bbcharpoly.h \ bitonic-sort.h \ blackbox-block-container-base.h \ blackbox-block-container.h \ blackbox-container-base.h \ blackbox-container.h \ blackbox-container-symmetric.h \ blackbox-container-symmetrize.h \ block-coppersmith-domain.h \ block-lanczos.h \ block-lanczos.inl \ block-massey-domain.h \ block-wiedemann.h \ charpoly-rational.h \ cia.h \ classic-rational-reconstruction.h \ coppersmith.h \ coppersmith-invariant-factors.h \ cra-domain.h \ cra-domain-omp.h \ cra-domain-sequential.h \ cra-builder-early-multip.h \ cra-builder-full-multip-fixed.h \ cra-builder-full-multip.h \ cra-givrnsfixed.h \ cra-kaapi.h \ cra-distributed.h \ cra-builder-single.h \ default.h \ dense-container.h \ dense-nullspace.h \ dense-nullspace.inl \ det-rational.h \ diophantine-solver.h \ diophantine-solver.inl \ double-det.h \ dyadic-to-rational.h \ eliminator.h \ eliminator.inl \ fast-rational-reconstruction.h \ frobenius-large.h \ frobenius-small.h \ gauss-gf2.h \ gauss.h \ hybrid-det.h \ invariant-factors.h \ invert-tb.h \ la-block-lanczos.h \ la-block-lanczos.inl \ lanczos.h \ lanczos.inl \ last-invariant-factor.h \ lattice.h \ lattice.inl \ lazy-product.h \ lifting-container.h \ massey-domain.h \ matpoly-mult.h \ matrix-hom.h \ matrix-inverse.h \ matrix-rank.h \ mg-block-lanczos.h \ mg-block-lanczos.inl \ minpoly-integer.h \ minpoly-rational.h \ numeric-solver-lapack.h \ one-invariant-factor.h \ poly-det.h \ poly-dixon.h \ poly-interpolation.h \ poly-smith-form.h \ poly-smith-form-local-x.h \ rational-cra-var-prec.h \ rational-cra-builder-early-multip.h \ rational-cra-builder-early-single.h \ rational-cra-builder-full-multip.h \ rational-cra.h \ rational-reconstruction2.h \ rational-reconstruction-base.h \ rational-reconstruction.h \ rational-solver2.h \ rational-solver-adaptive.h \ rational-solver.h \ rational-solver.inl \ rational-solver-sn.h \ rational-solver-sn.inl \ rns.h \ rns.inl \ short-vector.h \ sigma-basis.h \ signature.h \ smith-form-adaptive.h \ smith-form-adaptive.inl \ smith-form-binary.h \ smith-form-iliopoulos.h \ smith-form-kannan-bachem.h \ smith-form-local2.inl \ smith-form-local.h \ smith-form-valence.h \ smith-form-sparseelim-local.h \ smith-form-sparseelim-poweroftwo.h \ toeplitz-det.h \ triangular-solve-gf2.h \ triangular-solve.h \ cra-builder-var-prec-early-multip.h \ cra-builder-var-prec-early-single.h \ vector-fraction.h \ weak-popov-form.h \ whisart_trace.h \ wiedemann.h \ wiedemann.inl \ $(USE_OCL_HDRS) # iml.h \ # EXTRA_DIST = \ algorithms.doxy \ cra.doxy \ iml.doxy \ wiedemann.doxy \ lanczos.doxy \ sigmabasis.doxy \ elimination.doxy \ lattice.doxy \ diophantine.doxy \ gauss.doxy linbox-1.6.3/linbox/algorithms/algorithms.doxy000066400000000000000000000060241347646240000215460ustar00rootroot00000000000000/* * Copyright (c) LinBox * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /** \ingroup linbox * \defgroup algorithms algorithms * * \brief The core linear algebra algorithms of LinBox. * * The codes here implement algorithms for linear algebra problems. The names * often reflect the authorship of the central algorithm (Lanczos, Wiedemann, * ...). In contrast, the "drivers" in the \ref solutions directory are named * for the problem solved (rank, det, ...). Those are generally wrappers of * algorithms from this directory. Their purpose is to give a simple and * direct user interface and sometimes to provide a solution strategy which is * a hybrid of algorithms from this directory. * * %Algorithm classes and functions generally have the field class as a * template parameter. Blackbox algorithms may have a BlackboxMatrix parameter * or allow a Blackbox class as template parameter. Elimination codes work * over DenseMatrix or SparseMatrix types with varying degrees of substitution * among the types possible. * */ //@{ /// @name Blackbox Algorithms //@{ //@Include: wiedemann.h //@Include: lanczos.h //@Include: blackbox-container.h //@Include: blackbox-container-base.h //@Include: blackbox-container-symmetric.h //@Include: blackbox-container-symmetrize.h //@Include: massey-domain.h //@Include: density.h //@} /// @name Blackbox Block Algorithms //@{ //@Include: blackbox-block-container-base.h //@Include: blackbox-block-container.h //@Include: block-massey-domain.h //@Include: block-lanczos.h //@Include: dense-container.h //@Include: blas-domain.h //@} /// @name Rational Solver //@{ //@Include: rational-solver.h //@Include: diophantine-solver.h //@Include: lifting-container.h //@Include: rational-reconstruction.h //@Include: matrix-inverse.h //@Include: matrix-mod.h //@Include: matrix-rank.h //@Include: vector-fraction.h //@} /// @name Smith Normal Form //@{ //@Include: smith-form.h //@Include: iliopoulos-elimination.h //@Include: ith-invariant-factor.h //@Include: last-invariant-factor.h //@Include: local-smith.h //@Include: 2local-smith.h //@Include: bitonic-sort.h //@Include: default.h //@} //@Include: gauss.h //@Include: cra.h //@} // vim:syn=doxygen linbox-1.6.3/linbox/algorithms/alt-blackbox-block-container.h000066400000000000000000000042211347646240000242510ustar00rootroot00000000000000#ifndef __LINBOX_alt_blackbox_block_container_H #define __LINBOX_alt_blackbox_block_container_H namespace LinBox { template class AltBlackboxBlockContainer { public: typedef typename MatrixDomain::OwnMatrix Block; AltBlackboxBlockContainer () {} /* AltBlackboxBlockContainer(const Blackbox *M, const Field &F, const Block &V) : U_(F,V.coldim(),M->rowdim()), V_(V), M_(M), F_(F), b_(V.coldim()) { } */ AltBlackboxBlockContainer(const Blackbox *M, const Field &F, const Block &U, const Block &V) : b_(V.coldim()), F_(&F), U_(U), V_(V), LastOdd_(F,V.rowdim(),V.coldim()), LastEven_(F,V.rowdim(),V.coldim()), val_(F,V.coldim(),V.coldim()), M_(M), MD_(F) {} class const_iterator { protected: AltBlackboxBlockContainer &c_; public: const_iterator () {} const_iterator(AltBlackboxBlockContainer &c) : c_(c) {} const_iterator& operator++() {c_.incr(); return *this;} const Value& operator*() {return c_.getValue();} }; const_iterator begin() { LastOdd_=V_; LastEven_=V_; isOdd_=true; return const_iterator(*this); } void incr() { Block result(*(const_cast(F_)),b_,b_); if (isOdd_) { M_->applyLeft(LastEven_,LastOdd_); MD_.mul(result,U_,LastEven_); } else { M_->applyLeft(LastOdd_,LastEven_); MD_.mul(result,U_,LastOdd_); } isOdd_=!isOdd_; for (size_t i=0;i MD_; }; } #endif // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/bbcharpoly.h000066400000000000000000000453751347646240000210020ustar00rootroot00000000000000/* linbox/algorithms/bbchapoly.h * Copyright(C) LinBox * Written * by Clement Pernet * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== *. */ /*! @file algorithms/bbcharpoly.h * @ingroup algorithms * @brief no doc. * */ #ifndef __LINBOX_bbcharpoly_H #define __LINBOX_bbcharpoly_H #define _LB_MAXITER 5 #include #include "linbox/blackbox/scalar-matrix.h" #include "linbox/blackbox/sum.h" #include "linbox/ring/modular.h" #include "linbox/ring/polynomial-ring.h" #include "linbox/field/field-traits.h" #include "linbox/solutions/det.h" #include "linbox/solutions/rank.h" #include "linbox/solutions/minpoly.h" #include "linbox/randiter/random-prime.h" #include "linbox/algorithms/matrix-hom.h" #include "linbox/polynomial/dense-polynomial.h" #include "linbox/blackbox/polynomial.h" #include #include namespace LinBox { /*! @internal * @ingroup charpoly * @brief BlackBox Characteristic Polynomial * @details NO DOC * @warning rebind comes from Givaro ! */ class BBcharpoly { template class FactorMult ; /*! @brief No doc */ template class FactorMult { public: FactorMult() : fieldP(NULL),intP(NULL) ,multiplicity(0),dep(NULL) {} FactorMult( FieldPoly* FP, IntPoly* IP, size_t m, FactorMult*d) : fieldP(FP), intP(IP), multiplicity(m), dep(d) {} FactorMult (const FactorMult& FM) : fieldP(FM.fieldP), intP(FM.intP), multiplicity(FM.multiplicity), dep(FM.dep) {} int update (const size_t n, int * goal) { if (dep->dep != NULL){ FactorMult*curr = dep; int k = dep->update (n,goal)+1; int d = ((int)dep->fieldP->size()-1)/k; int tmp = (int)(n-dep->multiplicity) / d; int i = k-1; while (curr->dep!=NULL){ curr = curr->dep; tmp-=i*(int)curr->multiplicity; --i; } tmp = tmp/k + (int)(multiplicity - dep->multiplicity) / d; dep->multiplicity =(size_t) tmp ; //std::cerr<<"Updating "<<*dep->fieldP<<" --> mul = "<fieldP->size()-1); return k; } else{ int tmp = (int)((n - 2 * dep->multiplicity + multiplicity) / (dep->fieldP->size()-1)); *goal -= tmp * ((int)dep->fieldP->size()-1); //std::cerr<<"Updating (leaf)"<<*dep->fieldP<<" --> mul = "<multiplicity = (size_t)tmp; return 1; } } FieldPoly *fieldP; IntPoly *intP; size_t multiplicity; FactorMult *dep; std::ostream& write(std::ostream& os) { return os<<" FieldPoly(" << fieldP << ") --> "<< *fieldP <<" IntPoly(" << intP << ") --> "<< *intP <<" multiplicity --> "< "<< dep< static Polynomial& blackboxcharpoly (Polynomial & P, const BlackBox & A, const Categorytag & tag, const Method::Blackbox & M); /** Algorithm computing the integer characteristic polynomial * of a blackbox. */ template < class BlackBox, class Polynomial > static Polynomial& blackboxcharpoly (Polynomial& P, const BlackBox & A, const RingCategories::IntegerTag & tag, const Method::Blackbox & M) { commentator().start ("Integer BlackBox Charpoly ", "IbbCharpoly"); typename BlackBox::Field intRing = A.field(); typedef Givaro::Modular Field; typedef typename BlackBox::template rebind::other FieldBlackBox; typedef PolynomialRing IntPolyDom; typedef typename IntPolyDom::Element IntPoly; typedef typename PolynomialRing::Element FieldPoly; // Set of factors-multiplicities sorted by degree typedef FactorMult FM; typedef std::multimap FactPoly; typedef typename FactPoly::iterator FactPolyIterator; std::multimap leadingBlocks; //typename std::multimap::iterator lead_it; FactPoly factCharPoly; size_t n = A.coldim(); IntPolyDom IPD(intRing); /* Computation of the integer minimal polynomial */ Polynomial intMinPoly(A.field()); minpoly (intMinPoly, A, M); if (intMinPoly.size() == n+1){ commentator().stop ("done", NULL, "IbbCharpoly"); return P = intMinPoly; } /* Factorization over the integers */ std::vector intFactors; std::vector exp; IPD.factor (intFactors, exp, intMinPoly); size_t factnum = intFactors.size(); /* Choose a modular prime field */ PrimeIterator primeg (FieldTraits::bestBitSize(n)); Field F(*primeg); ++primeg; /* Building the structure of factors */ int goal =(int) n; for (size_t i = 0; i < intFactors.size(); ++i) { uint64_t deg = (intFactors[i].size()-1); FactorMult* FFM=NULL; if (exp[i] > 1) { IntPoly *tmp = new IntPoly(intFactors[i]); FM* depend = NULL; for (size_t j = 1; j <= exp[i]; ++j){ IntPoly * tmp2 = new IntPoly(*tmp); // FieldPoly *tmp2p = new FieldPoly(tmp2->size()); // typename IntPoly::template rebind() (*tmp2p, *tmp2, F); FieldPoly *tmp2p = new FieldPoly(*tmp2, F); FFM = new FM (tmp2p, tmp2, 0, depend); factCharPoly.insert (std::pair (deg, FFM)); ++factnum; depend = FFM; deg += intFactors[i].size()-1; if (j < exp[i]) IPD.mul (*tmp, *tmp2, intFactors[i]); } delete tmp; --factnum; FFM->multiplicity = 1; // The last factor is present in minpoly goal -= (int)deg-(int)intFactors[i].size()+1; leadingBlocks.insert (std::pair(FFM,false)); } else { // FieldPoly* fp=new FieldPoly(intFactors[i].size()); // typename IntPoly::template rebind() (*fp, (intFactors[i]), F); FieldPoly* fp=new FieldPoly(intFactors[i], F); FFM = new FM (fp,&intFactors[i],1,NULL); factCharPoly.insert (std::pair (intFactors[i].size()-1, FFM)); leadingBlocks.insert (std::pair(FFM,false)); goal -= (int)deg; } } // CP: const_cast is here only to please clang who would otherwise fail to compile // claiming (mistakingly) that there is an ambiguous specialization FieldBlackBox Ap(A, const_cast(F)); findMultiplicities (Ap, factCharPoly, leadingBlocks, goal, M); // Building the integer charpoly IntPoly intCharPoly (n+1); IntPoly tmpP; intRing.assign(intCharPoly[0], intRing.one); for (FactPolyIterator it_f = factCharPoly.begin(); it_f != factCharPoly.end(); ++it_f){ // it_f->second->write(std::clog) << std::endl; IPD.pow (tmpP, *it_f->second->intP, (long) it_f->second->multiplicity); IPD.mulin (intCharPoly, tmpP); delete it_f->second->intP; delete it_f->second->fieldP; delete it_f->second; } commentator().stop ("done", NULL, "IbbCharpoly"); return P = Polynomial(A.field(), intCharPoly); } /** Algorithm computing the characteristic polynomial * of a blackbox over a prime field. */ template < class BlackBox, class Polynomial > static Polynomial& blackboxcharpoly (Polynomial & P, const BlackBox & A, const RingCategories::ModularTag & tag, const Method::Blackbox & M) { commentator().start ("Givaro::Modular BlackBox Charpoly ", "MbbCharpoly"); typedef typename BlackBox::Field Field; typedef PolynomialRing PolyDom; // Set of factors-multiplicities sorted by degree typedef std::multimap* > FactPoly; typedef typename FactPoly::iterator FactPolyIterator; std::multimap*,bool> leadingBlocks; //typename std::multimap*,bool>::iterator lead_it; Field F = A.field(); PolyDom PD (F); FactPoly factCharPoly; const size_t n = A.coldim(); /* Computation of the minimal polynomial */ Polynomial minPoly(F); minpoly (minPoly, A, M); // PD.write(std::cerr<<"Minpoly = ",minPoly) << std::endl; if (minPoly.size() == n+1){ commentator().stop ("done", NULL, "MbbCharpoly"); return P = minPoly; } Polynomial charPoly (F); /* Factorization over the field */ std::vector factors; std::vector exp; PD.factor (factors, exp, minPoly); size_t factnum = factors.size(); // std::cerr<<"factnum = "<* FFM=NULL; if (exp[i] > 1) { Polynomial* tmp = new Polynomial(factors[i]); FactorMult* depend = NULL; for (size_t j = 1; j <= exp[i]; ++j){ // tmp2 is deleted after charPoly construction Polynomial* tmp2 = new Polynomial(*tmp); FFM = new FactorMult (tmp2, tmp2, 0, depend); // std::cerr<<"Inserting new factor (exp>1): "<<(*tmp2)<* > (deg, FFM)); ++factnum; depend = FFM; deg += factors[i].size()-1; if (j < exp[i]) PD.mul (*tmp, *tmp2, factors[i]); } delete tmp; --factnum; FFM->multiplicity = 1; // The last factor is present in minpoly goal -= (int)(deg-factors[i].size())+1; leadingBlocks.insert (std::pair*,bool>(FFM,false)); } else { // tmp2 is deleted after charPoly construction Polynomial* tmp2 = new Polynomial(factors[i]); FFM = new FactorMult (tmp2,tmp2,1U,NULL); //std::cerr<<"Inserting new factor : "<<*factors[i]<* > (factors[i].size()-1, FFM)); leadingBlocks.insert (std::pair*,bool>(FFM,false)); goal -= (int)deg; } } findMultiplicities ( A, factCharPoly, leadingBlocks, goal, M); // Building the product Polynomial tmpP(F); PD.assign(charPoly, PD.one); for (FactPolyIterator it_f = factCharPoly.begin(); it_f != factCharPoly.end(); ++it_f){ PD.pow (tmpP, *it_f->second->fieldP,(long) it_f->second->multiplicity); PD.mulin (charPoly, tmpP); delete it_f->second->fieldP; delete it_f->second; } commentator().stop ("done", NULL, "MbbCharpoly"); return P = charPoly; } template < class FieldPoly,class IntPoly> static void trials( std::list > >& sols, const int goal, std::vector >& ufv, const int i0 ) { if ( !goal ){ sols.push_back( ufv); } else if ( goal > 0 ){ for (size_t i=(size_t)i0; isize()+1, ufv, (int)i ); ufv[i].multiplicity--; } } } template static void findMultiplicities( const BlackBox& A, std::multimap* >& factCharPoly, std::multimap*,bool>& leadingBlocks, int goal, const Method::Blackbox &M) { typedef std::multimap* > FactPoly; typedef typename BlackBox::Field Field; typedef PolynomialRing PolyDom; typename FactPoly::iterator itf = factCharPoly.begin(); typename std::multimap*,bool>::iterator lead_it; Field F = A.field(); PolyDom PD(F); size_t factnum = factCharPoly.size(); size_t n = A.coldim(); /* Rank for the linear factors */ while ( ( factnum > 1 ) && ( itf->first == 1) ){ lead_it = leadingBlocks.find(itf->second); if ( lead_it != leadingBlocks.end()) lead_it->second = true; size_t r; /* The matrix Pi (A) */ if (F.isZero (itf->second->fieldP->operator[](0))){ rank (r, A, M) ; } else { PolynomialBB PA (A, *itf->second->fieldP); rank (r, PA, M) ; } itf->second->multiplicity =(size_t) r; //std::cerr<<"Rank 1 : "<<*itf->second->fieldP<<" --> "< maxIter ){ lead_it = leadingBlocks.find (itf->second); if ( lead_it != leadingBlocks.end()) lead_it->second = true; PolynomialBB PA (A, *itf->second->fieldP); size_t r; rank (r, PA, M); itf->second->multiplicity =(size_t)r; //std::cerr<<"Rank > 1 : "<<*itf->second->intP<<" --> "<* currFFM = lead_it->first; //std::cerr<<"Updating multiplicities of "<<*lead_it->first->fieldP<second){ // the leading block has not been computed // go to the last computed multiplicity of the sequence while (currFFM->dep!=NULL){ if (currFFM->dep->multiplicity != 0) break; currFFM = currFFM->dep; } if (currFFM->dep != NULL){ // Need one more computation: PolynomialBB PA (A, *currFFM->fieldP); size_t r; rank (r, PA, M) ; //std::cerr<<"extra factor : "<<*currFFM->fieldP<<" --> "<multiplicity; currFFM->multiplicity =(size_t) r; currFFM->update (n,&goal); currFFM->multiplicity = (size_t)tmp; } } else { int lbm; if (currFFM->dep != NULL){ int k = currFFM->update (n,&goal)+1; int d = (int)(lead_it->first->fieldP->size()-1) / k; lbm = (int)(n-lead_it->first->multiplicity) / d; currFFM = currFFM->dep; do{ lbm -= (int)(currFFM->multiplicity * (currFFM->fieldP->size()-1)); currFFM = currFFM->dep; } while (currFFM!=NULL); lbm /= k; goal -= (lbm-1)*((int)lead_it->first->fieldP->size()-1); } else { lbm = (int)((int)(n-lead_it->first->multiplicity) / ((int)(lead_it->first->fieldP->size())-1)); goal -= (lbm-1)*((int)lead_it->first->fieldP->size()-1); } lead_it->first->multiplicity = (size_t)lbm; } } // Recursive search typename FactPoly::iterator firstUnknowFactor = itf; if ( factnum <= _LB_MAXITER ){ std::vector > unknownFact (factnum); for (size_t i = 0; i < factnum; ++i, ++itf){ unknownFact[i] = *itf->second; } std::list > > sols; trials (sols, goal,unknownFact, 0); typename std::list > >::iterator uf_it = sols.begin(); if (sols.size()>1){ // Evaluation of P in random gamma typename Field::Element d, gamma, mgamma, d2; typename Field::RandIter g(F); do g.random(gamma); while (F.isZero(gamma)); //Building the matrix A + gamma.Id mod p F.neg( mgamma, gamma ); ScalarMatrix gammaId( F, n, n, gamma ); Sum > Agamma(A, gammaId); // Compute det (A+gamma.Id) det (d, Agamma, M); if (A.rowdim()%2) F.negin(d); // Compute Prod(Pi(-gamma)^mi) typename Field::Element tmp, e; F.assign(d2,F.one); typename FactPoly::iterator it_f=factCharPoly.begin(); PolyDom PD_f (F); for (size_t i = 0; i < factCharPoly.size()-factnum; ++i, ++it_f){ PD_f.eval (tmp, *it_f->second->fieldP, mgamma); for (size_t j=0; j < it_f->second->multiplicity; ++j) F.mulin (d2, tmp); } while ( uf_it != sols.end() ){ F.assign (e,F.one); for (size_t i = 0; i < uf_it->size(); ++i){ PD_f.eval( tmp, *(*uf_it)[i].fieldP, mgamma ); for (size_t j=0; j < (*uf_it)[i].multiplicity; ++j) F.mulin( e, tmp ); } F.mulin( e, d2); if (F.areEqual(e,d)) break; ++uf_it; } if (uf_it == sols.end()) std::cerr<<"FAIL:: No solutions found in recursive seach"< >::iterator it_fm = (*uf_it).begin(); for (; it_f != factCharPoly.end(); ++it_f, ++it_fm) it_f->second->multiplicity = it_fm->multiplicity; } } }; } #undef _LB_MAXITER #endif // __BBCHARPOLY_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/bitonic-sort.h000066400000000000000000000051161347646240000212560ustar00rootroot00000000000000/* Copyright (C) LinBox * Written by Zhendong Wan * * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_bitonic_sort_H #define __LINBOX_bitonic_sort_H /*! @file algorithms/bitonic-sort.h * Implement bitonic sorting network */ #include namespace LinBox { /* end - begin must be a power of 2*/ template void bitonicSort(Iterator begin, Iterator end, const Comparator& comparator = Comparator()); /* end - begin must be a power of 2*/ template void bitonicMerge(Iterator begin, Iterator end, const Comparator& comparator = Comparator()); /// template void bitonicSort(Iterator begin, Iterator end, const Comparator& comparator) { if (end - begin >= 2) { Iterator mid = begin + (end - begin) / 2; // Sort the first half bitonicSort(begin, mid, comparator); // Sort the second half bitonicSort(mid, end, comparator); // reverse the order of second half std::reverse(mid, end); // Bitonic merge two halves bitonicMerge(begin, end, comparator); } } template void bitonicMerge(Iterator begin, Iterator end, const Comparator& comparator) { if (end - begin >= 2) { Iterator mid = begin + (end - begin) / 2; Iterator p1 = begin; Iterator p2 = mid; // Compare network for (p1 = begin, p2 = mid; p2 != end; ++ p1, ++ p2) comparator(*p1, *p2); // Bitonic Merge first half bitonicMerge(begin, mid, comparator); // Bitonic Merge second half bitonicMerge(mid, end, comparator); } } } #endif //__LINBOX_bitonic_sort_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-block-container-base.h000066400000000000000000000200051347646240000244010ustar00rootroot00000000000000/* linbox/algorithms/blackbox-block-container-base.h * Copyright (C) 2002 Pascal Giorgi * * Written by Pascal Giorgi pascal.giorgi@ens-lyon.fr * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file algorithms/blackbox-block-container-base.h * @ingroup algorithms * @brief NO DOC */ #ifndef __LINBOX_blackbox_block_container_base_H #define __LINBOX_blackbox_block_container_base_H #include // for seeding #include #ifdef _OPENMP #include #endif #include "linbox/linbox-config.h" #include "linbox/util/debug.h" #include "linbox/blackbox/archetype.h" #include "linbox/blackbox/blockbb.h" #include "linbox/matrix/sparse-matrix.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/vector/vector-domain.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/matrix-domain.h" #define __BW_EXTRA_STEPS 10 namespace LinBox { //Temporary fix to deal with the fact that not all Blackboxes have applyLeft() template class MulHelper { public: template static typename std::enable_if::value>::type mul(Block &M1, const Blackbox &M2, const Block& M3) { M2.applyLeft(M1, M3); } template static typename std::enable_if::value>::type mul(Block &M1, const Blackbox &M2, const Block& M3) { linbox_check( M1.rowdim() == M2.rowdim()); linbox_check( M2.coldim() == M3.rowdim()); linbox_check( M1.coldim() == M3.coldim()); typename Block::ColIterator p1 = M1.colBegin(); typename Block::ConstColIterator p3 = M3.colBegin(); for (; p3 != M3.colEnd(); ++p1,++p3) { M2.apply(*p1,*p3); } } }; #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif /** \brief A base class for BlackboxBlockContainer. * The primary member function is \c begin(). * It returns an iterator which after i increments (++) dereferences to * \f$U A^i V\f$, for \f$U\f$ and \f$V\f$ determined by the init * function. It is designed to be used with implementations of Block * Berlekamp-Massey such as BlockMasseyDomain. * * Subclasses complete the implementation by defining \c _launch() and * \c _wait(). */ template> class BlackboxBlockContainerBase { public: typedef _Field Field; typedef typename Field::Element Element; typedef _Blackbox Blackbox; typedef BlasMatrix Block; typedef BlasMatrix Value; // Sequence constructor from a blackbox and a field // cs set the size of the sequence BlackboxBlockContainerBase (const Blackbox *BD, const Field &F, size_t m, size_t n, size_t seed=(size_t)time(NULL)) : _field(&F) , _BB(BD), _size(std::max(BD->rowdim()/m,size_t(1)) + std::max(BD->coldim()/n,size_t(1)) +__BW_EXTRA_STEPS) , _nn(BD->rowdim()), _m(m), _n(n) ,casenumber(0) ,_blockU(F,_m,_nn),_blockV(F,_nn,_n),_value(field(),m,n), _seed(seed) {} // Default constructors //BlackboxBlockContainerBase () {} virtual ~BlackboxBlockContainerBase(){} // iterator of the sequence class const_iterator { protected: BlackboxBlockContainerBase &_c; public: const_iterator () {} const_iterator (BlackboxBlockContainerBase &C) : _c (C) {} const_iterator &operator ++ () { _c._launch (); return *this; } const Value &operator * () { _c._wait (); return _c.getvalue();} }; // begin of the sequence iterator const_iterator begin () { return const_iterator (*this); } // end of the sequence iterator const_iterator end () { return const_iterator (); } // size of the sequence size_t size() const { return _size; } // field of the sequence const Field &field () const { return *_field; } const Field &getField () const { return *_field; } // deprecated // blackbox of the sequence const Blackbox* getBB() const { return _BB; } // row dimension of the sequence element size_t rowdim() const { return _m; } // column dimension of the sequence element size_t coldim() const { return _n; } protected: friend class const_iterator; /** Launches a process to do the computation of the next sequence * value: \f$U A^{i+1} V\f$. ...or just does it. */ virtual void _launch() = 0; /** If a separate process is computing the next value of \f$U * A^{i+1} V\f$, \c _wait() blocks until the value is ready. */ virtual void _wait() = 0; //-------------- /// Members //-------------- const Field *_field; const Blackbox *_BB; size_t _size; // length of sequence size_t _nn; // _BB order (square mat) size_t _m; // block rows size_t _n; // block cols // BDS 22.03.03 long casenumber; Block _blockU; Block _blockV; Value _value; size_t _seed; const Value &getvalue() {return _value;} //-------------- /// Initializers //-------------- // Blackbox multiplication using apply function inline void Mul(Block &M1, const Blackbox &M2, const Block& M3) { MulHelper::mul(M1,M2,M3); } /// User Left and Right blocks void init (const Block& U, const Block& V) { linbox_check ( U.rowdim() == _m); linbox_check ( U.coldim() == _nn); linbox_check ( V.rowdim() == _nn); linbox_check ( V.coldim() == _n); casenumber = 1; _blockU = U; _blockV = V; _value = Value(*_field,_m,_n); _MatrixDomain BMD(*_field); BMD.mul(_value, _blockU, _blockV); } // Random Left Matrix and Right Matrix void init (size_t m, size_t n) { casenumber = 1; typename Field::RandIter G(*_field,0,_seed); Block U (m, _BB->rowdim()); _blockU =U; Block V(_BB->coldim(), n); _blockV =V; typename Block::Iterator iter_U = _blockU.Begin(); for (; iter_U != _blockU.End();++iter_U) G.random(*iter_U); typename Block::Iterator iter_V = _blockV.Begin(); for (; iter_V != _blockV.End();++iter_V) G.random(*iter_V); _value = Value(*_field,m,n); _MatrixDomain BMD(*_field); BMD.mul(_value, _blockU, _blockV); } }; } #endif // __LINBOX_blackbox_block_container_base_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-block-container.h000066400000000000000000000334501347646240000235010ustar00rootroot00000000000000/* linbox/algorithms/blackbox-block-container.h * Copyright (C) 2002 Pascal Giorgi * * Written by Pascal Giorgi pascal.giorgi@ens-lyon.fr * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file algorithms/blackbox-block-container.h * @ingroup algorithms * @brief no doc. */ #ifndef __LINBOX_blackbox_block_container_H #define __LINBOX_blackbox_block_container_H #include "linbox/linbox-config.h" #include "linbox/util/debug.h" #include "linbox/algorithms/blackbox-block-container-base.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #define _BBC_TIMING #ifdef _BBC_TIMING #include #include "linbox/util/timer.h" #endif namespace LinBox { // For non-block blackbox's use blockbb to convert to a block blackbox template> class BlackboxBlockContainer : public BlackboxBlockContainerBase<_Field,_Blackbox,_MatrixDomain> { public: typedef _Field Field; typedef typename Field::Element Element; typedef typename Field::RandIter RandIter; typedef BlasMatrix Block; typedef BlasMatrix Value; // Default constructor BlackboxBlockContainer () {} // constructor of the sequence from a blackbox, a field and one block projection BlackboxBlockContainer(const _Blackbox *D, const Field &F, const Block &U0) : BlackboxBlockContainerBase (D, F, U0.rowdim(), U0.coldim()) , _blockW(D->rowdim(), U0.coldim()), _BMD(F) { #ifdef _BBC_TIMING clearTimer(); tSequence.clear(); tSequence.start(); #endif this->init (U0, U0); #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } // constructor of the sequence from a blackbox, a field and two blocks projection BlackboxBlockContainer(const _Blackbox *D, const Field &F, const Block &U0, const Block& V0) : BlackboxBlockContainerBase (D, F,U0.rowdim(), V0.coldim()) , _blockW(F,D->rowdim(), V0.coldim()), _BMD(F) { #ifdef _BBC_TIMING clearTimer(); tSequence.clear(); tSequence.start(); #endif this->init (U0, V0); #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } // constructor of the sequence from a blackbox, a field and two blocks random projection BlackboxBlockContainer(const _Blackbox *D, const Field &F, size_t m, size_t n, size_t seed= (size_t)time(NULL)) : BlackboxBlockContainerBase (D, F, m, n,seed) , _blockW(F,D->rowdim(), n), _BMD(F) { #ifdef _BBC_TIMING clearTimer(); tSequence.clear(); tSequence.start(); #endif this->init (m, n); #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } #ifdef _BBC_TIMING void clearTimer() { ttSequence.clear(); } void printTimer() { std::cout<<"Sequence Computation "<casenumber) { this->Mul(_blockW,*this->_BB,this->_blockV); _BMD.mul(this->_value, this->_blockU, _blockW); this->casenumber = 0; } else { this->Mul(this->_blockV,*this->_BB,_blockW); _BMD.mul(this->_value, this->_blockU, this->_blockV); this->casenumber = 1; } #ifdef _BBC_TIMING tSequence.stop(); ttSequence +=tSequence; #endif } void _wait () {} }; /*! @brief no doc. */ template> class BlackboxBlockContainerRecord : public BlackboxBlockContainerBase<_Field,_Blackbox,_MatrixDomain> { public: typedef _Field Field; typedef typename Field::Element Element; typedef typename Field::RandIter RandIter; typedef BlasMatrix Block; typedef BlasMatrix Value; enum Launcher {RowUpdate=0, ColUpdate=1, Nothing=2}; // Default constructor BlackboxBlockContainerRecord () {} // constructor of the sequence from a blackbox, a field and one block projection BlackboxBlockContainerRecord(const _Blackbox *D, const Field &F, const Block &U0) : BlackboxBlockContainerBase (D, F, U0.rowdim(), U0.coldim()) , _blockW(F, D->rowdim(), U0.coldim()), _BMD(F), _launcher(Nothing), _iter(1) { this->init (U0, U0); _rep = std::vector (this->_size, Value(F)); _Vcopy = this->_blockV; for (size_t i=0;i< this->_size;++i){ _rep[i] = this->_value; _launch_record(); } this->_value=_rep[0]; } // constructor of the sequence from a blackbox, a field and two blocks projection BlackboxBlockContainerRecord(const _Blackbox *D, const Field &F, const Block &U0, const Block& V0, bool denseblock= true) : BlackboxBlockContainerBase (D, F,U0.rowdim(), V0.coldim()) , _blockW(F,D->rowdim(), V0.coldim()), _BMD(F), _launcher(Nothing), _iter(1) { #ifdef _BBC_TIMING clearTimer(); tSequence.clear(); tSequence.start(); #endif this->init (U0, V0); _rep = std::vector (this->_size, Value(F)); _Vcopy = this->_blockV; if (denseblock) { for (size_t i=0;i< this->_size;++i){ _rep[i] = this->_value; _launch_record(); } } else { _rep.resize(_rep.size()-3); size_t block= U0.rowdim(); size_t Nn = U0.coldim()/block; _Special_U.resize(block, std::vector(Nn)); for (size_t i=0;i_size-3;++i){ _launch_record_notdense(); _rep[i] = this->_value; } } this->_value=_rep[0]; #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } // constructor of the sequence from a blackbox, a field and two blocks random projection BlackboxBlockContainerRecord(const _Blackbox *D, const Field &F, size_t m, size_t n, size_t seed= (size_t)time(NULL)) : BlackboxBlockContainerBase (D, F, m, n,seed), _blockW(D->rowdim(), n), _BMD(F), _launcher(Nothing), _iter(1) { #ifdef _BBC_TIMING clearTimer(); tSequence.clear(); tSequence.start(); #endif this->init (m,n); _rep = std::vector (this->_size); _Vcopy = this->_blockV; for (size_t i=0;i< this->_size;++i){ _rep[i] = this->_value; _launch_record(); } this->_value=_rep[0]; #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } void setU (const std::vector &b, size_t k) { linbox_check( b.size() == this->_row); _launcher = RowUpdate; _upd_idx = k; _u = b; _w.resize(this->_row); _iter = 1; _case = 1; #ifdef _BBC_TIMING tSequence.clear(); tSequence.start(); #endif std::vector _row_value(this->_n); _BMD.mul(_row_value, b, _Vcopy); this->_value = _rep[0]; for (size_t j=0; j< this->_n; ++j) this->_value.setEntry(_upd_idx, j, _row_value[j]); #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } void setV (const std::vector &b, size_t k) { linbox_check( b.size() == this->_col); _launcher = ColUpdate; _upd_idx = k; _u = b; _w.resize(this->_col); _iter = 1; _case = 1; #ifdef _BBC_TIMING tSequence.clear(); tSequence.start(); #endif std::vector _col_value(this->_m); _BMD.mul(_col_value, this->_blockU, b); this->_value = _rep[0]; for (size_t j=0; j< this->_m; ++j) this->_value.setEntry(j, _upd_idx, _col_value[j]); #ifdef __BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif } void recompute() { switch(_launcher) { case Nothing: this->_value=_rep[0]; _iter=1; break; case RowUpdate: #ifdef _BBC_TIMING tSequence.clear(); tSequence.start(); #endif for (size_t i=0;i< this->_size;++i){ _rep[i]=this->_value; _launch_record_row(); } _launcher=Nothing; this->_value=_rep[0]; _iter=1; #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif break; case ColUpdate: #ifdef _BBC_TIMING tSequence.clear(); tSequence.start(); #endif for (size_t i=0;i< this->_size;++i){ _rep[i]=this->_value; _launch_record_col(); } _launcher=Nothing; this->_value=_rep[0]; _iter=1; break; #ifdef _BBC_TIMING tSequence.stop(); ttSequence += tSequence; #endif default : throw LinboxError ("Bad argument in BlackboxBlockContainerRecord, _launch() function\n"); break; } } #ifdef _BBC_TIMING void clearTimer() { ttSequence.clear(); } void printTimer() { std::cout<<"Sequence Computation "<& getRep() const { return _rep;} protected: Block _blockW; Block _Vcopy; _MatrixDomain _BMD; std::vector _rep; size_t _upd_idx; std::vector _u; std::vector _w; Launcher _launcher; size_t _iter; size_t _case; std::vector > _Special_U; #ifdef _BBC_TIMING Timer ttSequence, tSequence; #endif // launcher of computation of sequence element void _launch_record () { if (this->casenumber) { Mul(_blockW,*this->_BB,this->_blockV); _BMD.mul(this->_value, this->_blockU, _blockW); this->casenumber = 0; } else { Mul(this->_blockV,*this->_BB,_blockW); _BMD.mul(this->_value, this->_blockU, this->_blockV); this->casenumber = 1; } } // launcher of computation of sequence element void _launch_record_notdense () { size_t block= this->_blockV.coldim(); size_t numblock=_Special_U[0].size(); if (this->casenumber) { Mul(_blockW,*this->_BB,this->_blockV); std::vector tmp(block); for (size_t i=0; i T(_blockW, i*numblock, 0, numblock, block); _BMD.mul(tmp, _Special_U[i], T); for (size_t j=0;jgetField()->assign(this->_value.refEntry(i,j), tmp[j]); } } this->casenumber = 0; } else { Mul(this->_blockV,*this->_BB,_blockW); std::vector tmp(block); for (size_t i=0; i< block; ++i){ BlasMatrix T(this->_blockV, i*numblock, 0, numblock, block); _BMD.mul(tmp, _Special_U[i], T); for (size_t j=0;jgetField().assign(this->_value.refEntry(i,j), tmp[j]); } this->casenumber = 1; } } // launcher of computation of sequence element // just update one row in the sequence element void _launch_record_row() { if ( _iter < this->_size) { if ( _case == 1) { this->_BB->applyTranspose(_w,_u); std::vector _row_value(this->_n); _BMD.mul(_row_value, _w, _Vcopy); this->_value = _rep[_iter]; for (size_t j=0; j< this->_n; ++j) this->_value.setEntry(_upd_idx, j, _row_value[j]); ++_iter; _case =0; } else { this->_BB->applyTranspose(_u,_w); std::vector _row_value(this->_n); _BMD.mul(_row_value, _u, _Vcopy); this->_value = _rep[_iter]; for (size_t j=0; j< this->_n; ++j) this->_value.setEntry(_upd_idx, j, _row_value[j]); ++_iter; _case =1; } } } // launcher of computation of sequence element // just update one col in the sequence element void _launch_record_col() { if ( _iter < this->_size) { if ( _case == 1) { this->_BB->apply(_w,_u); std::vector _col_value(this->_m); _BMD.mul(_col_value, this->_blockU, _w); this->_value = _rep[_iter]; for (size_t j=0; j< this->_m; ++j) this->_value.setEntry(j, _upd_idx, _col_value[j]); ++_iter; _case =0; } else { this->_BB->apply(_u,_w); std::vector _col_value(this->_m); _BMD.mul(_col_value, this->_blockU, _u); this->_value = _rep[_iter]; for (size_t j=0; j< this->_m; ++j) this->_value.setEntry(j, _upd_idx, _col_value[j]); ++_iter; _case =1; } } } // launcher which be used as iterator on the sequence void _launch() { switch (_launcher) { case Nothing: if (_iter < this->_size) this->_value = _rep[_iter]; ++_iter; break; case RowUpdate: _launch_record_row(); break; case ColUpdate: _launch_record_col(); break; default : throw LinboxError ("Bad argument in BlackboxBlockContainerRecord, _launch() function\n"); break; } } void _wait () {} }; } #undef _BBC_TIMING #endif // __LINBOX_blackbox_block_container_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-container-base.h000066400000000000000000000122271347646240000233200ustar00rootroot00000000000000/* linbox/algorithms/blackbox-container.h * Copyright (C) 1999, 2001 Jean-Guillaume Dumas * * Written by Jean-Guillaume Dumas * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_blackbox_container_base_H #define __LINBOX_blackbox_container_base_H // ================================================================ // Base ForwardIterator wrapper for BlackBoxes // Have to be provided : // - launch : launches the following computation // - wait : waits for the end of the current computation // ================================================================ #include "linbox/vector/vector-domain.h" namespace LinBox { #ifndef MIN # define MIN(a,b) ((a)<(b)?(a):(b)) #endif /** \brief A base class for BlackboxContainer. * The primary member function is begin(). * It returns an iterator which after i increments (++) dereferences to * $v^T A^i u$, for $v$ and $u$ determined by the form of construction. * It is designed to be used with implementations of Berlekamp-Massey * such as MasseyDom. * * Subclasses complete the implementation by defining _launch() and _wait(). */ template class BlackboxContainerBase { public: typedef typename Field::Element Element; //-- Constructors //! @bug no need for F BlackboxContainerBase (const Blackbox *BB, const Field &F) : _field (&F), _VD (F), _BB (BB), _size ((long)MIN (BB->rowdim (), BB->coldim ())) ,casenumber(0) ,u(F),v(F) { _size <<= 1; } // Pascal Giorgi 16.02.2004 //! @bug no need for F BlackboxContainerBase (const Blackbox *BB, const Field &F, size_t Size) : _field (&F), _VD (F), _BB (BB), _size ((long)Size) ,casenumber(0) ,u(F),v(F) {} virtual ~BlackboxContainerBase () { //delete _BB; } class const_iterator { BlackboxContainerBase *_c; public: const_iterator () : _c(0){} // BB ?? const_iterator (BlackboxContainerBase &C) : _c (&C) {} const_iterator &operator ++ () { _c->_launch (); return *this; } const Element &operator * () { _c->_wait (); return _c->getvalue (); } }; const_iterator begin () { return const_iterator (*this); } const_iterator end () { return const_iterator (); } long size () const { return _size; } const Field &getField () const { return *_field; } // deprecated const Field &field () const { return *_field; } Blackbox *getBB () const { return _BB; } protected: friend class const_iterator; /** Launches a process to do the computation of the next sequence * value: $v^T A^{i+1} u$. ...or just does it. */ virtual void _launch() = 0; /** If a separate process is computing the next value of $v^T A^{i+1} u$, * _wait() blocks until the value is ready. */ virtual void _wait() = 0; //-------------- /// Members //-------------- const Field *_field; VectorDomain _VD; const Blackbox *_BB; long _size; // BDS 22.03.03 // bb : what is casenumber ? long casenumber; BlasVector u, v; Element _value; const Element &getvalue() { return _value; } //-------------- /// Initializers //-------------- /// User Left and Right vectors template Element &init (const Vector1& uu, const Vector2& vv) { casenumber = 1; u.resize(uu.size()); std::copy(uu.begin(),uu.end(),u.begin()); //u = uu; v.resize(vv.size()); std::copy(vv.begin(),vv.end(),v.begin()); //v = vv; // JGD 22.03.03 // return _VD.dot (_value, u, u); return _VD.dot (_value, u, v); } /// Random Left vectors, Zero Right vector template Element &init (RandIter& g) { casenumber = 1; u.resize (_BB->coldim ()); for (long i = (long)u.size (); i--;) g.random (u[(size_t)i]); v.resize (_BB->rowdim ()); return _VD.dot (_value, u, u); } /// User Left vectors, Zero Right vector template Element &init (const Vector& uu) { casenumber = 1; u.resize(uu.size()); std::copy(uu.begin,uu.end(),u.begin()); v.resize (_BB->rowdim ()); return _VD.dot (_value, u, u); } }; } #endif // __LINBOX_blackbox_container_base_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-container-symmetric.h000066400000000000000000000070411347646240000244200ustar00rootroot00000000000000/* linbox/algorithms/blackbox-container.h * Copyright (C) 1999, 2001 Jean-Guillaume Dumas, Bradford Hovinen * * Written by Jean-Guillaume Dumas , * * ------------------------------------ * Bradford Hovinen * * Modifications to incorporate into linbox-new tree * ------------------------------------ * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== *. */ // ================================================================ // LinBox Project 1999 // Black Box iterator and container // For symmetric matrix with same left and right vector // the sequence is this->u^t this->v, this->u^t A this->v, ..., this->u^t A^n this->v, // Time-stamp: <25 Jan 02 16:04:24 Jean-Guillaume.Dumas@imag.fr> // ================================================================ #ifndef __LINBOX_blackbox_container_symmetric_H #define __LINBOX_blackbox_container_symmetric_H #include "linbox/randiter/archetype.h" #include "linbox/algorithms/blackbox-container.h" namespace LinBox { /// \brief See base class for doc. template class BlackboxContainerSymmetric : public BlackboxContainerBase { public: typedef _Blackbox Blackbox; BlackboxContainerSymmetric () {} template BlackboxContainerSymmetric (const Blackbox *D, const Field &F, const Vector &u0) : BlackboxContainerBase (D, F) { this->init (u0, u0); } BlackboxContainerSymmetric (const Blackbox *D, const Field &F, RandIter &g) : BlackboxContainerBase (D, F) { this->init (g); } protected: void _launch () { if (this->casenumber > 0) { if (this->casenumber == 1) { this->casenumber = 2; this->_BB->apply (this->v, this->u); // this->v <- B(B^i u_0) = B^(i+1) u_0 this->_VD.dot (this->_value, this->u, this->v); // t <- this->u^t this->v = u_0^t B^(2i+1) u_0 } else { this->casenumber = -1; this->_VD.dot (this->_value, this->v, this->v); // t <- this->v^t this->v = u_0^t B^(2i+2) u_0 } } else { if (this->casenumber == 0) { this->casenumber = 1; this->_VD.dot (this->_value, this->u, this->u); // t <- this->u^t this->u = u_0^t B^(2i+4) u_0 } else { this->casenumber = 0; this->_BB->apply (this->u, this->v); // this->u <- B(B^(i+1) u_0) = B^(i+2) u_0 this->_VD.dot (this->_value, this->v, this->u); // t <- this->v^t this->u = u_0^t B^(2i+3) u_0 } } } void _wait () {} }; } #endif // __LINBOX_blackbox_container_symmetric_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-container-symmetrize.h000066400000000000000000000063661347646240000246250ustar00rootroot00000000000000/* linbox/algorithms/blackbox-container-symmetrize.h * Copyright (C) 1999, 2001 Jean-Guillaume Dumas * * Written by Jean-Guillaume Dumas , * * ------------------------------------ * Bradford Hovinen * * Ported to linbox-new framework; replaced use of DOTPROD, etc. with * VectorDomain * ------------------------------------ * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== *. */ /*! @internal * @file algorithms/blackbox-containter-symetrize.h * @ingroup algorithms * @brief Symmetrizing iterator for rank computations */ #ifndef __LINBOX_blackbox_container_symmetrize_H #define __LINBOX_blackbox_container_symmetrize_H #include "linbox/algorithms/blackbox-container-base.h" namespace LinBox { /** \brief Symmetrizing iterator (for rank computations). * @ingroup algorithms * * Symmetrizing iterator (for rank computations) * Same left and right vector * A is supposed to have tranpose-vector product * the sequence is * \code this->u^t this->u (A this->u)^t (A this->u) = this->u^t (A^t A) this->u (A^t (A this->u))^t (A^t (A this->u)) = this->u^t (A^t A)^2 this->u etc. \endcode */ template class BlackboxContainerSymmetrize : public BlackboxContainerBase { public: typedef _Blackbox Blackbox; BlackboxContainerSymmetrize () {} template BlackboxContainerSymmetrize (const Blackbox *D, const Field &F, const Vector &u0) : BlackboxContainerBase (D, F) { init (u0); } //BlackboxContainerSymmetrize (const Blackbox *D, const Field &F, RandIter &g = typename Field::RandIter(_field) ) BlackboxContainerSymmetrize (const Blackbox *D, const Field &F, RandIter &g = typename Field::RandIter() ) : BlackboxContainerBase (D, F) { init (g); } private: void _launch () { if (this->casenumber) { this->casenumber = 0; this->_BB->apply (this->v, this->u); this->_VD.dot (this->_value, this->v, this->v); } else { this->casenumber = 1; this->_BB->applyTranspose (this->u, this->v); this->_VD.dot (this->_value, this->u, this->u); } } void _wait () {} }; } #endif // __LINBOX_blackbox_container_symmetrize_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/blackbox-container.h000066400000000000000000000107361347646240000224130ustar00rootroot00000000000000/* linbox/algorithms/blackbox-container.h * Copyright (C) 1999, 2001 Jean-Guillaume Dumas, Bradford Hovinen * * Written by Jean-Guillaume Dumas , * Bradford Hovinen * * ------------------------------------ * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== *. */ #ifndef __LINBOX_blackbox_container_H #define __LINBOX_blackbox_container_H #include "linbox/randiter/archetype.h" #include "linbox/algorithms/blackbox-container-base.h" #include "linbox/util/timer.h" namespace LinBox { /// \brief Limited doc so far. template class BlackboxContainer : public BlackboxContainerBase { public: typedef _Blackbox Blackbox; // BlackboxContainer () { /*std::cerr << "BC def cstor" << std::endl;*/ } template BlackboxContainer(const Blackbox * D, const Field &F, const Vector &u0) : BlackboxContainerBase (D, F) ,w(F) { init (u0, u0); w = this->u; #ifdef INCLUDE_TIMING _applyTime = _dotTime = 0.0; #endif } // Pascal Giorgi 16.02.2004 template BlackboxContainer(const Blackbox * D, const Field &F, const Vector &u0, size_t size) : BlackboxContainerBase (D, F,size) ,w(F) { init (u0, u0); w = this->u; #ifdef INCLUDE_TIMING _applyTime = _dotTime = 0.0; #endif } template BlackboxContainer(const Blackbox * D, const Field &F, const Vector1 &u0, const Vector2& v0) : BlackboxContainerBase (D, F) ,w(F) { this->init (u0, v0); w = this->v; #ifdef INCLUDE_TIMING _applyTime = _dotTime = 0.0; #endif } BlackboxContainer(const Blackbox * D, const Field &F, RandIter &g) : BlackboxContainerBase (D, F) ,w(F) { this->casenumber = 1; this->u.resize (this->_BB->coldim ()); for (long i = (long)this->u.size (); i--;) g.random (this->u[(size_t)i]); this->w.resize (this->_BB->coldim ()); for (long i = (long)this->w.size (); i--;) g.random (this->w[(size_t)i]); this->v.resize (this->_BB->rowdim ()); this->_VD.dot (this->_value, this->u, this->w); #ifdef INCLUDE_TIMING _applyTime = _dotTime = 0.0; #endif } #ifdef INCLUDE_TIMING double applyTime () const { return _applyTime; } double dotTime () const { return _dotTime; } #endif // INCLUDE_TIMING protected: // std::vector w; BlasVector w ; #ifdef INCLUDE_TIMING Timer _timer; double _applyTime, _dotTime; #endif // INCLUDE_TIMING void _launch () { if (this->casenumber) { #ifdef INCLUDE_TIMING _timer.start (); #endif // INCLUDE_TIMING this->_BB->apply (this->v, w); // GV #ifdef INCLUDE_TIMING _timer.stop (); _applyTime += _timer.realtime (); _timer.start (); #endif // INCLUDE_TIMING this->_VD.dot (this->_value, this->u, this->v); // GV #ifdef INCLUDE_TIMING _timer.stop (); _dotTime += _timer.realtime (); #endif // INCLUDE_TIMING this->casenumber = 0; } else { #ifdef INCLUDE_TIMING _timer.start (); #endif // INCLUDE_TIMING this->_BB->apply (w, this->v); // GV #ifdef INCLUDE_TIMING _timer.stop (); _applyTime += _timer.realtime (); _timer.start (); #endif // INCLUDE_TIMING this->_VD.dot (this->_value, this->u, w); // GV #ifdef INCLUDE_TIMING _timer.stop (); _dotTime += _timer.realtime (); #endif // INCLUDE_TIMING this->casenumber = 1; } } void _wait () {} }; } #endif // __LINBOX_blackbox_container_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/block-coppersmith-domain.h000066400000000000000000000603441347646240000235400ustar00rootroot00000000000000/* linbox/algorithms/block-coppersmith-domain.h * Copyright (C) 2012 George Yuhasz * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_coppersmith_block_domain_H #define __LINBOX_coppersmith_block_domain_H #include #include #include #include #include "linbox/util/timer.h" #if defined(__LINBOX_USE_OPENMP) and defined(__GIVARO_USE_OPENMP) #include #include "givaro/givomptimer.h" namespace LinBox { typedef Givaro::OMPTimer CTimer; } #else #include "givaro/givtimer.h" namespace LinBox { typedef Givaro::Timer CTimer; } #endif #include "linbox/util/commentator.h" #define DEFAULT_BLOCK_EARLY_TERM_THRESHOLD 10 //Preprocessor variables for the state of BM_iterators #define DeltaExceeded 4 #define SequenceExceeded 3 #define GeneratorFound 2 #define GeneratorUnconfirmed 1 namespace LinBox { double g_time1=0.0,g_time2=0.0,g_time3=0.0,g_time4=0.0; /** Compute the linear generator of a sequence of matrices. * * This class encapsulates the functionality required for computing * the block minimal polynomial of a matrix. * @bib * Yuhasz thesis ... */ template class BlockCoppersmithDomain { public: typedef _Domain Domain; typedef typename Domain::Field Field; typedef typename Domain::Element Element; typedef _Sequence Sequence; typedef typename Domain::OwnMatrix Coefficient; typedef typename Domain::Matrix Sub; protected: Sequence *_container; const Domain *_MD; size_t EARLY_TERM_THRESHOLD; public: BlockCoppersmithDomain (const BlockCoppersmithDomain &Mat, size_t ett_default = DEFAULT_BLOCK_EARLY_TERM_THRESHOLD) : _container(Mat._container), _MD(Mat._MD), EARLY_TERM_THRESHOLD (ett_default) {} BlockCoppersmithDomain (const Domain& MD, Sequence *D, size_t ett_default = DEFAULT_BLOCK_EARLY_TERM_THRESHOLD) : _container(D), _MD(&MD), EARLY_TERM_THRESHOLD (ett_default) {} //matrix domain const Domain &domain () const { return *_MD; } // field of the domain const Field &field () const { return domain().field(); } const Field &getField () const { return domain().field(); } // deprecated // sequence of the domain Sequence *getSequence () const { return _container; } // the principal function std::vector right_minpoly (std::vector &P); // left minimal generating polynomial of the sequence // This _MAY_ get defined eventually. std::vector & left_minpoly (std::vector &P); // { /* transpose seq and transpose result*/ } // For compatibility with massey-domain (element sequence case). std::vector /* & */ operator()(std::vector &P) { return right_minpoly(P); } private: // bm-seq.h stuff can go here. class BM_Seq { public: typedef typename std::list::const_iterator const_iterator; typedef int size_type; inline const Domain &domain() const { return *_MD;} inline const Field &field() const {return domain().field();} private: const Domain *_MD; std::list _seq; size_type _size; size_t _row, _col; public: BM_Seq(const Domain & MD, size_t r, size_t c) : _MD(&MD) { _row = r; _col = c; _size = 0; } BM_Seq(const Domain & MD, size_t r) : _MD(&MD) { _row = r; _col = r; _size = 0; } BM_Seq(const Domain &MD, int n, Coefficient& M) : _MD(&MD), _seq(n, M), _size(n) { _row = M.rowdim(); _col = M.coldim(); } BM_Seq() {} BM_Seq(const BM_Seq& S) : _MD(S._MD), _seq(S._seq), _size(S._size), _row(S._row), _col(S._col) {} BM_Seq & operator=(const BM_Seq& S) { if(this != &S){ (*this)._size = S._size; (*this)._row = S._row; (*this)._col = S._col; (*this)._MD = S._MD; _seq.clear(); for(typename std::list::const_iterator it = S._seq.begin(); it != S._seq.end(); ++it) _seq.push_back(*it); } return *this; } size_t rowdim() { return _row; } size_t coldim() { return _col; } const_iterator begin() const { return _seq.begin(); } const_iterator end() const { return _seq.end(); } void push_back(const Coefficient &M) { if(_row==M.rowdim() && _col==M.coldim()){ _seq.push_back(M); ++_size; } } bool operator==(const BM_Seq& l) { typename std::list::const_iterator it, lit; bool test = false; if(_size==l._size && _row==l._row && _col==l._col){ test = true; it = _seq.begin(); lit = l._seq.begin(); if(_size==0){ return test; } else{ while(test && it!=_seq.end()){ test = domain().areEqual(*it,*lit); ++it; ++lit; } } } return test; } bool operator!=(const BM_Seq& l) { return !(*this == l); } size_type size() { return _size; } class BM_iterator { public: typedef std::list value_type; private: const Domain *_MD; BM_Seq& _seq; typename BM_Seq::size_type _size; typename BM_Seq::size_type _t; typename BM_Seq::const_iterator _seqel; std::list _gen; std::vector _deg; size_t _delta; size_t _mu; size_t _beta; size_t _sigma; size_t _gensize; size_t _row, _col; size_t _ett; size_t _etc; public: // This is an enumeration class that tells what state the berlekamp/massey algoithm iterator is in. // The four states are: // DeltaExceeded = 4 // SequenceExceeded = 3 // GeneratorFound = 2 // GeneratorUnconfirmed = 1 class TerminationState{ private: int _state; friend class BM_iterator; TerminationState() : _state(GeneratorUnconfirmed) {} TerminationState(int m) : _state(m) {} public: TerminationState(const TerminationState& t) : _state(t._state) {} TerminationState & operator=(const TerminationState & t){ if(this != &t){ (*this)._state = t._state; } return *this; } bool IsGeneratorUnconfirmed(){ return _state==GeneratorUnconfirmed; } bool IsGeneratorFound() { return _state==GeneratorFound; } bool IsSequenceExceeded() { return _state==SequenceExceeded; } bool IsDeltaExceeded() { return _state==DeltaExceeded; } }; // TerminationState private: TerminationState _state; public: TerminationState state() const { return _state; } void setDelta(int d) { _delta=d; if((/* _delta < 0 ||*/ _beta < _delta - _sigma + _mu +1) && _state._state!=3){ if(_sigma <= _delta /*|| _delta < 0*/) _state._state = GeneratorUnconfirmed; else _state._state = DeltaExceeded; } else{ if(_sigma > _delta) _state._state = DeltaExceeded; else _state._state = GeneratorFound; } } //field and matrix domain functions inline const Domain &domain() const { return *_MD;} inline const Field &field() const { return domain().field();} //Constructor explicit BM_iterator(BM_Seq& s, size_t earlyTermThreshold=DEFAULT_BLOCK_EARLY_TERM_THRESHOLD, typename BM_Seq::size_type elinit=0) : _MD(&s.domain()), _seq(s) { _row = s.rowdim(); _col = s.coldim(); _size = _seq.size(); _t = elinit; _delta = (size_t)-1; // BB: is it meant ? _seqel = _seq.begin(); _deg = std::vector(_row+_col); _ett=earlyTermThreshold; _etc=0; for(size_t i = _col; i < _row+_col; ++i) _deg[i] = 1; Coefficient gen1(field(),_col,_row+_col); for(size_t i = 0; i<_col; ++i) gen1.setEntry(i,i,field().one); _gen.push_back(gen1); _gensize = 1; if(_size==0 || _t==_size) _state._state = SequenceExceeded; _sigma = 0; _mu = 0; _beta = 1; } //Copy constructor BM_iterator(const BM_Seq::BM_iterator & it) : _MD(&it.domain()), _seq(it._seq), _size(it._size), _t(it._t), _seqel(it._seqel), _gen(it._gen), _deg(it._deg), _delta(it._delta), _mu(it._mu), _beta(it._beta), _sigma(it._sigma), _gensize(it._gensize), _row(it._row), _col(it._col), _ett(it._ett), _etc(it._etc), _state(it._state) {} //Assignment operator not overloaded since BlasMatrix class has overloaded assignment error //Overloaded assignment operator BM_iterator& operator=(const typename BM_Seq::BM_iterator& it) { if(this != &it){ (*this)._MD = it._MD; (*this)._row = it._row; (*this)._col = it._col; (*this)._seq = it._seq; (*this)._size = it._size; (*this)._t = it._t; (*this)._seqel = it._seqel; (*this)._deg = it._deg; (*this)._gensize = it._gensize; (*this)._delta = it._delta; (*this)._mu = it._mu; (*this)._sigma = it._sigma; (*this)._beta = it._beta; (*this)._state = it._state; (*this)._ett = it._ett; (*this)._etc = it._etc; _gen.clear(); for(typename std::list::const_iterator git = it._gen.begin(); git != it._gen.end(); ++git) _seq.push_back(*git); } return (*this); } bool operator==(const BM_Seq::BM_iterator& it) { TerminationState check = it.state(); bool test1 = (_seq==it._seq); bool test2 = (_t==it._t); bool test3 = _delta==it._delta; bool test4 = (_state._state == check._state && _state.IsSequenceExceeded()); return (test1 && test2 && (test3 || test4)); } bool operator!=(const BM_iterator& it) { return !((*this) == it); } private: // Column Copy void ColumnCopy(Coefficient &M, Coefficient &A, size_t i) { size_t rowd = A.rowdim(); Sub MC(M,0,i,rowd,1); Sub AC(A,0,i,rowd,1); domain().copy(MC,AC); } // Column Swap void ColumnSwap(Coefficient &M, size_t i, size_t j) { size_t rowd = M.rowdim(); Sub Ci(M,0,i,rowd,1); Sub Cj(M,0,j,rowd,1); domain().swap(Ci,Cj); } // Column Operation void ColumnAdd(Coefficient &M, size_t i, size_t j, Element el) { size_t rowd = M.rowdim(); Coefficient temp(field(),rowd,1); Sub Ci(M,0,i,rowd,1); Sub Cj(M,0,j,rowd,1); domain().mul(temp,Cj,el); domain().addin(Ci,temp); } void Algorithm3dot2(Coefficient &tau, Coefficient &D, std::vector &d, size_t &mu, size_t &sigma, size_t &beta) { Element pivel; field().assign(pivel,field().zero); // Retrieve the row and column dimensions of the sequence and the dimension of the discrepancy size_t n = D.rowdim(); size_t nm = D.coldim(); size_t m = nm-n; //Initialize tau to the identity matrix for(size_t i = 0; i gen; typedef std::set::key_type index_type; for(index_type i=0; i pi; pi.insert(m+i); for(typename std::set::iterator genit = gen.begin(); genit != gen.end(); ++genit){ if(!field().isZero(D.getEntry(i,*genit))) pi.insert(*genit); } //Choose the pivot row with the smallest nominal degree index_type piv = m+i; for(std::set::iterator itpi = pi.begin(); itpi != pi.end(); ++itpi){ size_t j = *itpi; if(d[j] <= d[piv]){ if(d[j]==d[piv]){ if(piv < m+i){ if(j::iterator itpi = pi.begin(); itpi != pi.end(); ++itpi){ Element temp; field().assign(temp,D.getEntry(i, *itpi)); field().negin(temp); field().divin(temp,pivel); ColumnAdd(tau, *itpi, piv, temp); ColumnAdd(D, *itpi, piv, temp); } } else{ //Remove column index m+i and handle it separately pi.erase(m+i); //Eliminate nonzero discrepancies in generator columns for(typename std::set::iterator itpi = pi.begin(); itpi != pi.end(); ++itpi){ Element temp; field().assign(temp,D.getEntry(i, *itpi)); field().negin(temp); field().divin(temp,pivel); ColumnAdd(tau, *itpi, piv, temp); ColumnAdd(D, *itpi, piv, temp); } Element auxel; field().assign(auxel,D.getEntry(i,m+i)); //Perform a major change and update an initialized auxiliary column if(!field().isZero(auxel)){ Element temp; field().assign(temp,D.getEntry(i, m+i)); field().negin(temp); field().divin(temp,pivel); ColumnAdd(tau, m+i, piv, temp); ColumnAdd(D, m+i, piv, temp); ColumnSwap(tau,piv, m+i); ColumnSwap(D, piv, m+i); } else{ ColumnAdd(tau,m+i,piv,field().one); ColumnAdd(D,m+i,piv,field().one); gen.erase(piv); } size_t tempdeg = d[piv]; d[piv] = d[m+i]; d[m+i] = tempdeg; if(tempdeg < beta) beta = tempdeg; if(d[piv] > mu) mu = d[piv]; sigma = sigma - tempdeg + d[piv]; } } } public: BM_iterator& operator++() { //See if a matrix has been pushed on the sequence //if it has, then recompute the seqel since it may //have become corrupt. //Also reset the size to the correct size of the sequence if(_size < _seq.size()){ _seqel = _seq.begin(); for(int i = 0; i<_t; ++i) ++_seqel; _size = _seq.size(); } //if the iterator points past the seq elements, do nothing if(_t == _size){ return *this; } //Initialize the discrepancy Coefficient disc(field(),_row, _row+_col); //Create two iterators, one for seq, and one for gen typename BM_Seq::const_iterator cseqit; typename std::list::iterator genit; //get a iterator to the seq element to be processed cseqit = _seqel; CTimer start1; start1.start(); //Compute the discrepancy std::vector coeffVec; std::vector seqPtrVec; for(genit = _gen.begin(); genit!=_gen.end(); ++genit){ coeffVec.push_back(&(*genit)); seqPtrVec.push_back(&(*cseqit)); --cseqit; } int numCoeffs=coeffVec.size(); std::vector discComponents; discComponents.reserve(numCoeffs); for (int i=0;iisZero(primaryDisc)) { --_etc; } else { _etc=_ett; } Algorithm3dot2(tau, disc, _deg, _mu, _sigma, _beta); start2.stop(); g_time3 += start2.realtime(); CTimer start3; start3.start(); //Multiply tau into each matrix in the generator #ifdef __LINBOX_USE_OPENMP #pragma omp parallel for #endif for (int i=0;i (int)_gensize){ _gen.push_back(Coefficient(field(),_col,_row+_col)); ++_gensize; } //Mimic multiplication be z in the auxiliary columns typename std::list::reverse_iterator g1,g2; g1 = _gen.rbegin(); g2 = _gen.rbegin(); ++g1; while(g1!=_gen.rend()){ Sub g1aux(*g1,0,_col,_col,_row); Sub g2aux(*g2,0,_col,_col,_row); domain().copy(g2aux,g1aux); ++g1; ++g2; } genit = _gen.begin(); Coefficient z1(field(),_col,_row); Sub genitaux(*genit,0,_col,_col,_row); domain().copy(genitaux,z1); //Increment the t and seqel to the next element ++_t; ++_seqel; //Update the state if(/* _delta < 0 || */_beta < _delta - _sigma + _mu +1){ if(_t == _size) _state._state = SequenceExceeded; else{ if(_sigma > _delta /* && _delta >= 0*/) _state._state = DeltaExceeded; else _state._state = GeneratorUnconfirmed; } } else{ if(_sigma > _delta) _state._state = DeltaExceeded; else _state._state = GeneratorFound; } if (_etc==0) { _state._state=GeneratorFound; } return *this; } // Is this working? -AS BM_iterator operator++(int) { //Create a copy of this BM_iterator temp(*this); //See if a matrix has been pushed on the sequence //if it has, then recompute the seqel since it may //have become corrupt. //Also reset the size to the correct size of the sequence if(_size < _seq.size()){ _seqel = _seq.begin(); for(int i = 0; i<_t; ++i) ++_seqel; _size = _seq.size(); } //if the iterator points past the seq elements, do nothing if(_t == _size){ return *this; } //Initialize the discrepancy Coefficient disc(field(),_row, _row+_col); //Create two iterators, one for seq, and one for gen typename BM_Seq::const_iterator cseqit; typename std::list::iterator genit; //get an iterator to the seq element to be processed cseqit = _seqel; //Compute the discrepancy for(genit = _gen.begin(); genit!=_gen.end(); ++genit, cseqit--){ domain().axpyin(disc,*cseqit,*genit); } // cost: k*n^3 (nxn matrix muladds where k is current generator length) // is a reductive addition over independent muls. //Compute tau with Algorith3.2 Coefficient tau(field(), _row+_col, _row+_col); Algorithm3dot2(tau, disc, _deg, _mu, _sigma, _beta); // cost: n^3 for elim on n x about 2n //Multiply tau into each matrix in the generator for(genit = _gen.begin(); genit!=_gen.end(); ++genit){ domain().mulin(*genit,tau); } // cost: k*n^3 (nxn matrix muls where k is current generator length) // is k independent muls with a shared mat tau. //Increment the auxiliary degrees and beta for(size_t j = _col; j <_row+_col; ++j) _deg[j]++; ++_beta; //Add a zero matrix to the end of the generator if needed. int tmax = (int)_deg[0]; for(size_t j = 1; j<_row+_col; ++j) if(tmax < _deg[j]) tmax = (int)_deg[j]; if(tmax+1 > _gensize){ _gen.push_back(Coefficient(field(),_col,_row+_col)); ++_gensize; } //Mimic multiplication by z in the auxiliary columns typename std::list::reverse_iterator g1,g2; g1 = _gen.rbegin(); g2 = _gen.rbegin(); ++g1; while(g1!=_gen.rend()){ Sub g1aux(*g1,0,_col,_col,_row); Sub g2aux(*g2,0,_col,_col,_row); domain().copy(g2aux,g1aux); ++g1; ++g2; } genit = _gen.begin(); Coefficient z1(field(),_col,_row); Sub genitaux(*genit,0,_col,_col,_row); domain().copy(genitaux,z1); //Increment the t and seqel to the next element ++_t; ++_seqel; //Update the state if(/* _delta < 0 || */ _beta < _delta - _sigma + _mu +1){ if(_t == _size) _state._state = SequenceExceeded; else{ if(_sigma > _delta /* && _delta >= 0 */) _state._state = DeltaExceeded; else _state._state = GeneratorUnconfirmed; } } else{ if(_sigma > _delta) _state._state = DeltaExceeded; else _state._state = GeneratorFound; } return temp; } //return a reference to the current generator, in its algorithmic reversed form value_type& operator*() { return _gen; } //overload the pointer operator value_type* operator->() { return &_gen; } //Return a vector representing the reversal, by nominal degree, of the current generator std::vector GetGenerator() { std::vector revgen(_mu+1, Coefficient(field(),_col,_col)); for(size_t i = 0; i<_col; ++i){ typename std::list::iterator genit = _gen.begin(); for(int j = 0; j < (int)_deg[i]+1; ++j){ ColumnCopy(revgen[_deg[i]-j], *genit,i); ++genit; } } return revgen; } typename BM_Seq::size_type get_t() { return _t; } int get_mu() { return _mu; } int get_sigma() { return _sigma; } int get_beta() { return _beta; } int get_delta() { return _delta; } std::vector get_deg() { std::vector gendegree(&_deg[0], &_deg[_col]); return gendegree; } }; //End of BM_iterator //return an initialized BM_iterator typename BM_Seq::BM_iterator BM_begin(int earlyTermThreshold) { return typename BM_Seq::BM_iterator(*this,earlyTermThreshold); } //return an initialized BM_iterator that points to one past the end of the sequence typename BM_Seq::BM_iterator BM_end() { return typename BM_Seq::BM_iterator(*this, -1, _size); } /**/ };//End of BM_Seq }; //end of class BlockCoppersmithDomain // construct P s.t. \sum_{i}P[i]A^{i}=0 template std::vector BlockCoppersmithDomain<_Domain, _Sequence>:: right_minpoly (std::vector &P) { //Get the row and column dimensions const size_t r = _container->rowdim(); const size_t c = _container->coldim(); typename Sequence::const_iterator contiter(_container->begin()); //Create the BM_Seq, that will use the Coppersmith Block Berlekamp Massey Algorithm to compute the minimal generator. BM_Seq seq(domain(),r,c); //Push the first projection onto the BM_Seq seq.push_back(*contiter); //Create the BM_Seq iterator whose incrementation performs a step of the generator typename BM_Seq::BM_iterator bmit(seq.BM_begin(EARLY_TERM_THRESHOLD)); bmit.setDelta((int)(2*_container->getBB()->rowdim()+1)); typename BM_Seq::BM_iterator::TerminationState check = bmit.state(); while(!check.IsGeneratorFound() ){ ++bmit; check = bmit.state(); if(check.IsSequenceExceeded()){ CTimer start; start.start(); ++contiter; start.stop(); g_time1+=start.realtime(); seq.push_back(*contiter); } } P = bmit.GetGenerator(); std::vector deg(bmit.get_deg()); commentator().report(Commentator::LEVEL_IMPORTANT,TIMING_MEASURE) << "Times: " << g_time1 << " " << g_time2 << " " << g_time3 << " " << g_time4<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/block-lanczos.h000066400000000000000000000224141347646240000214030ustar00rootroot00000000000000/* block-lanczos.h * Copyright (C) 2002 Bradford Hovinen * * Written by Bradford Hovinen * * -------------------------------------------- * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * * Class definitions for block Lanczos iteration */ #ifndef __LINBOX_block_lanczos_H #define __LINBOX_block_lanczos_H #include "linbox/linbox-config.h" #include #include "linbox/field/archetype.h" #include "linbox/vector/vector-domain.h" #include "linbox/blackbox/archetype.h" #include "linbox/solutions/methods.h" // I'm putting everything inside the LinBox namespace so that I can drop all of // this in to LinBox easily at a later date, without any messy porting. namespace LinBox { /** @brief Block Lanczos iteration * * This is a blocked version of the iteration given in @ref LanczosSolver. The * essential difference is that, rather than applying the black box \f$A\f$ to a * single vector $v$ during each iteration, the block box \f$A\f$ is applied to an * \f$n\times N\f$ matrix \f$V\f$ or, equivalently, to \f$N\f$ vectors * \f$v_1, \ldots, v_N\f$ Scalars in the original iteration become \f$N\times N\f$ * matrices in the blocked version. The resulting iteration is a natural * extension of the basic theory of the original Lanczos iteration, * c.f. (see Montgomery 1995 ). This has the advantage of more flexible * parallelization, and does not break down as often when used over small * fields. * * Currently, only dense vectors are supported for this iteration, and it is * unlikely any other vector archetypes will be supported in the future. * @bib [Montgomery '95] */ template > class BlockLanczosSolver { public: typedef typename Field::Element Element; /** @brief Constructor. * @param F Field over which to operate * @param traits @ref SolverTraits structure describing user * options for the solver */ BlockLanczosSolver (const Field &F, const Method::BlockLanczos &traits) : _traits (traits), _field (&F), _VD (F), _MD (F), _randiter (F), _block (traits.blockingFactor) { init_temps (); } /** Constructor with a random iterator. * @param F Field over which to operate * @param traits @ref SolverTraits structure describing user * options for the solver * @param r Random iterator to use for randomization */ BlockLanczosSolver (const Field &F, const Method::BlockLanczos &traits, typename Field::RandIter r) : _traits (traits), _field (&F), _VD (F), _MD (F), _randiter (r), _block (traits.blockingFactor) { init_temps (); } /** Solve the linear system Ax = b. * * If the system is nonsingular, this method computes the unique * solution to the system Ax = b. If the system is singular, it computes * a random solution. * * If the matrix A is nonsymmetric, this method preconditions the matrix * A with the preconditioner D_1 A^T D_2 A D_1, where D_1 and D_2 are * random nonsingular diagonal matrices. If the matrix A is symmetric, * this method preconditions the system with A D, where D is a random * diagonal matrix. * * @param A Black box for the matrix A * @param x Vector in which to store solution * @param b Right-hand side of system * @return Reference to solution vector */ template Vector &solve (const Blackbox &A, Vector &x, const Vector &b); inline const Field & field() const { return *_field; } private: // S_i is represented here as a vector of booleans, where the entry at // index j is true if and only if the corresponding column of V_i is to // be included in W_i // All references to Winv are actually -Winv // Run the block Lanczos iteration and return the result. Return false // if the method breaks down. Do not check that Ax = b in the end template bool iterate (const Blackbox &A, Vector &x, const Vector &b); // Compute W_i^inv and S_i given V_i^T A V_i int compute_Winv_S (Matrix &Winv, std::vector &S, const Matrix &T); // Given B with N columns and S_i, compute B S_i S_i^T template Matrix1 &mul_SST (Matrix1 &BSST, const Matrix2 &B, const std::vector &S) const; // Matrix-matrix multiply // C = A * B * S_i * S_i^T template Matrix1 &mul (Matrix1 &C, const Matrix2 &A, const Matrix3 &B, const std::vector &S) const; // In-place matrix-matrix multiply on the right // A = A * B * S_i * S_i^T // This is a version of the above optimized to use as little additional // memory as possible template Matrix1 &mulin (Matrix1 &A, const Matrix2 &B, const std::vector &S) const; // Matrix-vector multiply // w = A * S_i * S_i^T * v template Vector1 &vectorMul (Vector1 &w, const Matrix1 &A, const Vector2 &v, const std::vector &S) const; // Matrix-vector transpose multiply // w = (A * S_i * S_i^T)^T * v template Vector1 &vectorMulTranspose (Vector1 &w, const Matrix1 &A, const Vector2 &v, const std::vector &S) const; // Matrix-matrix addition // A = A + B * S_i * S_i^T template Matrix1 &addin (Matrix1 &A, const Matrix2 &B, const std::vector &S) const; // Add I_N to the given N x N matrix // A = A + I_N template Matrix1 &addIN (Matrix1 &A) const; // Given a vector S of bools, write an array of array indices in which // the true values of S are last void permute (std::vector &indices, const std::vector &S) const; // Set the given matrix to the identity template Matrix1 &setIN (Matrix1 &A) const; // Find a suitable pivot row for a column and exchange it with the given // row bool find_pivot_row (Matrix &A, size_t row, int col_offset, const std::vector &indices); // Eliminate all entries in a column except the pivot row, using row // operations from the pivot row void eliminate_col (Matrix &A, size_t pivot, int col_offset, const std::vector &indices, const Element &Ajj_inv); // Initialize the temporaries used in computation void init_temps (); // Private variables const Method::BlockLanczos _traits; const Field *_field; VectorDomain _VD; MatrixDomain _MD; typename Field::RandIter _randiter; // Temporaries used in the computation Matrix _matV[3]; // n x N Matrix _AV; // n x N Matrix _VTAV; // N x N Matrix _Winv[2]; // N x N Matrix _AVTAVSST_VTAV; // N x N Matrix _matT; // N x N Matrix _DEF; // N x N std::vector _vecS; // N-vector of bools mutable typename Vector::Dense _tmp; // N std::vector _indices; // N mutable Matrix _matM; // N x 2N // Blocking factor size_t _block; // Construct a transpose matrix on the fly template TransposeMatrix transpose (Matrix1 &M) const { return TransposeMatrix (M); } protected: template bool isAlmostIdentity (const Matrix1 &M) const; // Test suite for the above functions bool test_compute_Winv_S_mul (int n) const; bool test_compute_Winv_S_mulin (int n) const; bool test_mul_SST (int n) const; bool test_mul_ABSST (int n) const; bool test_mulTranspose (int m, int n) const; bool test_mulTranspose_ABSST (int n) const; bool test_mulin_ABSST (int n) const; bool test_addin_ABSST (int n) const; public: bool runSelfCheck () const; }; } // namespace LinBox #include "block-lanczos.inl" #endif // __LINBOX_block_lanczos_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/block-lanczos.inl000066400000000000000000001154411347646240000217410ustar00rootroot00000000000000/* block-lanczos.inl * Copyright (C) 2002 LinBox * * Written by Bradford Hovinen * * -------------------------------------------- * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== * Function definitions for block Lanczos iteration */ #ifndef __LINBOX_block_lanczos_INL #define __LINBOX_block_lanczos_INL #include "linbox/linbox-config.h" #include #include "linbox/util/debug.h" #include "linbox/solutions/methods.h" #include "linbox/blackbox/diagonal.h" #include "linbox/blackbox/compose.h" #include "linbox/blackbox/transpose.h" #include #include "linbox/util/commentator.h" #include "linbox/util/timer.h" #include "block-lanczos.h" // I'm putting everything inside the LinBox namespace so that I can drop all of // this in to LinBox easily at a later date, without any messy porting. namespace LinBox { #ifdef DETAILED_TRACE template void BLTraceReport (std::ostream &out, MatrixDomain &MD, const char *text, size_t iter, const Matrix &M) { out << text << " [" << iter << "]:" << std::endl; MD.write (out, M); } template void BLTraceReport (std::ostream &out, VectorDomain &VD, const char *text, size_t iter, const Vector &v) { out << text << " [" << iter << "]: "; VD.write (out, v) << std::endl; } void reportS (std::ostream &out, const std::vector &S, size_t iter) { out << "S_" << iter << ": [" << S << "]" << std::endl; } template void checkAConjugacy (const MatrixDomain &MD, const Matrix &AV, Matrix &V, Matrix &T, size_t AV_iter, size_t V_iter) { std::ostream &report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); report << "Checking whether V_" << V_iter << " is A-conjugate to V_" << AV_iter << "..."; MD.mul (T, TransposeMatrix (V), AV); if (MD.isZero (T)) report << "yes" << std::endl; else { report << "no" << std::endl; std::ostream &err_report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR); err_report << "ERROR: V_" << V_iter << " is not A-conjugate to V_" << AV_iter << std::endl; err_report << "Computed V_" << V_iter << "^T AV_" << AV_iter << ":" << std::endl; MD.write (report, T); } } #else template inline void BLTraceReport (std::ostream &out, Domain &D, const char *text, size_t iter, const Object &obj) {} void reportS (std::ostream &out, const std::vector &S, size_t iter) {} template inline void checkAConjugacy (const MatrixDomain &MD, const Matrix &AV, const Matrix &V, Matrix &T, size_t AV_iter, size_t V_iter) {} #endif #ifdef DETAILED_PROFILE # define TIMER_DECLARE(part) UserTimer part##_timer; double part##_time = 0.0; # define TIMER_START(part) part##_timer.start () # define TIMER_STOP(part) part##_timer.stop (); part##_time += part##_timer.time () # define TIMER_REPORT(part) \ commentator().report (Commentator::LEVEL_NORMAL, TIMING_MEASURE) \ << "Total " #part " time: " << part##_time << "s" << std::endl; #else # define TIMER_DECLARE(part) # define TIMER_START(part) # define TIMER_STOP(part) # define TIMER_REPORT(part) #endif // N.B. This code was lifted from the Lanczos iteration in LinBox template template Vector &BlockLanczosSolver::solve (const Blackbox &A, Vector &x, const Vector &b) { linbox_check ((x.size () == A.coldim ()) && (b.size () == A.rowdim ())); commentator().start ("Solving linear system (Block Lanczos)", "BlockLanczosSolver::solve"); bool success = false; Vector d1, d2, b1, b2, bp, y, Ax, ATAx, ATb; // Get the temporaries into the right sizes _matV[0].resize (A.coldim (), _block); _matV[1].resize (A.coldim (), _block); _matV[2].resize (A.coldim (), _block); _AV.resize (A.coldim (), _block); Givaro::GeneralRingNonZeroRandIter real_ri (_randiter); RandomDenseStream > stream (field(), real_ri, A.coldim ()); for (unsigned int i = 0; !success && i < _traits.maxTries (); ++i) { std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); switch (_traits.preconditioner) { case Preconditioner::NO_PRECONDITIONER: success = iterate (A, x, b); break; case Preconditioner::SYMMETRIZE: { VectorWrapper::ensureDim (bp, A.coldim ()); Transpose AT (&A); Compose< Transpose< Blackbox>, Blackbox> B (&AT, &A); AT.apply (bp, b); success = iterate (B, x, bp); break; } case Preconditioner::PARTIAL_DIAGONAL: { VectorWrapper::ensureDim (d1, A.coldim ()); VectorWrapper::ensureDim (y, A.coldim ()); stream >> d1; Diagonal D (field(), d1); Compose > B (&A, &D); report << "Random D: "; _VD.write (report, d1) << std::endl; success = iterate (B, y, b); D.apply (x, y); break; } case Preconditioner::PARTIAL_DIAGONAL_SYMMETRIZE: { VectorWrapper::ensureDim (d1, A.rowdim ()); VectorWrapper::ensureDim (b1, A.rowdim ()); VectorWrapper::ensureDim (bp, A.coldim ()); typedef Diagonal PC1; typedef Transpose PC2; typedef Compose CO1; typedef Compose CO2; stream >> d1; PC1 D (field(), d1); PC2 AT (&A); CO1 B1 (&D, &A); CO2 B (&AT, &B1); report << "Random D: "; _VD.write (report, d1) << std::endl; D.apply (b1, b); AT.apply (bp, b1); success = iterate (B, x, bp); break; } case Preconditioner::FULL_DIAGONAL: { VectorWrapper::ensureDim (d1, A.coldim ()); VectorWrapper::ensureDim (d2, A.rowdim ()); VectorWrapper::ensureDim (b1, A.rowdim ()); VectorWrapper::ensureDim (b2, A.coldim ()); VectorWrapper::ensureDim (bp, A.coldim ()); VectorWrapper::ensureDim (y, A.coldim ()); typedef Diagonal PC1; typedef Transpose PC2; typedef Compose CO1; typedef Compose CO2; typedef Compose CO3; typedef Compose CO4; stream >> d1 >> d2; PC1 D1 (field(), d1); PC1 D2 (field(), d2); PC2 AT (&A); CO1 B1 (&A, &D1); CO2 B2 (&D2, &B1); CO3 B3 (&AT, &B2); CO4 B (&D1, &B3); report << "Random D_1: "; _VD.write (report, d1) << std::endl; report << "Random D_2: "; _VD.write (report, d2) << std::endl; D2.apply (b1, b); AT.apply (b2, b1); D1.apply (bp, b2); success = iterate (B, y, bp); D1.apply (x, y); break; } default: throw PreconditionFailed (__func__, __LINE__, "preconditioner is NO_PRECONDITIONER, SYMMETRIZE, PARTIAL_DIAGONAL_SYMMETRIZE, " "PARTIAL_DIAGONAL, or FULL_DIAGONAL"); } // JGD 11.07.2005 // I DON'T KNOW WHY IT IS WORKING BUT IT DOES WORK // Without this negin the results is minus the correct solution // I have seen this sentence in mg-bla which comforts my choice: // "Because we set Winv to -Winv, we have -x at the end of the // iteration. So negate the result and return it" // I don't know when to negate it, so I check first, // if the result is not correct I try to negate !!! VectorWrapper::ensureDim (Ax, A.rowdim ()); if ((_traits.preconditioner == Preconditioner::SYMMETRIZE) || (_traits.preconditioner == Preconditioner::PARTIAL_DIAGONAL_SYMMETRIZE) || (_traits.preconditioner == Preconditioner::FULL_DIAGONAL)) { VectorWrapper::ensureDim (ATAx, A.coldim ()); VectorWrapper::ensureDim (ATb, A.coldim ()); A.apply (Ax, x); A.applyTranspose (ATAx, Ax); A.applyTranspose (ATb, b); if (_VD.areEqual (ATAx, ATb)) { success = true; } else { success = false; } } else { A.apply (Ax, x); if (_VD.areEqual (Ax, b)) { success = true; } else { success = false; } } if(! success) _VD.negin(x); // End of JGD INFAMOUS HACK if (_traits.checkResult ()) { VectorWrapper::ensureDim (Ax, A.rowdim ()); if (_traits.checkResult () && ((_traits.preconditioner == Preconditioner::SYMMETRIZE) || (_traits.preconditioner == Preconditioner::PARTIAL_DIAGONAL_SYMMETRIZE) || (_traits.preconditioner == Preconditioner::FULL_DIAGONAL))) { VectorWrapper::ensureDim (ATAx, A.coldim ()); VectorWrapper::ensureDim (ATb, A.coldim ()); commentator().start ("Checking whether A^T Ax = A^T b"); A.apply (Ax, x); A.applyTranspose (ATAx, Ax); A.applyTranspose (ATb, b); if (_VD.areEqual (ATAx, ATb)) { commentator().stop ("passed"); success = true; } else { commentator().stop ("FAILED"); success = false; } } else if (_traits.checkResult ()) { commentator().start ("Checking whether Ax=b"); A.apply (Ax, x); if (_VD.areEqual (Ax, b)) { commentator().stop ("passed"); success = true; } else { commentator().stop ("FAILED"); success = false; } } } } if (success) { commentator().stop ("done", "Solve successful", "BlockLanczosSolver::solve"); return x; } else { commentator().stop ("done", "Solve failed", "BlockLanczosSolver::solve"); throw SolveFailed (); } } template template bool BlockLanczosSolver::iterate (const Blackbox &A, Vector &x, const Vector &b) { linbox_check (_matV[0].rowdim () == A.rowdim ()); linbox_check (_matV[1].rowdim () == A.rowdim ()); linbox_check (_matV[2].rowdim () == A.rowdim ()); linbox_check (_matV[0].coldim () == _matV[1].coldim ()); linbox_check (_matV[0].coldim () == _matV[2].coldim ()); commentator().start ("Block Lanczos iteration", "BlockLanczosSolver::iterate", A.rowdim ()); size_t Ni; size_t total_dim = 0; Vector tmp, tmp1, tmp2; bool ret = true; VectorWrapper::ensureDim (tmp, _traits.blockingFactor); VectorWrapper::ensureDim (tmp1, _traits.blockingFactor); VectorWrapper::ensureDim (tmp2, A.rowdim ()); // How many iterations between each progress update unsigned int progress_interval = A.rowdim () / _traits.blockingFactor / 100; // Make sure there are a minimum of ten if (progress_interval == 0) progress_interval = 1; // i is the index for temporaries where we need to go back to i - 1 // j is the index for temporaries where we need to go back to j - 2 int i = 0, j = 2, prev_j = 1, iter = 2; typename Matrix::ColIterator k; TIMER_DECLARE(AV); TIMER_DECLARE(Winv); TIMER_DECLARE(solution); TIMER_DECLARE(orthogonalization) // Get a random fat vector _matV[0] RandomDenseStream stream (field(), _randiter, A.coldim ()); for (k = _matV[0].colBegin (); k != _matV[0].colEnd (); ++k) stream >> *k; TIMER_START(AV); _MD.blackboxMulLeft (_AV, A, _matV[0]); TIMER_STOP(AV); std::ostream &report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); // Initialize S_-1 to IN std::fill (_vecS.begin (), _vecS.end (), true); // Iteration 1 TIMER_START(Winv); _MD.mul (_VTAV, transpose (_matV[0]), _AV); Ni = compute_Winv_S (_Winv[0], _vecS, _VTAV); TIMER_STOP(Winv); // Check for catastrophic breakdown if (Ni == 0) { commentator().stop ("breakdown", NULL, "BlockLanczosSolver::iterate"); return false; } total_dim += Ni; #ifdef DETAILED_TRACE report << "Iteration " << iter << ": N_i = " << Ni << std::endl; report << "Iteration " << iter << ": Total dimension is " << total_dim << std::endl; #endif TIMER_START(solution); vectorMulTranspose (tmp, _matV[0], b, _vecS); _MD.vectorMul (tmp1, _Winv[0], tmp); vectorMul (x, _matV[0], tmp1, _vecS); TIMER_STOP(solution); mul_SST (_matV[1], _AV, _vecS); TIMER_START(orthogonalization); mul (_AVTAVSST_VTAV, transpose (_AV), _AV, _vecS); BLTraceReport (report, _MD, "V", 0, _matV[0]); BLTraceReport (report, _MD, "AV", 0, _AV); BLTraceReport (report, _MD, "V^T A V", 0, _VTAV); BLTraceReport (report, _MD, "Winv", 0, _Winv[0]); reportS (report, _vecS, 0); BLTraceReport (report, _VD, "x", 0, x); BLTraceReport (report, _MD, "AVSS^T", 0, _matV[1]); BLTraceReport (report, _MD, "V^T A^2 V", 0, _AVTAVSST_VTAV); _MD.addin (_AVTAVSST_VTAV, _VTAV); _MD.mul (_DEF, _Winv[0], _AVTAVSST_VTAV); addIN (_DEF); _MD.axpyin (_matV[1], _matV[0], _DEF); TIMER_START(orthogonalization); BLTraceReport (report, _MD, "D", 1, _DEF); BLTraceReport (report, _MD, "V", 1, _matV[1]); checkAConjugacy (_MD, _AV, _matV[1], _DEF, 0, 1); if (_MD.isZero (_matV[1])) { commentator().stop ("done", NULL, "BlockLanczosSolver::iterate"); return true; } // Iteration 2 TIMER_START(AV); _MD.blackboxMulLeft (_AV, A, _matV[1]); TIMER_STOP(AV); #ifdef DETAILED_TRACE // DEBUG: Save a copy of AV_1 for use later Matrix AV1_backup (_AV.rowdim (), _AV.coldim ()); _MD.copy (AV1_backup, _AV); #endif TIMER_START(Winv); _MD.mul (_VTAV, transpose (_matV[1]), _AV); Ni = compute_Winv_S (_Winv[1], _vecS, _VTAV); TIMER_STOP(Winv); // Check for catastrophic breakdown if (Ni == 0) { commentator().stop ("breakdown", NULL, "BlockLanczosSolver::iterate"); return false; } total_dim += Ni; #ifdef DETAILED_TRACE report << "Iteration " << iter << ": N_i = " << Ni << std::endl; report << "Iteration " << iter << ": Total dimension is " << total_dim << std::endl; #endif TIMER_START(solution); vectorMulTranspose (tmp, _matV[1], b, _vecS); _MD.vectorMul (tmp1, _Winv[1], tmp); vectorMul (tmp2, _matV[1], tmp1, _vecS); _VD.addin (x, tmp2); TIMER_STOP(solution); mul_SST (_matV[2], _AV, _vecS); TIMER_START(orthogonalization); mul (_AVTAVSST_VTAV, transpose (_AV), _AV, _vecS); BLTraceReport (report, _MD, "AV", 1, _AV); BLTraceReport (report, _MD, "V^T A V", 1, _VTAV); BLTraceReport (report, _MD, "Winv", 1, _Winv[1]); reportS (report, _vecS, 1); BLTraceReport (report, _VD, "x", 1, x); BLTraceReport (report, _MD, "V^T A^2 V", 1, _AVTAVSST_VTAV); _MD.addin (_AVTAVSST_VTAV, _VTAV); _MD.mul (_DEF, _Winv[1], _AVTAVSST_VTAV); addIN (_DEF); _MD.axpyin (_matV[2], _matV[1], _DEF); BLTraceReport (report, _MD, "D", 2, _DEF); mul (_DEF, _Winv[0], _VTAV, _vecS); _MD.axpyin (_matV[2], _matV[0], _DEF); TIMER_STOP(orthogonalization); BLTraceReport (report, _MD, "E", 2, _DEF); BLTraceReport (report, _MD, "V", 2, _matV[2]); checkAConjugacy (_MD, _AV, _matV[2], _DEF, 1, 2); // Now we're ready to begin the real iteration while (!_MD.isZero (_matV[j])) { int next_j = j + 1; if (next_j > 2) next_j = 0; TIMER_START(AV); _MD.blackboxMulLeft (_AV, A, _matV[j]); TIMER_STOP(AV); // First compute F_i+1, where we use Winv_i-2; then Winv_i and // Winv_i-2 can share storage, and we don't need the old _VTAV // and _AVTAVSST_VTAV any more. After this, F_i+1 is stored in // _DEF TIMER_START(orthogonalization); _MD.mul (_matT, _VTAV, _Winv[1 - i]); addIN (_matT); _MD.mul (_DEF, _Winv[i], _matT); _MD.mulin (_DEF, _AVTAVSST_VTAV); TIMER_STOP(orthogonalization); // Now get the next VTAV, Winv, and S_i TIMER_START(Winv); _MD.mul (_VTAV, transpose (_matV[j]), _AV); Ni = compute_Winv_S (_Winv[i], _vecS, _VTAV); TIMER_STOP(Winv); // Check for catastrophic breakdown if (Ni == 0) { ret = false; break; } total_dim += Ni; #ifdef DETAILED_TRACE report << "Iteration " << iter << ": N_i = " << Ni << std::endl; report << "Iteration " << iter << ": Total dimension is " << total_dim << std::endl; #endif BLTraceReport (report, _MD, "AV", iter, _AV); BLTraceReport (report, _MD, "F", iter + 1, _DEF); BLTraceReport (report, _MD, "V^T AV", iter, _VTAV); BLTraceReport (report, _MD, "Winv", iter, _Winv[i]); reportS (report, _vecS, iter); // Now that we have S_i, finish off with F_i+1 TIMER_START(orthogonalization); mulin (_matV[next_j], _DEF, _vecS); TIMER_STOP(orthogonalization); // Update x TIMER_START(solution); vectorMulTranspose (tmp, _matV[j], b, _vecS); _MD.vectorMul (tmp1, _Winv[i], tmp); vectorMul (tmp2, _matV[j], tmp1, _vecS); _VD.addin (x, tmp2); TIMER_STOP(solution); BLTraceReport (report, _VD, "x", iter, x); // Compute the next _AVTAVSST_VTAV TIMER_START(orthogonalization); mul (_AVTAVSST_VTAV, transpose (_AV), _AV, _vecS); BLTraceReport (report, _MD, "V^T A^2 V", iter, _AVTAVSST_VTAV); _MD.addin (_AVTAVSST_VTAV, _VTAV); // Compute D and update V_i+1 _MD.mul (_DEF, _Winv[i], _AVTAVSST_VTAV); addIN (_DEF); _MD.axpyin (_matV[next_j], _matV[j], _DEF); BLTraceReport (report, _MD, "D", iter + 1, _DEF); // Compute E and update V_i+1 mul (_DEF, _Winv[1 - i], _VTAV, _vecS); _MD.axpyin (_matV[next_j], _matV[prev_j], _DEF); BLTraceReport (report, _MD, "E", iter + 1, _DEF); // Add AV_i S_i S_i^T addin (_matV[next_j], _AV, _vecS); TIMER_STOP(orthogonalization); BLTraceReport (report, _MD, "V", iter + 1, _matV[next_j]); checkAConjugacy (_MD, _AV, _matV[next_j], _DEF, iter, iter + 1); #ifdef DETAILED_TRACE checkAConjugacy (_MD, AV1_backup, _matV[next_j], _DEF, 1, iter + 1); #endif i = 1 - i; prev_j = j; j = next_j; ++iter; if (!(iter % progress_interval)) commentator().progress (total_dim); if (total_dim > A.rowdim ()) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "Maximum number of iterations passed without termination" << std::endl; commentator().stop ("ERROR", NULL, "BlockLanczosSolver::iterate"); return false; } } // Because we set Winv to -Winv, we have -x at the end of the // iteration. So negate the result and return it _VD.negin (x); BLTraceReport (report, _VD, "x", iter, x); TIMER_REPORT(AV); TIMER_REPORT(Winv); TIMER_REPORT(solution); TIMER_REPORT(orthogonalization) commentator().stop (ret ? "done" : "breakdown", NULL, "BlockLanczosSolver::iterate"); return ret; } template int BlockLanczosSolver::compute_Winv_S (Matrix &Winv, std::vector &S, const Matrix &T) { linbox_check (S.size () == Winv.rowdim ()); linbox_check (S.size () == Winv.coldim ()); linbox_check (S.size () == T.rowdim ()); linbox_check (S.size () == T.coldim ()); linbox_check (S.size () == _matM.rowdim ()); linbox_check (S.size () * 2 == _matM.coldim ()); #ifdef DETAILED_TRACE commentator().start ("Computing Winv and S", "BlockLanczosSolver::compute_Winv_S", S.size ()); std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); report << "Input T:" << std::endl; _MD.write (report, T); #endif BlasMatrix M1 (_matM, 0, 0, T.rowdim (), T.coldim ()); BlasMatrix M2 (_matM, 0, T.coldim (), T.rowdim (), T.coldim ()); _MD.copy (M1, T); setIN (M2); permute (_indices, S); typename Field::Element Mjj_inv; size_t row; size_t Ni = 0; for (row = 0; row < S.size (); ++row) { #ifdef DETAILED_TRACE if (!(row & ((1 << 10) - 1))) commentator().progress (row); std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); report << "Iteration " << row << ": Matrix M = " << std::endl; _MD.write (report, _matM); #endif if (find_pivot_row (_matM, row, 0, _indices)) { #ifdef DETAILED_TRACE commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION) << "Pivot found for column " << _indices[row] << std::endl; #endif // Pivot element was found for (j, j) S[_indices[row]] = true; // Use column j of V_i in W_i // Give the (j, j) entry unity field().inv (Mjj_inv, _matM.getEntry (_indices[row], _indices[row])); _VD.mulin (*(_matM.rowBegin () + _indices[row]), Mjj_inv); // Zero the rest of the column j eliminate_col (_matM, row, 0, _indices, Mjj_inv); ++Ni; } else { #ifdef DETAILED_TRACE commentator().report (Commentator::LEVEL_NORMAL, INTERNAL_DESCRIPTION) << "No pivot found for column " << _indices[row] << std::endl; #endif // No pivot element found S[_indices[row]] = false; // Skip column j find_pivot_row (_matM, row, _block, _indices); const typename Field::Element &Mjj = _matM.refEntry (_indices[row], _indices[row] + _block); linbox_check (!field().isZero (Mjj)); // Zero the rest of the column j + N eliminate_col (_matM, row, _block, _indices, field().inv (Mjj_inv, Mjj)); // Zero row j _VD.subin (*(_matM.rowBegin () + _indices[row]), *(_matM.rowBegin () + _indices[row])); } } _MD.neg (Winv, M2); #ifdef DETAILED_TRACE report << "Computed Winv:" << std::endl; _MD.write (report, Winv); commentator().stop ("done", NULL, "BlockLanczosSolver::compute_Winv_S"); #endif return Ni; } template template Matrix1 &BlockLanczosSolver::mul_SST (Matrix1 &BSST, const Matrix2 &B, const std::vector &S) const { linbox_check (B.rowdim () == BSST.rowdim ()); linbox_check (B.coldim () == BSST.coldim ()); linbox_check (B.coldim () == S.size ()); typename Matrix2::ConstColIterator i; typename Matrix1::ColIterator j; std::vector::const_iterator k; for (i = B.colBegin (), j = BSST.colBegin (), k = S.begin (); i != B.colEnd (); ++i, ++j, ++k) { if (*k) _VD.copy (*j, *i); else _VD.subin (*j, *j); } return BSST; } template template Matrix1 &BlockLanczosSolver::mul (Matrix1 &C, const Matrix2 &A, const Matrix3 &B, const std::vector &S) const { linbox_check (A.coldim () == B.rowdim ()); linbox_check (A.rowdim () == C.rowdim ()); linbox_check (B.coldim () == C.coldim ()); typename Matrix2::ConstRowIterator i; typename Matrix3::ConstColIterator j; typename Matrix1::ColIterator k1; typename Matrix1::Col::iterator k2; std::vector::const_iterator l; for (j = B.colBegin (), l = S.begin (), k1 = C.colBegin (); j != B.colEnd (); ++j, ++l, ++k1) { if (*l) { for (i = A.rowBegin (), k2 = k1->begin (); i != A.rowEnd (); ++i, ++k2) _VD.dot (*k2, *i, *j); } else _VD.subin (*k1, *k1); } return C; } template template Matrix1 &BlockLanczosSolver::mulin (Matrix1 &A, const Matrix2 &B, const std::vector &S) const { linbox_check (A.coldim () == B.rowdim ()); linbox_check (B.rowdim () == B.coldim ()); linbox_check (A.coldim () == S.size ()); typename Matrix1::RowIterator i; typename Matrix2::ConstColIterator j; typename Vector::Dense::iterator k; std::vector::const_iterator l; for (i = A.rowBegin (); i != A.rowEnd (); ++i) { for (j = B.colBegin (), k = _tmp.begin (), l = S.begin (); j != B.colEnd (); ++j, ++k, ++l) { if (*l) _VD.dot (*k, *i, *j); else field().subin (*k, *k); } _VD.copy (*i, _tmp); } return A; } template template Vector1 &BlockLanczosSolver::vectorMul (Vector1 &w, const Matrix1 &A, const Vector2 &v, const std::vector &S) const { linbox_check (A.coldim () == v.size ()); linbox_check (A.rowdim () == w.size ()); typename Matrix1::ConstColIterator i = A.colBegin (); typename Vector2::const_iterator j = v.begin (); typename std::vector::const_iterator k = S.begin (); _VD.subin (w, w); for (; j != v.end (); ++j, ++i, ++k) if (*k) _VD.axpyin (w, *j, *i); return w; } template template Vector1 &BlockLanczosSolver::vectorMulTranspose (Vector1 &w, const Matrix1 &A, const Vector2 &v, const std::vector &S) const { linbox_check (A.rowdim () == v.size ()); linbox_check (A.coldim () == w.size ()); typename Matrix1::ConstColIterator i = A.colBegin (); typename Vector1::iterator j = w.begin (); typename std::vector::const_iterator k = S.begin (); for (; j != w.end (); ++j, ++i, ++k) if (*k) _VD.dot (*j, *i, v); return w; } template template Matrix1 &BlockLanczosSolver::addIN (Matrix1 &A) const { linbox_check (A.coldim () == A.rowdim ()); typename Matrix1::RowIterator i; size_t idx = 0; for (i = A.rowBegin (); i != A.rowEnd (); ++i, ++idx) field().addin ((*i)[idx], field().one); return A; } template template Matrix1 &BlockLanczosSolver::addin (Matrix1 &A, const Matrix2 &B, const std::vector &S) const { linbox_check (A.rowdim () == B.rowdim ()); linbox_check (A.coldim () == B.coldim ()); typename Matrix1::ColIterator i = A.colBegin (); typename Matrix2::ConstColIterator j = B.colBegin (); std::vector::const_iterator k = S.begin (); for (; i != A.colEnd (); ++i, ++j, ++k) if (*k) _VD.addin (*i, *j); return A; } template void BlockLanczosSolver::permute (std::vector &indices, const std::vector &S) const { size_t idx; std::vector::iterator i = indices.begin (); std::vector::const_iterator k; for (k = S.begin (), idx = 0; k != S.end (); ++k, ++idx) { if (!*k) { *i = idx; ++i; } } for (k = S.begin (), idx = 0; k != S.end (); ++k, ++idx) { if (*k) { *i = idx; ++i; } } } template template Matrix1 &BlockLanczosSolver::setIN (Matrix1 &A) const { linbox_check (A.coldim () == A.rowdim ()); typename Matrix1::RowIterator i; size_t i_idx; for (i = A.rowBegin (), i_idx = 0; i != A.rowEnd (); ++i, ++i_idx) { _VD.subin (*i, *i); field().assign ((*i)[i_idx], field().one); } return A; } /* Find a row suitable for pivoting in column col and exchange that row with row * A - Matrix on which to operate * idx - Index of the row with which to exchange * Returns true if a pivot could be found; false otherwise */ template bool BlockLanczosSolver::find_pivot_row (Matrix &A, size_t row, int col_offset, const std::vector &indices) { size_t idx; typename Matrix::Col col_vec; typename Matrix::Row row_vec; col_vec = *(_matM.colBegin () + indices[row] + col_offset); row_vec = *(_matM.rowBegin () + indices[row]); for (idx = row; idx < A.rowdim (); ++idx) { if (!field().isZero (A.getEntry (indices[idx], indices[row] + col_offset))) { if (idx != row) { typename Matrix::Row row1 = *(A.rowBegin () + indices[idx]); std::swap_ranges (row_vec.begin (), row_vec.end (), row1.begin ()); } return true; } } return false; } template void BlockLanczosSolver::eliminate_col (Matrix &A, size_t pivot, int col_offset, const std::vector &indices, const typename Field::Element &Ajj_inv) { // I'm assuming everything left of the column with the index of the pivot row is 0 size_t row; typename BlasMatrix::Row pivot_row; typename Field::Element p; pivot_row = *(A.rowBegin () + indices[pivot]); for (row = 0; row < pivot; ++row) { const typename Field::Element &Aij = A.getEntry (indices[row], indices[pivot] + col_offset); if (!field().isZero (Aij)) _VD.axpyin (*(A.rowBegin () + indices[row]), field().neg (p, Aij), pivot_row); } for (++row; row < A.rowdim (); ++row) { const typename Field::Element &Aij = A.getEntry (indices[row], indices[pivot] + col_offset); if (!field().isZero (Aij)) _VD.axpyin (*(A.rowBegin () + indices[row]), field().neg (p, Aij), pivot_row); } } template void BlockLanczosSolver::init_temps () { _VTAV.resize (_block, _block); _Winv[0].resize (_block, _block); _Winv[1].resize (_block, _block); _AVTAVSST_VTAV.resize (_block, _block); _matT.resize (_block, _block); _DEF.resize (_block, _block); _vecS.resize (_block); _matM.resize (_block, 2 * _block); _tmp.resize (_block); _indices.resize (_block); } // Check whether the given matrix is "almost" the identity, i.e. the identity // with some zeros on the diagonal template template bool BlockLanczosSolver::isAlmostIdentity (const Matrix1 &M) const { linbox_check (M.rowdim () == M.coldim ()); size_t i, j; for (i = 0; i < M.rowdim (); ++i) { for (j = 0; j < M.coldim (); ++j) { if (i != j && !field().isZero (M.getEntry (i, j))) { if (!field().isZero (M.getEntry (i, i))) { typename Matrix::ConstRowIterator row = M.rowBegin () + j; if (!_VD.isZero (*row)) return false; } else if (!field().isZero (M.getEntry (j, j))) { typename Matrix::ConstColIterator col = M.colBegin () + i; if (!_VD.isZero (*col)) return false; } else return false; } else if (!field().isZero (M.getEntry (i, j)) && !field().areEqual (M.getEntry (i, j), field().mOne)) return false; } } return true; } // Test suite for BlockLanczosSolver // All tests below return true on success and false on failure. They take a // single argument: n for the row and column dimension of the matrices on which // to operate // Compute a random dense matrix and run compute_Winv_S on it. Check that the // resulting S vector is all 'true' and then multiply the original matrix by the // output. Add 1 to the result with addIN and check the the result is zero with // isZero template bool BlockLanczosSolver::test_compute_Winv_S_mul (int n) const { commentator().start ("Testing compute_Winv_S, mul, addIN, and isZero", "test_compute_Winv_S_mul"); Matrix A (n, n); Matrix AT (n, n); Matrix ATA (n, n); Matrix W (n, n); Matrix WA (n, n); std::vector S (n); bool ret = true; RandomDenseStream stream (field(), _randiter, n); typename Matrix::RowIterator i = A.rowBegin (); typename Matrix::ColIterator j = AT.colBegin (); // With very, very, very, very high probability, this will be // nonsingular for (; i != A.rowEnd (); ++i, ++j) { stream >> *i; _VD.copy (*j, *i); } _MD.mul (ATA, AT, A); std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); report << "Computed A^T A:" << std::endl; _MD.write (report, ATA); compute_Winv_S (W, S, ATA); report << "Computed W:" << std::endl; _MD.write (report, W); // Now W should be -A^-1 _MD.mul (WA, W, ATA); report << "Computed WA^T A:" << std::endl; _MD.write (report, WA); if (!isAlmostIdentity (WA)) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: WA^T A != I" << std::endl; ret = false; } // Now, just for kicks, do the same on the other side _MD.mul (WA, ATA, W); report << "Computed A^T A W:" << std::endl; _MD.write (report, WA); if (!isAlmostIdentity (WA)) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: A^T AW != I" << std::endl; ret = false; } commentator().stop (MSG_STATUS (ret), NULL, "test_compute_Winv_S_mul"); return ret; } // Same as above, but use mulin rather than mul template bool BlockLanczosSolver::test_compute_Winv_S_mulin (int n) const { commentator().start ("Testing compute_Winv_S, copy, mulin, addIN, and isZero", "test_compute_Winv_S_mulin"); Matrix A (n, n); Matrix AT (n, n); Matrix ATA (n, n); Matrix W (n, n); Matrix WA (n, n); std::vector S (n); bool ret = true; RandomDenseStream stream (field(), _randiter, n); typename Matrix::RowIterator i = A.rowBegin (); typename Matrix::ColIterator j = AT.colBegin (); // With very, very, very, very high probability, this will be // nonsingular for (; i != A.rowEnd (); ++i, ++j) { stream >> *i; _VD.copy (*j, *i); } _MD.mul (ATA, AT, A); std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); report << "Computed A^T A:" << std::endl; _MD.write (report, ATA); compute_Winv_S (W, S, ATA); _MD.copy (WA, W); report << "Computed W:" << std::endl; _MD.write (report, W); // Now W should be -A^-1 _MD.mulin (WA, ATA); report << "Computed WA^T A:" << std::endl; _MD.write (report, WA); if (!isAlmostIdentity (WA)) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: WA^T A != I" << std::endl; ret = false; } // Now, just for kicks, do the same on the other side _MD.copy (WA, ATA); _MD.mulin (WA, W); report << "Computed A^T AW:" << std::endl; _MD.write (report, WA); if (!isAlmostIdentity (WA)) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: A^T AW != I" << std::endl; ret = false; } commentator().stop (MSG_STATUS (ret), NULL, "test_compute_Winv_S_mulin"); return ret; } // Compute a random nonsingular diagonal matrix and set an S vector so that // every other entry is true and the rest are false. Call mul_SST and check that // the entries on the resulting diagonal are correct. template bool BlockLanczosSolver::test_mul_SST (int n) const { commentator().start ("Testing addin", "test_mulTranspose"); bool ret = true; commentator().stop (MSG_STATUS (ret), NULL, "test_mulTranspose"); return ret; } // Same as test_compute_Winv_S_mul above, but zero out every other column using // the method for test_mul_SST template bool BlockLanczosSolver::test_mul_ABSST (int n) const { commentator().start ("Testing addin", "test_mulTranspose"); bool ret = true; commentator().stop (MSG_STATUS (ret), NULL, "test_mulTranspose"); return ret; } // Compute a random dense matrix and two random vectors, and check that = template bool BlockLanczosSolver::test_mulTranspose (int m, int n) const { commentator().start ("Testing mulTranspose, m-v mul", "test_mulTranspose"); Matrix A (m, n); typename Vector::Dense x (m), y (n); typename Vector::Dense ATx (n), Ay (m); Element ATxy, xAy; bool ret = true; RandomDenseStream stream (field(), _randiter, n); typename Matrix::RowIterator i = A.rowBegin (); for (; i != A.rowEnd (); ++i) stream >> *i; std::ostream &report = commentator().report (Commentator::LEVEL_UNIMPORTANT, INTERNAL_DESCRIPTION); report << "Computed A:" << std::endl; _MD.write (report, A); RandomDenseStream stream1 (field(), _randiter, m); stream1 >> x; RandomDenseStream stream2 (field(), _randiter, n); stream1 >> y; report << "Computed x: "; _VD.write (report, x) << std::endl; report << "Computed y: "; _VD.write (report, y) << std::endl; _MD.vectorMul (ATx, transpose (A), x); report << "Computed A^T x: "; _VD.write (report, ATx) << std::endl; _MD.vectorMul (Ay, A, y); report << "Computed Ay: "; _VD.write (report, Ay) << std::endl; _VD.dot (ATxy, ATx, y); report << "Computed ATxy: "; field().write (report, ATxy) << std::endl; _VD.dot (xAy, x, Ay); report << "Computed xAy: "; field().write (report, xAy) << std::endl; if (!field().areEqual (ATxy, xAy)) { commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_ERROR) << "ERROR: != " << std::endl; ret = false; } commentator().stop (MSG_STATUS (ret), NULL, "test_mulTranspose"); return ret; } // Same as test_mul_SST, but using mulTranspose template bool BlockLanczosSolver::test_mulTranspose_ABSST (int n) const { commentator().start ("Testing addin_ABSST", "test_mulTranspose_ABSST"); bool ret = true; commentator().stop (MSG_STATUS (ret), NULL, "test_mulTranspose_ABSST"); return ret; } // Same as test_mul_ABSST, but using mulin_ABSST template bool BlockLanczosSolver::test_mulin_ABSST (int n) const { commentator().start ("Testing addin_ABSST", "test_mulin_ABSST"); bool ret = true; commentator().stop (MSG_STATUS (ret), NULL, "test_mulin_ABSST"); return ret; } // Same as test_addin, but using test_addin_ABSST template bool BlockLanczosSolver::test_addin_ABSST (int n) const { commentator().start ("Testing addin_ABSST", "test_addin_ABSST"); bool ret = true; commentator().stop (MSG_STATUS (ret), NULL, "test_addin_ABSST"); return ret; } template bool BlockLanczosSolver::runSelfCheck () const { bool ret = true; commentator().start ("Running self check", "runSelfCheck", 10); if (!test_compute_Winv_S_mul (_block)) ret = false; if (!test_compute_Winv_S_mulin (_block)) ret = false; if (!test_mul_SST (_block)) ret = false; if (!test_mul_ABSST (_block)) ret = false; if (!test_mulTranspose (_block * 10, _block)) ret = false; if (!test_mulTranspose_ABSST (_block)) ret = false; if (!test_mulin_ABSST (_block)) ret = false; if (!test_addin_ABSST (_block)) ret = false; commentator().stop (MSG_STATUS (ret), NULL, "runSelfCheck"); return ret; } } // namespace LinBox #endif // __LINBOX_block_lanczos_INL // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/block-massey-domain.h000066400000000000000000000525711347646240000225070ustar00rootroot00000000000000/* linbox/algorithms/block-massey-domain.h * Copyright (C) 2002 Pascal Giorgi * * Written by Pascal Giorgi pascal.giorgi@lirmm.fr * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_massey_block_domain_H #define __LINBOX_massey_block_domain_H #include #include #include #include #include "linbox/util/commentator.h" #include "linbox/util/timer.h" #include #include "linbox/matrix/matrix-domain.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/factorized-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/algorithms/polynomial-matrix/order-basis.h" #include "linbox/matrix/polynomial-matrix.h" #include "linbox/util/timer.h" // #define __CHECK_RESULT // #define __DEBUG_MAPLE // #define __CHECK_LOOP // #define __CHECK_DISCREPANCY // #define __CHECK_TRANSFORMATION // #define __CHECK_SIGMA_RESULT // #define __PRINT_SEQUENCE // #define __PRINT_SIGMABASE // #define __PRINT_MINPOLY //#define _BM_TIMING #define DEFAULT_BLOCK_EARLY_TERM_THRESHOLD 10 namespace LinBox { template void write_maple(const Field& F, const std::vector & P) { std::cout<<"Matrix(["; for (size_t i=0;i< P[0].rowdim();++i){ std::cout<<"["; for (size_t j=0;j< P[0].coldim();++j){ F.write(std::cout,P[0].getEntry(i,j)); for (size_t k=1;k class BlockMasseyDomain { public: typedef _Field Field; typedef typename Field::Element Element; typedef _Sequence Sequence; typedef BlasMatrix Coefficient; typedef BlasSubmatrix CoeffView; private: Sequence *_container; const Field *_field; BlasMatrixDomain _BMD; MatrixDomain _MD; size_t EARLY_TERM_THRESHOLD; public: #ifdef _BM_TIMING mutable Timer ttGetMinPoly; mutable Timer tGetMinPoly; mutable Timer ttNewDiscrepancy; mutable Timer tNewDiscrepancy; mutable Timer ttShiftSigma; mutable Timer tShiftSigma; mutable Timer ttApplyPerm; mutable Timer tApplyPerm; mutable Timer ttUpdateSigma; mutable Timer tUpdateSigma; mutable Timer ttInverseL; mutable Timer tInverseL; mutable Timer ttGetPermutation; mutable Timer tGetPermutation; mutable Timer ttPLUQ; mutable Timer tPLUQ; mutable Timer ttDiscrepancy; mutable Timer tDiscrepancy; mutable Timer ttGetCoeff; mutable Timer tGetCoeff; mutable Timer ttCheckSequence; mutable Timer tCheckSequence; mutable Timer ttSetup; mutable Timer tSetup; mutable Timer ttMBasis; mutable Timer tMBasis; mutable Timer ttUpdateSerie; mutable Timer tUpdateSerie; mutable Timer ttBasisMultiplication; mutable Timer tBasisMultiplication; mutable Timer ttCopyingData; mutable Timer tCopyingData; mutable Timer Total; void clearTimer() { ttGetMinPoly.clear(); ttNewDiscrepancy.clear(); ttShiftSigma.clear(); ttApplyPerm.clear(); ttUpdateSigma.clear(); ttInverseL.clear(); ttGetPermutation.clear(); ttPLUQ.clear(); ttDiscrepancy.clear(); ttGetCoeff.clear(); ttCheckSequence.clear(); ttSetup.clear(); ttMBasis.clear(); ttUpdateSerie.clear(); ttBasisMultiplication.clear(); ttCopyingData.clear(), Total.clear(); } void print(Timer& T, const char* timer, const char* title) { if (&T != &Total) Total+=T; if (T.count() > 0) { std::cout< &Mat, size_t ett_default = DEFAULT_BLOCK_EARLY_TERM_THRESHOLD) : _container(Mat._container), _field(Mat._field), _BMD(Mat.field()), _MD(Mat.field()), EARLY_TERM_THRESHOLD (ett_default) { #ifdef _BM_TIMING clearTimer(); #endif } BlockMasseyDomain (Sequence *D, size_t ett_default = DEFAULT_BLOCK_EARLY_TERM_THRESHOLD) : _container(D), _field(&(D->field ())), _BMD(D->field ()), _MD(D->field ()), EARLY_TERM_THRESHOLD (ett_default) { #ifdef _BM_TIMING clearTimer(); #endif } // field of the domain const Field &field () const { return *_field; } // sequence of the domain Sequence *getSequence () const { return _container; } // left minimal generating polynomial of the sequence void left_minpoly (std::vector &P) { masseyblock_left(P); } void left_minpoly_rec (std::vector &P) { masseyblock_left_rec(P); } // left minimal generating polynomial of the sequence, keep track on degree void left_minpoly (std::vector &phi, std::vector °ree) { degree = masseyblock_left(phi); } void left_minpoly_rec (std::vector &P, std::vector °ree) { degree = masseyblock_left_rec(P); } // right minimal generating polynomial of the sequence void right_minpoly (std::vector &P) { masseyblock_right(P);} private: std::vector masseyblock_left (std::vector &P) { std::ostream& report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); const size_t length = _container->size (); const size_t m = _container->rowdim(); const size_t n = _container->coldim(); // ==================================================== // Sequence and iterator initialization // ==================================================== // Initialization of the sequence iterator typename Sequence::const_iterator _iter (_container->begin ()); // Reservation of memory for the entire sequence const Coefficient Zeromn(field(),m,n); std::vector S (length,Zeromn); Coefficient Unit(field(),m+n,m); const Coefficient Zero(field(),m+n,m); for (size_t i=0;i SigmaBase(1, Unit); // initialization of order of sigma base's rows std::vector order(m+n,1); for (size_t i=0;i degree(m+n,0); for (size_t i=0;i Perm1(m+n); for (size_t i=0;i=2) { for (size_t i=0;i BPerm1(Perm1); // Discrepancy= BPerm1.Discrepancy _BMD.mulin_right(BPerm1,Discrepancy); #ifdef __CHECK_DISCREPANCY report<<"Discrepancy"< Pp (CopyDiscr.coldim()); BlasPermutation Qt (CopyDiscr.rowdim()); PLUQMatrix PLUQ(CopyDiscr,Pp,Qt); // Get the matrix L of PLUQ decomposition TriangularBlasMatrix L(field(),m+n,m+n, Tag::Shape::Lower, Tag::Diag::Unit ); PLUQ.getL(L); // Get the tranposed permutation of Q from PLUQ // BlasPermutation Qt=PLUQ.getQ(); // Computation of permutations BPerm2 such that the last n rows of BPerm2.Qt.Discrepancy are non zero. std::vector Perm2(m+n); for (size_t i=0;i BPerm2(Perm2); // compute the inverse of L TriangularBlasMatrix invL (field(),m+n,m+n, Tag::Shape::Lower,Tag::Diag::Unit); FFPACK::trinv_left(field(),m+n,L.getPointer(),L.getStride(),invL.getWritePointer(),invL.getStride()); #ifdef __CHECK_TRANSFORMATION report<<"invL"< UF(0); // What? BlasMatrixDomain > BMDUF(UF); BMDUF.mulin_right(Qt,order); BMDUF.mulin_right(BPerm2,order); BMDUF.mulin_right(BPerm1,degree); BMDUF.mulin_right(Qt,degree); BMDUF.mulin_right(BPerm2,degree); for (size_t i=m;imax_degree) max_degree=degree[i]; } size_t size=SigmaBase.size(); if (SigmaBase.size()<= (size_t)max_degree) { SigmaBase.resize(size+1,Zero); //report << size << std::endl; size++; } //report << "size going in" << size << std::endl; for (int i= (int)size-2;i>=0;i--) for (size_t j=0;j;"<;"< NN+1)? NN+1: SigmaBase.size(); for (size_t i=min_t - 1 ; i trU(U,Tag::Shape::Upper,Tag::Diag::NonUnit); PLUQ.getU(trU); //Discrepancy=U; // BlasPermutation Pp= PLUQ.getP(); _BMD.mul(Discrepancy,trU, Pp); _BMD.mulin_right(BPerm2,Discrepancy); } if ( early_stop == EARLY_TERM_THRESHOLD) report<<"Early termination is used: stop at "< (max+1,tmp); for (size_t i=0;i deg(m); for (size_t i=0;i masseyblock_left_rec (std::vector &lingen) { #ifdef __CHECK_RESULT //std::ostream& report = commentator().report (Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); std::ostream& report = std::cout; #endif // Get information of the Sequence (U.A^i.V) size_t length = _container->size(); size_t m, n, mn; m = _container->rowdim(); n = _container->coldim(); mn=m+n; // Make the Power Serie from Sequence (U.A^i.V) and Identity //_container->recompute(); // make sure sequence is already computed typedef PolynomialMatrix PMatrix; PMatrix PowerSerie(field(),mn,n,length); typename Sequence::const_iterator _iter (_container->begin ()); for (size_t i=0;i< length; ++i, ++_iter) for (size_t j=0;j out_it (report,", "); std::copy ( shift.begin(), shift.end(), out_it ); report<<"];\n"; #endif // Compute the reverse polynomial of Sigma according to row shift size_t max= *std::max_element(shift.begin(),shift.begin()+m); //PMatrix lingen(field(),m,m,max+1); Coefficient Zeromm(field(),m,m); lingen.resize(max+1,Zeromm); for (size_t i=0;i class BlockWiedemannSolver{ public: typedef typename Context_::Field Field; typedef typename Field::Element Element; typedef typename Field::RandIter RandIter; typedef BlasVector Vector; typedef BlasMatrix Block; protected: Context_ _BMD; VectorDomain _VDF; RandIter _rand; size_t _left_blockdim; size_t _right_blockdim; #define BW_BLOCK_DEFAULT 8UL #define BW_MAX_TRY 100 public: const Field & field() const { return _BMD.field(); } BlockWiedemannSolver (const Context_ &C, size_t lblock=BW_BLOCK_DEFAULT, size_t rblock=BW_BLOCK_DEFAULT+1) : _BMD(C.field()), _VDF(C.field()), _rand(const_cast(C.field())), _left_blockdim(lblock), _right_blockdim(rblock) { if (_left_blockdim ==0) _left_blockdim=BW_BLOCK_DEFAULT; if (_right_blockdim ==0) _right_blockdim=BW_BLOCK_DEFAULT; } BlockWiedemannSolver (const Field &F, RandIter &rand, size_t lblock=BW_BLOCK_DEFAULT, size_t rblock=BW_BLOCK_DEFAULT+1) : _BMD(F), _VDF(F), _rand(rand) , _left_blockdim(lblock), _right_blockdim(rblock) { if (_left_blockdim ==0) _left_blockdim=BW_BLOCK_DEFAULT; if (_right_blockdim ==0) _right_blockdim=BW_BLOCK_DEFAULT; } template Vector &solve (Vector &x, const Blackbox &B, const Vector &y) const { try { solveNonSingular(x,B,y); } catch (const LinboxError& e) { std::cerr< Vector &solveNonSingular (Vector &x, const Blackbox &B, const Vector &y) const { Transpose A(B); size_t m,n,bw_try=0; m = A.rowdim(); n = A.coldim(); Vector z(field(),y.size()); if (_left_blockdim >m/2 || _right_blockdim >n/2) std::cerr<<"BlockWiedemannSolver (Warning) : block size too large, number of tries might be large"< > Sequence (&A,field(),U,V); BlockMasseyDomain > > MBD(&Sequence); std::vector minpoly; std::vector degree; MBD.left_minpoly_rec(minpoly,degree); //MBD.printTimer(); // std::cout<<"minpoly is: \n"; // write_maple(field(),minpoly); // std::cout< combi(_left_blockdim,Vector(F,deg+1)); for (size_t i=0;i<_left_blockdim;++i) for (size_t k=0;k 0;--i) { _VDF.axpy (lhs, combi[0][(size_t)i], y, lhsbis); A.applyTranspose (lhsbis, lhs); } Vector accu (lhs); for (size_t k=1;k<_left_blockdim;++k){ Vector row(F,m); for (size_t j=0;j= 0;--i) { _VDF.axpy (lhs, combi[k][(size_t)i], row, lhsbis_loc); A.applyTranspose (lhsbis_loc, lhs); } _VDF.addin(accu,lhs); } Element scaling; field().init(scaling); field().neg(scaling,combi[0][0]); field().invin(scaling); _VDF.mul(x,accu,scaling); } else { /* * Compute the solution according to the polynomial combination * given by the product of the idx-th row of MinPoly and UA. * this should decrease the number of sparse apply but increase memory requirement. */ size_t deg = degree[(size_t)idx]; Block idx_poly(field(),deg+1,_left_blockdim-1); for (size_t i=0;i= 0;--i) { for (size_t j=0;j 0;--i) { _VDF.axpy (lhs,minpoly[(size_t)i].getEntry(idx,0) , y, lhsbis); A.applyTranspose (lhsbis, lhs); } _VDF.addin(accu,lhs); Element scaling; field().init(scaling); field().neg(scaling,minpoly[0].getEntry(idx,0)); field().invin(scaling); _VDF.mul(x,accu,scaling); } B.apply(z,x); // checking result if ( bw_try> BW_MAX_TRY ) throw LinboxError("BlockWiedemann solve: LasVegas maximum tries reached"); bw_try++; } while (!_VDF.areEqual(z,y)); #ifdef _BW_LASVEGAS_COUNT std::cerr<<"BlockWiedemannSolver: nbr of try: "<s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/charpoly-rational.h000066400000000000000000000240211347646240000222660ustar00rootroot00000000000000/* linbox/blackbox/rational-reconstruction-base.h * Copyright (C) 2009 Anna Marszalek * * Written by Anna Marszalek * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_charpoly_rational_H #define __LINBOX_charpoly_rational_H #include "linbox/util/commentator.h" #include "linbox/util/timer.h" #include "linbox/ring/modular.h" //#include "linbox/field/gmp-rational.h" #include "linbox/blackbox/rational-matrix-factory.h" #include "linbox/algorithms/cra-builder-early-multip.h" #include "linbox/algorithms/cra-domain.h" //#include "linbox/algorithms/rational-cra.h" #include "linbox/algorithms/rational-reconstruction-base.h" #include "linbox/algorithms/classic-rational-reconstruction.h" #include "linbox/solutions/charpoly.h" #include "linbox/blackbox/compose.h" #include "linbox/blackbox/diagonal.h" namespace LinBox { //typedef GMPRationalField Rationals; //typedef Rationals::Element Quotient; /* * Computes the characteristic polynomial of a rational dense matrix */ template struct MyModularCharpoly{ T1* t1; T2* t2; int switcher; MyModularCharpoly(T1* s1, T2* s2, int s = 1) {t1=s1; t2=s2;switcher = s;} int setSwitcher(int s) {return switcher = s;} template IterationResult operator()(Polynomial& P, const Field& F) const { if (switcher ==1) { return t1->operator()(P,F); } else { return t2->operator()(P,F); } } }; template struct MyRationalModularCharpoly { const Blackbox &A; const MyMethod &M; const std::vector &mul;//multiplicative prec; MyRationalModularCharpoly(const Blackbox& b, const MyMethod& n, const std::vector& p) : A(b), M(n), mul(p) {} MyRationalModularCharpoly(MyRationalModularCharpoly& C) : // MyRationalModularCharpoly(C.A,C.M,C.mul) A(C.A),M(C.M),mul(C.mul) {} template IterationResult operator()(Polynomial& P, const Field& F) const { typedef typename Blackbox::template rebind::other FBlackbox; FBlackbox * Ap; MatrixHom::map(Ap, A, F); charpoly( P, *Ap, typename FieldTraits::categoryTag(), M); typename std::vector::const_iterator it = mul.begin(); typename Polynomial::iterator it_p = P.begin(); for (;it_p !=P.end(); ++it, ++it_p) { typename Field::Element e; F.init(e, *it); F.mulin(*it_p,e); } delete Ap; return IterationResult::CONTINUE; } }; template struct MyIntegerModularCharpoly { const Blackbox &A; const MyMethod &M; const std::vector &vD;//diagonal div. prec; const std::vector &mul;//multiplicative prec; MyIntegerModularCharpoly(const Blackbox& b, const MyMethod& n, const std::vector& ve, const std::vector& p) : A(b), M(n), vD(ve), mul(p) {} MyIntegerModularCharpoly(MyIntegerModularCharpoly& C) : // MyIntegerModularCharpoly(C.A,C.M,C.vD,C.mul) A(C.A),M(C.M),vD(C.vD),mul(C.mul) {} template IterationResult operator()(Polynomial& P, const Field& F) const { typedef typename Blackbox::template rebind::other FBlackbox; FBlackbox * Ap; MatrixHom::map(Ap, A, F); typename std::vector::const_iterator it; int i=0; for (it = vD.begin(); it != vD.end(); ++it,++i) { typename Field::Element t,tt; F.init(t,*it); F.invin(t); for (int j=0; j < A.coldim(); ++j) { F.mulin(Ap->refEntry(i,j),t); } } charpoly( P, *Ap, typename FieldTraits::categoryTag(), M); typename std::vector::const_iterator it2 = mul.begin(); typename Polynomial::iterator it_p = P.begin(); for (;it_p !=P.end(); ++it2, ++it_p) { typename Field::Element e; F.init(e, *it2); F.mulin(*it_p,e); } delete Ap; return IterationResult::CONTINUE; } }; template class Vector, class MyMethod > Vector& rational_charpoly (Vector &p, const BlasMatrix &A, const MyMethod &Met= Method::Auto()) { typedef typename Rationals::Element Quotient; commentator().start ("Rational Charpoly", "Rminpoly"); typedef Givaro::ModularBalanced Field; PrimeIterator genprime(FieldTraits::bestBitSize(A.coldim())); std::vector F(A.rowdim()+1,1); std::vector M(A.rowdim()+1,1); std::vector Di(A.rowdim()); RationalMatrixFactory,Rationals,BlasMatrix > FA(&A); Integer da=1, di=1; Integer D=1; FA.denominator(da); for (int i=(int)M.size()-2; i >= 0 ; --i) { //c[m]=1, c[0]=det(A); FA.denominator(di,i); D *=di; Di[(size_t)i]=di; M[(size_t)i] = M[(size_t)i+1]*da; } for (int i=0; i < (int) M.size() ; ++i ) { gcd(M[(size_t)i],M[(size_t)i],D); } Givaro::ZRing Z; BlasMatrix > Atilde(Z,A.rowdim(), A.coldim()); FA.makeAtilde(Atilde); ChineseRemainder< CRABuilderEarlyMultip > cra(LINBOX_DEFAULT_EARLY_TERMINATION_THRESHOLD); MyRationalModularCharpoly , MyMethod> iteration1(A, Met, M); MyIntegerModularCharpoly >, MyMethod> iteration2(Atilde, Met, Di, M); MyModularCharpoly , MyMethod>, MyIntegerModularCharpoly >, MyMethod> > iteration(&iteration1,&iteration2); RReconstruction, ClassicMaxQRationalReconstruction > > RR; std::vector PP; // use of integer due to non genericity of cra. PG 2005-08-04 UserTimer t1,t2; t1.clear(); t2.clear(); t1.start(); cra(2,PP,iteration1,genprime); t1.stop(); t2.start(); cra(2,PP,iteration2,genprime); t2.stop(); if (t1.time() < t2.time()) { //cout << "ratim"; iteration.setSwitcher(1); } else { //cout << "intim"; iteration.setSwitcher(2); } int k=4; while (! cra(k,PP, iteration, genprime)) { k *=2; Integer m; //Integer r; Integer a,b; cra.getModulus(m); cra.result(PP);//need to divide for (int i=0; i < (int)PP.size(); ++i) { Integer D_1; inv(D_1,M[(size_t)i],m); PP[(size_t)i] = (PP[(size_t)i]*D_1) % m; } Integer den,den1; std::vector num(A.rowdim()+1); std::vector num1(A.rowdim()+1); if (RR.reconstructRational(num,den,PP,m,-1)) {//performs reconstruction strating form c[m], use c[(size_t)i] as prec for c[(size_t)i-1] cra(1,PP,iteration,genprime); cra.getModulus(m); for (int i=0; i < (int)PP.size(); ++i) { Integer D_1; inv(D_1,M[(size_t)i],m); PP[(size_t)i] = (PP[(size_t)i]*D_1) % m; } if (RR.reconstructRational(num1,den1,PP,m,-1)) { bool terminated = true; if (den==den1) { for (int i=0; i < (int)num.size(); ++i) { if (num[(size_t)i] != num1[(size_t)i]) { terminated =false; break; } } } else { terminated = false; } //set p if (terminated) { size_t i =0; integer t,tt,ttt; integer err; // size_t max_err = 0; Quotient qerr; p.resize(PP.size()); typename Vector ::iterator it; Rationals Q; for (it= p.begin(); it != p.end(); ++it, ++i) { A.field().init(*it, num[(size_t)i],den); Q.get_den(t,*it); if (it != p.begin()) Q.get_den(tt,*(it-1)); else tt = 1; Q.init(qerr,t,tt); } return p; // break; } } } } cra.result(PP); size_t i =0; integer t,tt; integer err; // size_t max_res=0;int max_i; // double rel; // size_t max_resu=0; int max_iu; // size_t max_err = 0; Quotient qerr; p.resize(PP.size()); typename Vector ::iterator it; Rationals Q; for (it= p.begin(); it != p.end(); ++it, ++i) { A.field().init(*it, PP[(size_t)i],M[(size_t)i]); Q.get_den(t, *it); Q.get_num(tt,*it); err = M[(size_t)i]/t; // size_t resi = err.bitsize() + tt.bitsize() -1; // size_t resu = t.bitsize() + tt.bitsize() -1; // if (resi > max_res) {max_res = resi; max_i=i;} // if (resu > max_resu) {max_resu = resu; max_iu =i;} //size_t resu = t.bitsize() + tt.bitsize() -1; //if (err.bitsize() > max_err) max_err = err.bitsize(); } // max_res=0; for (it= p.begin()+1; it != p.end(); ++it) { //A.field().init(*it, PP[(size_t)i],M[(size_t)i]); Q.get_den(t, *it); Q.get_den(tt, *(it-1)); Q.init(qerr,t,tt); Q.get_num(tt, *it); // size_t resi = Q.bitsize(t,qerr) + tt.bitsize() -2; // if (resi > max_res) {max_res = resi; max_i=i;} //if (err.bitsize() > max_err) max_err = err.bitsize(); } commentator().stop ("done", NULL, "Iminpoly"); return p; } } #endif //__LINBOX_charpoly_rational_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/cia.h000066400000000000000000000101311347646240000173670ustar00rootroot00000000000000/* linbox/algorithms/cia.h * Copyright(C) LinBox * * Written by Clement Pernet * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== *. */ #ifndef __LINBOX_cia_H #define __LINBOX_cia_H #include #include "linbox/ring/modular.h" #include "linbox/randiter/random-prime.h" #include "linbox/matrix/dense-matrix.h" #include "linbox/matrix/matrix-domain.h" #include "linbox/solutions/minpoly.h" namespace LinBox { /*! @ingroup algorithms * Algorithm computing the integer characteristic polynomial * of a dense matrix. * * @bib [Dumas-Pernet-Wan ISSAC05] * * */ template < class Polynomial, class Blackbox > Polynomial& cia (Polynomial & P, const Blackbox & A, const Method::DenseElimination & M) { commentator().start ("Integer Givaro::Dense Charpoly ", "CIA"); using Ring = typename Blackbox::Field; Ring ZZ = A.field(); typedef Givaro::Modular Field; typedef typename Blackbox::template rebind::other FBlackbox; typedef PolynomialRing IntPolyDom; typedef PolynomialRing FieldPolyDom; typedef typename IntPolyDom::Element IntPoly; typedef typename FieldPolyDom::Element FieldPoly; IntPolyDom IPD(ZZ); /* Computation of the integer minimal polynomial */ IntPoly intMinPoly(ZZ); minpoly (intMinPoly, A, RingCategories::IntegerTag(), M); if (intMinPoly.size() == A.coldim()+1){ commentator().stop ("done", NULL, "CIA"); return P = intMinPoly; } // IPD.write(std::cerr<<"Minpoly = ", intMinPoly) << std::endl; /* Factorization over the integers */ std::vector intFactors; std::vector mult; IPD.factor (intFactors, mult, intMinPoly); size_t nf = intFactors.size(); /* One modular characteristic polynomial computation */ PrimeIterator primeg (FieldTraits::bestBitSize(A.coldim())); ++primeg; Field F(*primeg); FBlackbox fbb(F, A.rowdim(), A.coldim()); FieldPoly fieldCharPoly(F); MatrixHom::map(fbb, A); charpoly (fieldCharPoly, fbb, M); /* Determination of the multiplicities */ FieldPolyDom FPD (F); std::vector fieldFactors (nf); integer tmp_convert; // PG 2005-08-04 for (size_t i = 0; i < nf; ++i){ size_t d= intFactors[i].size(); fieldFactors[i].resize(d); for (size_t j = 0; j < d; ++j) //F.init ((fieldFactors[i])[j], (*intFactors[i])[j]); F.init ((fieldFactors[i])[j], ZZ.convert(tmp_convert,(intFactors[i])[j]));// PG 2005-08-04 } FieldPoly currPol = fieldCharPoly; FieldPoly r,tmp,q; std::vector multip (nf); for (size_t i = 0; i < nf; ++i) { FieldPoly currFact = fieldFactors[i]; r.clear(); int m=0; q=currPol; do{ currPol = q; FPD.divmod (q, r, currPol, currFact); m++; } while (FPD.isZero (r)); multip[i] = m-1; } IntPoly intCharPoly (ZZ); IPD.assign (intCharPoly, IPD.one); for (size_t i = 0; i < nf; ++i){ IPD.pow( P, intFactors[i], multip[i] ); IPD.mulin( intCharPoly, P ); } //for (size_t i = 0; i < nf; ++i) //delete intFactors[i]; commentator().stop ("done", NULL, "CIA"); return P = intCharPoly; } } #endif // __LINBOX_cia_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/classic-rational-reconstruction.h000066400000000000000000000175141347646240000251560ustar00rootroot00000000000000/* linbox/blackbox/classic-rational-reconstruction.h * Copyright (C) 2009 Anna Marszalek * * Written by Anna Marszalek * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_classic_reconstruction_H #define __LINBOX_classic_reconstruction_H #include #include "linbox/algorithms/rational-reconstruction-base.h" namespace LinBox { /* * implements classic rational reconstruction by extended euclidean algorithm, * Wang's bounds [Wang 1981] are used as default */ template class ClassicRationalReconstruction: public RReconstructionBase { protected: const bool _reduce; const bool _recursive; public: const Ring _intRing; typedef typename Ring::Element Element; ClassicRationalReconstruction(const Ring& Z, const bool reduce = true, const bool recursive = false) : RReconstructionBase(Z), _reduce(reduce), _recursive (recursive), _intRing(Z) {} ClassicRationalReconstruction (const ClassicRationalReconstruction& RR): RReconstructionBase(RR._intRing), _reduce(RR._reduce), _recursive(RR._recursive), _intRing(RR._intRing) {} ~ClassicRationalReconstruction() {} //Wang method bool reconstructRational(Element& a, Element& b, const Element& x, const Element& m) const { Element a_bound; _intRing.sqrt(a_bound, m/2); bool res = reconstructRational(a,b,x,m,a_bound); res = res && (b <= a_bound); return res; } bool reconstructRational(Element& a, Element& b, const Element& x, const Element& m, const Element& a_bound) const{ bool res=false; if (x == 0) { a = 0; b = 1; } else { res = ratrecon(a,b,x,m,a_bound); if (_recursive) { for(Element newbound = a_bound + 1; (!res) && (newbound m/2? x-m: x; b = 1; if (a > 0) res = (a < a_bound); else res = (-a < a_bound); } return res; } protected: bool ratrecon(Element& a,Element& b,const Element& x,const Element& m,const Element& a_bound) const { Element r0, t0, q, u; r0=m; t0=0; a=x; b=1; //Element s0,s1; s0=1,s1=0;//test time gcdex; while(a>=a_bound) //while (t0 <= b_bound) { q = r0; _intRing.divin(q,a); // r0/num //++this->C.div_counter; u = a; a = r0; r0 = u; // r0 <-- num _intRing.maxpyin(a,u,q); // num <-- r0-q*num //++this->C.mul_counter; //if (a == 0) return false; u = b; b = t0; t0 = u; // t0 <-- den _intRing.maxpyin(b,u,q); // den <-- t0-q*den //++this->C.mul_counter; //u = s1; //s1 = s0; //s0 = u; //_intRing.maxpyin(s0,u,q); //++this->C.mul_counter; } //if (den < 0) { // _intRing.negin(num); // _intRing.negin(den); //} if ((a>0) && (_reduce)) { // [GG, MCA, 1999] Theorem 5.26 // (ii) Element gg; //++this->C.gcd_counter; if (_intRing.gcd(gg,a,b) != 1) { Element ganum, gar2; for( q = 1, ganum = r0-a, gar2 = r0 ; (ganum >= a_bound) || (gar2C.mul_counter;++this->C.mul_counter; if (t0 < 0) { a = -r0; b = -t0; } else { a = r0; b = t0; } // if (t0 > m/k) { if (abs((double)b) > (double)m/(double)a_bound) { if (!_recursive) { std::cerr << "*** Error *** No rational reconstruction of " << x << " modulo " << m << " with denominator <= " << (m/a_bound) << std::endl; } return false; } if (_intRing.gcd(gg,a,b) != 1) { if (!_recursive) std::cerr << "*** Error *** There exists no rational reconstruction of " << x << " modulo " << m << " with |numerator| < " << a_bound << std::endl << "*** Error *** But " << a << " = " << b << " * " << x << " modulo " << m << std::endl; return false; } } } // (i) if (b < 0) { _intRing.negin(a); _intRing.negin(b); } // std::cerr << "RatRecon End " << num << "/" << den << std::endl; return true; } }; /* * implements classic rational reconstruction by extended euclidean algorithm, * reconstructed pair corresponds to the maximal (or large enough) quotient, see MQRR Alg. of Monagan [Monagan2004] is used */ template class ClassicMaxQRationalReconstruction:public ClassicRationalReconstruction { public: const Ring _intRing; typedef typename Ring::Element Element; ClassicMaxQRationalReconstruction(const Ring& Z, const bool reduce = true, const bool recursive = false) : ClassicRationalReconstruction(Z,reduce,recursive), _intRing(Z) {} ClassicMaxQRationalReconstruction(const ClassicMaxQRationalReconstruction& RR) : ClassicRationalReconstruction(RR), _intRing(RR._intRing) {} ~ClassicMaxQRationalReconstruction() {} bool reconstructRational(Element& a, Element& b, const Element& x, const Element& m) const { bool res = maxEEA(a,b,x,m); return res; } bool reconstructRational(Element& a, Element& b, const Element& x, const Element& m, const Element& a_bound) const{ // bool res= false; return /* res =*/ ClassicRationalReconstruction::reconstructRational(a,b,x,m,a_bound); } protected: bool maxEEA(Element& a, Element& b, const Element& x, const Element& m) const{ Element qmax = 0, amax=x, bmax =1; Element r0, t0, q, u; r0=m; t0=0; a=x; b=1; //Element s0,s; s0=1,s=0;//test time gcdex; Element T = (uint32_t) m.bitsize(); int c = 5; //should be changed here to enhance probability of correctness while((a>0) && (r0.bitsize() > T.bitsize() + (size_t)c)) { q = r0; _intRing.divin(q,a); // r0/num //++this->C.div_counter; if (q > qmax) { amax = a; bmax = b; qmax = q; if (qmax.bitsize() > T.bitsize() + (size_t)c) break; } u = a; a = r0; r0 = u; // r0 <-- num _intRing.maxpyin(a,u,q); // num <-- r0-q*num //++this->C.mul_counter; //if (a == 0) return false; u = b; b = t0; t0 = u; // t0 <-- den _intRing.maxpyin(b,u,q); // den <-- t0-q*den //++this->C.mul_counter; } a = amax; b = bmax; if (b < 0) { _intRing.negin(a); _intRing.negin(b); } Element gg; _intRing.gcd(gg,a,b); //++this->C.gcd_counter; //if (q > T) //Element T = m.bitsize(); //int c = 20; //T=0;c=0; if (qmax.bitsize() > T.bitsize() + (size_t)c) { return true; } else return false; //if (gg > 1) return false; //else return true; } }; } #endif //__LINBOX_classic_reconstruction_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/coppersmith-invariant-factors.h000066400000000000000000000125311347646240000246260ustar00rootroot00000000000000/* linbox/algorithms/coppersmith-invariant-factors.h * Copyright (C) 2014 Alex Stachnik * * Written by Alex Stachnik * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_coppersmith_invariant_factors_H #define __LINBOX_coppersmith_invariant_factors_H #include "linbox/algorithms/block-coppersmith-domain.h" #include "linbox/algorithms/blackbox-block-container.h" //#include "linbox/algorithms/alt-blackbox-block-container.h" #include "linbox/matrix/random-matrix.h" #include #include #include #include #include #include "linbox/ring/givaro-poly-mod-poly.h" #include namespace LinBox { template class CoppersmithInvariantFactors { public: typedef Field_ Field; typedef Blackbox_ Blackbox; typedef MatrixDomain Domain; typedef typename Domain::OwnMatrix Block; typedef typename Field::RandIter RandIter; typedef Givaro::Poly1Dom PolyDom; typedef GivaroPoly PolyRing; typedef typename PolyRing::Element PolyElement; typedef MatrixDomain PolyMatDom; typedef typename PolyMatDom::OwnMatrix PolyBlock; CoppersmithInvariantFactors(): M_(NULL), n_(0), b_(0) {} void init(Field& F, const Blackbox& M, size_t b) { F_=F; M_=M; n_=M.rowdim(); MD_=Domain(F); U_=Block(F,b,M.rowdim()); V_=Block(F,M.rowdim(),b); b_=b; RandIter RI(F_); RandomDenseMatrix RDM(F_,RI); RDM.random(U_); RDM.random(V_); } CoppersmithInvariantFactors(Field& F, const Blackbox& M, size_t b): MD_(F), F_(F), M_(&M), n_(M.rowdim()), b_(b), U_(F,b,M.rowdim()), V_(F,M.rowdim(),b) { RandIter RI(F_); RandomDenseMatrix RDM(F_,RI); RDM.random(U_); RDM.random(V_); } template CoppersmithInvariantFactors(Field& F, const Blackbox& M, size_t b, const Mat1& U, const Mat2& V): MD_(F), F_(F), M_(&M), n_(M.rowdim()), b_(b), U_(F,b,M.rowdim()), V_(F,M.rowdim(),b) { MD_.copy(U_,U); MD_.copy(V_,V); } template size_t computeFactors(PolyRingVector& diag, int earlyTerm=10) { //typedef AltBlackboxBlockContainer::OwnMatrix > BBC; typedef BlackboxBlockContainer BBC; typedef BlockCoppersmithDomain,BBC> BCD; BBC blockSeq(M_,F_,U_,V_); MatrixDomain BMD(F_); BCD coppersmith(BMD,&blockSeq,earlyTerm); std::vector deg; std::vector::OwnMatrix > gen; deg=coppersmith.right_minpoly(gen); commentator().report(Commentator::LEVEL_IMPORTANT,PROGRESS_REPORT) <<"Finished computing minpoly"< GPMPD(F_,detPoly); GivaroPoly::Parent_t > GPMPDW(*(GPMPD.getExtension())); MatrixDomain > > GPMPDWMD(GPMPDW); typename MatrixDomain > >::OwnMatrix MMCopy(GPMPDW,b_,b_); for (int i=0;i SFKB(PMD); diag.resize(b_); SFKB.solve(diag,MM); for (uint32_t i = 0; i < diag.size(); ++i) { R.normalizeIn(diag[i]); } return diag.size(); } protected: Domain MD_; Field F_; const Blackbox *M_; size_t n_,b_; Block U_,V_; }; } #endif //__LINBOX_coppersmith_invariant_factors_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/coppersmith.h000066400000000000000000000400521347646240000211750ustar00rootroot00000000000000/* linbox/algorithms/coppersmith.h * evolved from block-wiedemann.h by George Yuhasz * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ #ifndef __LINBOX_coppersmith_H #define __LINBOX_coppersmith_H #include #include #include #include #include #include "linbox/integer.h" #include "linbox/util/commentator.h" #include "linbox/algorithms/blackbox-block-container.h" #include "linbox/algorithms/block-coppersmith-domain.h" #include "linbox/solutions/det.h" #include "linbox/util/error.h" #include "linbox/util/debug.h" namespace LinBox { template class CoppersmithSolver{ public: typedef _Domain Domain; typedef typename Domain::Field Field; typedef typename Domain::Element Element; typedef typename Domain::OwnMatrix Block; typedef typename Domain::Matrix Sub; inline const Domain & domain() const { return *_MD; } inline const Field & field() const { return domain().field(); } protected: const Domain *_MD; size_t blocking; public: CoppersmithSolver(const Domain &MD, size_t blocking_ = 0) : _MD(&MD), blocking(blocking_) {} template Vector &solveNonSingular (Vector &x, const Blackbox &B, const Vector &y) const { commentator().start ("Coppersmith solveNonSingular", "solveNonSingular"); #if 1 std::ostream& report = commentator().report(Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); #endif //Set up the projection matrices and their dimensions size_t d = B.coldim(); size_t r,c; integer tmp = uint64_t(d); //Set the blocking size, Using Pascal Giorgi's convention if(blocking==0){ r=tmp.bitsize()-1; c=tmp.bitsize()-1; }else r=c=blocking; //Create the block Block U(field(),r,d); Block W(field(),d,c-1); Block V(field(),d,c); //Pick random entries for U and W. W will become the last c-1 columns of V U.random(); W.random(); //Multiply W by B on the left and place it in the last c-1 columns of V Sub V2(V,0,1,d,c-1); domain().mul(V2,B,W); //Make the first column of V a copy of the right side of the system, y for(size_t i=0; i blockseq(&B,field(),U,V); //Get the generator of the projection using the Coppersmith algorithm (slightly modified by Yuhasz) BlockCoppersmithDomain > BCD(domain(), &blockseq,d); std::vector gen; std::vector deg; deg = BCD.right_minpoly(gen); report << "Size of blockseq " << blockseq.size() << std::endl; report << "Size of gen " << gen.size() << std::endl; for(size_t i = 0; i < gen[0].coldim(); i++) report << "Column " << i << " has degree " << deg[i] << std::endl; //Reconstruct the solution //Pick a column of the generator with a nonzero element in the first row of the constant coefficient size_t idx = 0; if(field().isZero(gen[0].getEntry(0,0))){ size_t i = 1; while(i class CoppersmithRank{ public: typedef _Domain Domain; typedef typename Domain::Field Field; typedef typename Domain::Element Element; typedef typename Domain::Matrix Block; typedef typename Domain::Submatrix Sub; typedef typename Field::RandIter Random; inline const Domain & domain() const { return *_MD; } inline const Field & field() const { return domain().field(); } protected: const Domain *_MD; Random iter; size_t blocking; //Compute the determinant of a polynomial matrix at the given set of evaluation points //Store the results in the vector dets. void EvalPolyMat(std::vector &dets, std::vector &values, std::vector & mat) const { size_t deg = mat.size() -1; size_t numv = values.size(); //Compute the determinant of the evaluation at values[i] for each i for(size_t i = 0; i::reverse_iterator addit = mat.rbegin(); addit++; for(addit; addit != mat.rend(); addit++){ domain().mulin(evalmat,values[i]); domain().addin(evalmat,*addit); }//end loop computing horner evaluation //Compute the determinant of the evaluation and store it in dets[i] dets[i] = det(dets[i],evalmat); }//end loop over evaluation points }//end evaluation of polynominal matrix determinant public: CoppersmithRank(const Domain &MD, size_t blocking_ = 0) : _MD(&MD), blocking(blocking_), iter(MD.field()) {} template size_t rank (const Blackbox &B) const { commentator().start ("Coppersmith rank", "rank"); #if 1 std::ostream& report = commentator().report(Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); #endif //Set up the projection matrices and their dimensions size_t d = B.coldim(); size_t r,c; integer tmp = uint64_t(d); //Set the blocking size, Using Pascal Giorgi's convention if(blocking==0){ r=tmp.bitsize()-1; c=tmp.bitsize()-1; }else r=c=blocking; //Create the block Block U(field(),r,d); Block V(field(),d,c); //Pick random entries for U and W. W will become the last c-1 columns of V U.random(); V.random(); BlackboxBlockContainer blockseq(&B,field(),U,V); //Get the generator of the projection using the Coppersmith algorithm (slightly modified by Yuhasz) BlockCoppersmithDomain > BCD(domain(), &blockseq,d); std::vector gen; std::vector deg; deg = BCD.right_minpoly(gen); for(size_t i = 0; i < gen[0].coldim(); i++) report << "Column " << i << " has degree " << deg[i] << std::endl; //Compute the rank via the determinant of the generator //Get the sum of column degrees //This is the degree of the determinant via Yuhasz thesis //size_t detdeg = std::accumulate(deg.begin(), deg.end(), 0); size_t detdeg= 0; for(size_t i = 0; i < gen[0].coldim(); i++) detdeg+=deg[i]; //Set up interpolation with one more evaluation point than degree size_t numpoints = d+1; std::vector evalpoints(numpoints), evaldets(numpoints); for(typename std::vector::iterator evalit = evalpoints.begin(); evalit != evalpoints.end(); evalit++){ do{ //do iter.random(*evalit); while(field().isZero(*evalit)); iter.random(*evalit); }while ((std::find(evalpoints.begin(), evalit, *evalit) != evalit)); }//end evaluation point construction loop //Evaluate the generator determinant at the points EvalPolyMat(evaldets, evalpoints, gen); for(size_t k = 0; k PolyCRT; PolyCRT Interpolator(field(), evalpoints, "x"); typename PolyCRT::Element Determinant; Interpolator.RnsToRing(Determinant,evaldets); Givaro::Degree intdetdeg; Interpolator.getpolydom().degree(intdetdeg,Determinant); Givaro::Degree intdetval; Interpolator.getpolydom().val(intdetval,Determinant); if(detdeg != (size_t) intdetdeg.value()){ report << "sum of column degrees " << detdeg << std::endl; report << "interpolation degree " << intdetdeg.value() << std::endl; } report << "sum of column degrees " << detdeg << std::endl; report << "interpolation degree " << intdetdeg.value() << std::endl; report << "valence (trailing degree) " << intdetval.value() << std::endl; for(size_t k = 0; k class CoppersmithDeterminant{ public: typedef _Domain Domain; typedef typename Domain::Field Field; typedef typename Domain::Element Element; typedef typename Domain::Matrix Block; typedef typename Domain::Submatrix Sub; typedef typename Field::RandIter Random; inline const Domain & domain() const { return *_MD; } inline const Field & field() const { return domain().field(); } protected: const Domain *_MD; Random iter; size_t blocking; //Compute the determinant of a polynomial matrix at the given set of evaluation points //Store the results in the vector dets. void EvalPolyMat(std::vector &dets, std::vector &values, std::vector & mat) const { size_t deg = mat.size() -1; size_t numv = values.size(); //Compute the determinant of the evaluation at values[i] for each i for(size_t i = 0; i::reverse_iterator addit = mat.rbegin(); addit++; for(addit; addit != mat.rend(); addit++){ domain().mulin(evalmat,values[i]); domain().addin(evalmat,*addit); }//end loop computing horner evaluation //Compute the determinant of the evaluation and store it in dets[i] dets[i] = det(dets[i],evalmat); }//end loop over evaluation points }//end evaluation of polynominal matrix determinant public: CoppersmithDeterminant(const Domain &MD, size_t blocking_ = 0) : _MD(&MD), blocking(blocking_), iter(MD.field()) {} template Element det (const Blackbox &B) const { commentator().start ("Coppersmith determinant", "determinant"); #if 1 std::ostream& report = commentator().report(Commentator::LEVEL_IMPORTANT, INTERNAL_DESCRIPTION); #endif //Set up the projection matrices and their dimensions size_t d = B.coldim(); size_t r,c; integer tmp = uint64_t(d); //Use given blocking size, if not given use Pascal Giorgi's convention if(blocking==0){ r=tmp.bitsize()-1; c=tmp.bitsize()-1; }else r=c=blocking; //Create the block Block U(field(),r,d); Block V(field(),d,c); //Pick random entries for U and W. W will become the last c-1 columns of V U.random(); V.random(); //Multiply V by B on the left domain().leftMulin(B,V); //Create the sequence container and its iterator that will compute the projection BlackboxBlockContainer blockseq(&B,field(),U,V); //Get the generator of the projection using the Coppersmith algorithm (slightly modified by Yuhasz) BlockCoppersmithDomain > BCD(domain(), &blockseq,d); std::vector gen; std::vector deg; deg = BCD.right_minpoly(gen); //Compute the determinant via the constant coefficient of the determinant of the generator //Get the sum of column degrees //This is the degree of the determinant via Yuhasz thesis //size_t detdeg = std::accumulate(deg.begin(), deg.end(), 0); size_t detdeg= 0; for(size_t i = 0; i < gen[0].coldim(); i++) detdeg+=deg[i]; //Set up interpolation with one more evaluation point than degree size_t numpoints = 2*d; std::vector evalpoints(numpoints), evaldets(numpoints); for(typename std::vector::iterator evalit = evalpoints.begin(); evalit != evalpoints.end(); evalit++){ do{ do iter.random(*evalit); while(field().isZero(*evalit)); }while ((std::find(evalpoints.begin(), evalit, *evalit) != evalit)); }//end evaluation point construction loop //Evaluate the generator determinant at the points EvalPolyMat(evaldets, evalpoints, gen); //Construct the polynomial using Givare interpolation //Stolen from Pascal Giorgi, linbox/examples/omp-block-rank.C typedef Givaro::Poly1CRT PolyCRT; PolyCRT Interpolator(field(), evalpoints, "x"); typename PolyCRT::Element Determinant; Interpolator.RnsToRing(Determinant,evaldets); Givaro::Degree intdetdeg; Interpolator.getpolydom().degree(intdetdeg,Determinant); Givaro::Degree intdetval(0); Interpolator.getpolydom().val(intdetval,Determinant); if(d != (size_t)intdetdeg.value()){ report << "The matrix is singular, determinant is zero" << std::endl; return field(0).zero; } Interpolator.write(report << "Interpolated determinant: ", Determinant) << std::endl; Element intdeterminant(field().zero); Interpolator.getpolydom().getEntry(intdeterminant,intdetval,Determinant); commentator().stop ("done", NULL, "Coppersmith determinant"); return intdeterminant; } }; // end of class CoppersmithDeterminant }// end of namespace LinBox #endif //__LINBOX_coppersmith_H // Local Variables: // mode: C++ // tab-width: 4 // indent-tabs-mode: nil // c-basic-offset: 4 // End: // vim:sts=4:sw=4:ts=4:et:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s linbox-1.6.3/linbox/algorithms/cra-builder-early-multip.h000066400000000000000000000225761347646240000234660ustar00rootroot00000000000000/* Copyright (C) 2007 LinBox * Written by JG Dumas * * * ========LICENCE======== * This file is part of the library LinBox. * * LinBox is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ========LICENCE======== */ /*! @file algorithms/cra-builder-early-multip.h * @ingroup algorithms * @brief NO DOC */ #ifndef __LINBOX_cra_early_multip_H #define __LINBOX_cra_early_multip_H #include "linbox/util/timer.h" #include #include "linbox/integer.h" #include "linbox/solutions/methods.h" #include #include #include "linbox/algorithms/cra-builder-single.h" #include "linbox/algorithms/cra-builder-full-multip.h" namespace LinBox { /*! @brief NO DOC * @ingroup CRA * */ template struct CRABuilderEarlyMultip : public CRABuilderEarlySingle, public CRABuilderFullMultip { typedef Domain_Type Domain; typedef typename Domain::Element DomainElement; typedef CRABuilderEarlyMultip Self_t; protected: // Random coefficients for a linear combination // of the elements to be reconstructed std::vector< size_t > randv; Integer& result(Integer &d) { std::cout << "should not be called" << std::endl; return d ;} ; // DON'T TOUCH public: CRABuilderEarlyMultip(const size_t EARLY=LINBOX_DEFAULT_EARLY_TERMINATION_THRESHOLD) : CRABuilderEarlySingle(EARLY), CRABuilderFullMultip() {} Integer& getModulus(Integer& m) { CRABuilderEarlySingle::getModulus(m); return m; } Integer& getResidue(Integer& m) { CRABuilderEarlySingle::getResidue(m); return m; } template class Vect> Vect& getResidue(Vect& m) { CRABuilderFullMultip::getResidue(m); return m; } //! Init template class Vect> void initialize (const Integer& D, const Vect& e) { srand48(BaseTimer::seed()); randv. resize ( e.size() ); for ( std::vector::iterator int_p = randv. begin(); int_p != randv. end(); ++ int_p) *int_p = ((size_t)lrand48()) % 20000; Integer z; dot(z, D, e, randv); CRABuilderEarlySingle::initialize(D, z); CRABuilderFullMultip::initialize(D, e); } template // template